Yo uso Java para escribir juegos y he usado C ++ para escribir juegos y he encontrado que Java está bien siempre y cuando se tenga en cuenta cuáles son las fortalezas y debilidades de Java. Las dos grandes ventajas para mí, la programación en Java son la velocidad de desarrollo y la capacidad de implementación / portabilidad. Los tiempos de compilación son mucho más rápidos que en VC ++ (todavía no puedo hablar por XCode o Clang), lo que significa que puedo resolver los problemas mucho más rápido. Además, como Eclipse se compila constantemente, cometo menos errores tipográficos. Nunca he escrito un fragmento de código C ++ que 'simplemente funcione' en otro sistema o compilador. En Java, esta es la norma.
Por otro lado, Java tiene algunos inconvenientes importantes. La eficiencia a menudo se considera una razón para no usar Java, pero descubrí que siempre que codifique de cierta manera, Java puede funcionar bastante bien. El problema es que la forma determinada de codificar va en contra de lo que mucha gente de Java consideraría un buen diseño.
En el corazón de Java está el 'recolector de basura', es el sistema de gestión de memoria. Al escribir código eficiente, debe evitar hacer asignaciones dinámicas a cada cuadro en cualquier idioma y esto es particularmente cierto en Java. Si apaga el recolector de basura debido a las novedades descuidadas, puede despedirse de las velocidades de fotogramas suaves. En segundo lugar (y lo más molesto), Java no admite tipos de datos de usuario de primera clase. Cada tipo de datos de usuario en Java se instancia esencialmente como un puntero a una clase, asignada en el montón. Esto es horrible para la concurrencia de caché, ya que no puede tener cosas como una matriz de objetos Vector3 y tenerlas concurrentes en la memoria; puede tener una matriz de punteros Vector3 pero eso no es lo mismo en absoluto. En general, debe utilizar desplazamientos en grandes matrices de tipos primitivos.