El mundo del desarrollo del juego es divertido: por un lado, a menudo aceptan rápidamente nuevas ideas, por otro lado, todavía están en la edad de piedra.
La verdad es que rara vez hay tantos incentivos para cambiar a .NET / Java / algo que no sea C / C ++.
La mayoría de las compañías de juegos licencian partes del motor de juego de otras compañías. Estas partes están escritas en C ++, y aunque es posible que tenga acceso a la fuente para poder portarlo, eso requiere mucho esfuerzo (y, por supuesto, la licencia debe permitirlo).
Además, ya existe una gran cantidad de código heredado en C ++. Si el código de proyectos anteriores se puede reutilizar (por ejemplo, si está escribiendo una secuela), eso cuenta aún más a favor de quedarse con el mismo idioma, en lugar de reescribirlo en un nuevo idioma (más aún, ya que es probable que reintroduzca una tonelada de errores que necesitarás para pasar el tiempo arreglando.
Finalmente, de todos modos, es raro que los juegos se escriban en 100% C ++: se hace mucho usando lenguajes de script, ya sea personalizados o simplemente integrando idiomas existentes (Lua es uno de los más populares en estos días).
En lo que respecta a la recolección de basura, eso puede ser un pequeño problema. El problema no es tanto que exista, sino más bien cómo funciona: el recolector de basura NO DEBE ser bloqueante (o al menos se garantiza que solo se bloqueará brevemente), ya que es simplemente inaceptable que el juego se congele durante 10 segundos escanea toda la memoria asignada para ver qué se puede liberar. Sé que Java tiende a ahogarse un poco en GC'ing cuando está cerca de quedarse sin memoria (y para algunos juegos, lo hará).
También está un poco más restringido en lo que puede hacer: no puede explotar completamente el hardware debido a la sobrecarga del tiempo de ejecución. Imagina que Crysis está escrito en Java ... incluso si esa es la única diferencia visible, simplemente no sería la misma (también estoy bastante seguro de que necesitarías un Core i7 para ejecutarlo).
Esto no significa que estos lenguajes no tengan su lugar en el desarrollo de juegos, y no, no solo me refiero a la programación de herramientas. Para la mayoría de los juegos, no necesita ese rendimiento adicional que obtiene de C ++, incluidos los juegos en 3D, y si está escribiendo todo desde cero, puede tener mucho sentido usar algo como XNA; de hecho, hay un buena oportunidad lo hará.
En cuanto a los juegos comerciales, ¿ cuenta RuneScape ? Ese podría ser el juego Java más exitoso que existe.