Respuestas:
Java se ejecuta en una máquina virtual, mientras que C ++ se ejecuta directamente en el hardware. Lo que esto significa es que tienes más control sobre dónde va tu memoria y qué se hace con ella en C ++.
Java es un lenguaje recolectado de basura. No tienes control directo sobre tu memoria. Puede asignar nuevos fragmentos de memoria, pero no tiene control (fino) sobre cuándo se elimina. El recolector de basura verifica cada pieza de memoria que asignó a cada x tramas y determina si es basura o si todavía se está usando.
Para los juegos esto puede ser desastroso. Cada pocos fotogramas, viene un recolector de basura para verificar cada asignación que ha realizado para ver si todavía se está utilizando. ¡Habla sobre una desaceleración!
En segundo lugar, la mayoría de las bibliotecas que utilizamos estaban escritas en C o escritas en C ++. Estoy hablando de Scaleform, el motor de física Havok, PhysX, SpeedTree, etc. Todos los paquetes profesionales, utilizados ampliamente en la industria. Si otro idioma quiere ser rey, es mejor que los apoye.
Mi opinión personal es que Java es realmente bueno para aplicaciones y aplicaciones de escritorio, pero no para juegos. Java tiene muchas herramientas agradables para desarrolladores y, en teoría, se puede ejecutar en cualquier plataforma que tenga una implementación de la máquina virtual Java, pero aún prefiero C ++ porque necesito ese control sobre mi memoria. Especialmente cuando comienza a trabajar con estructuras de datos exóticas (árbol rojo-negro, lista doblemente enlazada, etc.) ayuda a mantener una buena visión general de todas sus asignaciones de memoria.
No estoy diciendo: no uses Java. Estoy diciendo: piensa en por qué estás usando Java. Minecraft fue construido en Java, por lo que es posible construir juegos en Java. Pero, ¿habría sido un juego mejor si se hubiera creado en C ++? Bueno, ciertamente no habría sido tan barato hacerlo funcionar en los tres grandes (Windows, MacOS, Linux), pero aun así, encontró muchos errores específicos de la plataforma en su desarrollo, errores que Java no pudo solucionar terminado.
Hay toneladas de marcos C ++ ahora para programadores principiantes. Realmente no hay excusa para no aprenderlo, especialmente si quieres avanzar en tu carrera en la industria.
Respuesta corta: C ++ compila a código nativo, por lo que el rendimiento depende del desarrollador, no de un motor de ejecución o VM.
Respuesta larga:
C ++ ser "más rápido" no tiene nada que ver con C ++. Por el momento, es uno de los pocos idiomas disponibles que son compatibles con herramientas que producen código nativo e independiente para múltiples plataformas.
En el pasado, podría usar C, C ++, BASIC / 2, Delphi, etc., y obtener ejecutables independientes y eficientes. La elección del idioma era una cuestión de preferencia personal y fuerzas del mercado.
En estos días, la suposición de que "C ++ es más rápido" es esencialmente una profecía autocumplida, aunque LLVM está en una buena posición para cambiar eso, ya que hace que todo lo que entra en el analizador sea discutible, como solía ser.
Borland tenía razón: varios lenguajes que se analizaron, primero se aplicaron optimizaciones y luego se pasaron a un compilador y vinculador de fondo común. Que es efectivamente uno de los principales logros de LLVM.
Java está estructurado de tal manera que sería muy difícil de implementar sin la JVM. Curiosamente, C #, comúnmente e incorrectamente, se supone que es más o menos equivalente a Java, ya se compila en código nativo en varias plataformas, incluido iOS.
¿Arriba de mi lista de Navidad? Una máquina del tiempo para regresar y agregar propiedades, manejo de excepciones reales y polimorfismo de TRABAJO real a C ++, y deshacerse de la basura de la sintaxis de flecha hacia arriba que el analizador puede descubrir por sí mismo. Escribí un preprocesador para esos 10 años Hace porque es una estupidez.