De acuerdo, hay mucha información errónea en este hilo.
Conozco muy bien el negocio del juego , después de haber estado en él durante 25 años. También conozco Java en juegos extremadamente bien después de haber sido el evangelista técnico de Sun Java Game y ser experto en programación de rendimiento de Java.
En términos de velocidad computacional, Java supera a C ++ en muchos puntos de referencia de computación científica en la actualidad. Puede escribir código patológico en cualquier idioma que funcione mal si lo desea, pero sobre todo, están a la par y lo han estado durante mucho tiempo.
En términos de uso de memoria, Java tiene algunos gastos generales. HelloWorld es un programa 4K en Java. Pero esa sobrecarga no tiene sentido en los sistemas multi GB de hoy. Finalmente, Java tiene más tiempo de inicio. No recomendaría usar Java para utilidades de tiempo de ejecución corto como los comandos de línea de comandos de Unix. En esos casos, el inicio dominará su rendimiento. Sin embargo, en un juego, es bastante insignificante.
El código de juego Java escrito correctamente no sufre pausas de GC. Al igual que el código C / C ++, requiere una gestión de memoria activa pero no al nivel que C / C ++ requiere. Mientras mantenga su uso de memoria en objetos de larga vida (persisten durante un nivel o juego completo) y en objetos de vida muy corta (vectores y demás, pasados y rápidamente destruidos después del cálculo) gc no debería ser un problema visible.
En términos de acceso directo a la memoria, Java lo ha tenido por MUCHO tiempo; desde Java 1.4 en forma de Buffers de bytes directos nativos. El giro de bits en Java puede ser un poco molesto debido a la falta de tipos enteros sin signo, pero las rondas de trabajo son bien conocidas y no son terriblemente onerosas.
Si bien su verdadero Java nunca ha tenido un enlace Direct3D, eso se debe a que las tecnologías Java se esfuerzan por la portabilidad. Tiene DOS enlaces OpenGL (JOGL y LWJGL) y enlace OpenAL (JOAL) y un enlace de entrada portátil (JInput) que se une bajo el capó a DirectInput en Windows, HID Manager en OSX y un enlace Linux (se me olvida cuál).
Es cierto que ningún motor de juego completo ha presentado Java como, por ejemplo, Unity, ha presentado C # y eso es una debilidad en el espacio independiente. Por otro lado, había dos buenos APIS de nivel de Scenegraph que eran totalmente compatibles con plataformas en Windows, OSX y Linux. Ambos escritos por Josh Slack, el primero se llamaba motor JMonkey y el segundo Ardor3D.
El cartel superior es correcto en cuanto a que las dos cosas más importantes que retrasaron a Java en el desarrollo del juego fueron los prejuicios y la portabilidad. Este último fue el mayor problema. Aunque podía escribir un juego Java y enviarlo en Windows, OSX y Linux, nunca hubo una consola VM. Esto se debió a la ineptitud total en la administración intermedia de Sun. Los pocos de nosotros que trabajamos en Java en juegos en realidad tuvimos acuerdos con Sony no menos de 3 veces para obtener una VM en una Playstation y las 3 veces que la gerencia media de Sun la mató.
Si bien Sun coqueteó con las tecnologías de los clientes, el hecho es que la administración de Sun nunca obtuvo productos de consumo. Es por eso que Java como lenguaje de cliente de Sun nunca tuvo éxito de ninguna forma, y por qué tomó Google y Dalvik (la VM de Java similar a Android) para hacer de Java una plataforma exitosa en cualquier lugar.
Y es por eso que codifico juegos en C # hoy. Porque Mono fue a donde la dirección de Sun se negó.