1) Ignorujeme skutečnost, že Java bude brutálně optimalizovat, a JITovat, takže ve skutečnosti ten kód bude všelijakej.
Ano, samozřejmě, ale když píšeš tu generickou funkci, tak v Javě tohle
nevíš, nevíš, jak se zrovna VM vyspí a za jakých podmínek usoudí, že dané volání pro nějaký typ inlinuje, jak dlouho bude trvat, než si všimne, že to je potřeba a kolik tě bude stát tato činnost VM. V C++ nebo Rustu tohle víš dopředu o dost lépe (byť samozřejmě taky ne dokonale), protože ta abstrakce je prostě výkonově transparentnější, je to predikovatelnější.
(Samozřejmě to řešení v Rustu/C++ má i svoje nevýhody - neříkám, že ne.)