*
Das grössere Problem von Java ist nicht der GC, sondern dass jeder Mist per Referenz gehandhabt werden muss by Design (aka 1995 so entschieden und nun für alle Ewigkeit gleich).
Wenn du z.B. in Java einen Array von Vertices haben willst, dann ist das nicht möglich. Für den unerfahrenen Programmierer sieht es vielleicht so aus, aber in Wahrheit hast du einen Array von Referenzen auf Vertices, welche in der Regel durch den Speicher verteilt sind. Stell dir jetzt eine etwas komplexere Objektstruktur vor, etwa das dein Vertex mehrere Vektoren enthält. In anderen Sprachen kein Problem (schon QBasic konnte das), macht das in Java niemand so aus einem einfachen Grund.
Jede Instanz einer Klasse muss separat angelegt und per Referenz angesprochen werden. Jeder Methodenaufruf verursacht diverse Speicherzugriffe und Dereferenzierungen, was einfach Performance kostet (oder musst das Design opfern und schiebst int[] umher als Opaques). Wenn du per Interop eine Speicherstruktur übergeben willst (gerade etwa bei OpenGL), muss diese jedesmal umkopiert und in einen flachen, zusammenhängenden Speicherbereich projiziert werden.
Aber eigentlich ist auch das alles immernoch vernachlässigbar. Games werden meistens einfach mit der Sprache entwickelt, welche auf der jeweiligen Plattform am bequemsten ist. Auf Android ist es Java (egal ob du Java hasst oder nicht, mit dem NDK will man wenn möglich nichts zu tun haben), fast überall sonst ist es eine Abart von C.