D'accord, il y a beaucoup de désinformation dans ce fil.
Je connais très bien le secteur du jeu vidéo depuis 25 ans. Je connais aussi très bien Java dans les jeux, ayant été l’évangéliste technique des jeux Java de Sun et expert en programmation de performances Java.
En termes de vitesse de calcul, Java bat le C ++ dans de nombreux tests de calcul scientifiques. Vous pouvez écrire du code pathologique dans l'une ou l'autre langue qui fonctionne mal si vous le souhaitez, mais dans l'ensemble, ils sont au pair et ce depuis longtemps.
En termes d'utilisation de la mémoire, Java a une surcharge. HelloWorld est un programme 4K en java. Mais cette surcharge n'a pas beaucoup de sens dans les systèmes multi-Go actuels. Enfin, Java a plus de temps de démarrage. Je ne recommanderais pas l'utilisation de Java pour des utilitaires d'exécution courts tels que les commandes en ligne de commande Unix. Dans ces cas, le démarrage dominera votre performance. Dans un jeu cependant, c'est assez insiginficant.
Le code de jeu Java correctement écrit ne souffre pas de pauses GC. Tout comme le code C / C ++, il nécessite une gestion de mémoire active, mais pas au niveau requis par C / C ++. Tant que vous conservez votre utilisation de la mémoire pour des objets à longue durée de vie (persister pour un niveau entier ou un jeu) et des objets de très courte durée (vecteurs et autres, transmis et détruits rapidement après le calcul), gc ne devrait pas être un problème visible.
En termes d’accès direct à la mémoire, Java l’a eu pendant très longtemps; depuis Java 1.4 sous la forme de Native Direct Byte Buffers. Un peu de tournoiement en Java peut être légèrement ennuyeux en raison de l'absence de types entiers non signés, mais les étapes de travail sont toutes bien connues et pas très lourdes.
Bien que son véritable Java n’ait jamais eu de liaison Direct3D, c’est parce que les technologies Java aspirent à la portabilité. Il a DEUX liaisons OpenGL (JOGL et LWJGL) et OpenAL (JOAL) et une liaison d'entrée portable (JInput) qui se lie sous le capot à DirectInput sur Windows, HID Manager sur OSX et une liaison Linux (je ne sais plus laquelle).
Il est vrai que, dans Unity, aucun moteur de jeu complet ne présente Java comme C #, c’est une faiblesse de l’espace indépendant. D'autre part, il y avait deux bons APIS de niveau Scenegraph totalement portables sur une plate-forme Windows, OSX et Linux. Tous deux écrits par Josh Slack, le premier s'appelait JMonkey engine et le second Ardor3D.
L’affiche du haut indique avec exactitude que les deux éléments les plus importants qui ont freiné Java dans le développement de jeux étaient les préjugés et la portabilité. Ce dernier était le plus gros problème. Bien que vous puissiez écrire un jeu Java et l’envoyer sous Windows, OSX et Linux, il n’ya jamais eu de machine virtuelle sur console. Cela était dû à l’inefficacité totale des cadres moyens de Sun. Les quelques-uns d’entre nous qui travaillions sur Java dans les jeux avaient en fait passé un contrat avec Sony pas moins de 3 fois pour obtenir un ordinateur virtuel sur une Playstation et les 3 fois que les cadres moyens de Sun l’aient tué.
Bien que Sun ait flirté avec les technologies client, le fait est que la direction de Sun n’a jamais eu de produits grand public. C’est pourquoi Java en tant que langue client de Sun n’a jamais réussi sous aucune forme, et pourquoi il a fallu Google et Dalvik (la machine virtuelle de type java Android) pour faire de Java un succès de plate-forme n’importe où.
Et c’est pourquoi je code les jeux en C # aujourd’hui. Parce que Mono est allé là où la direction de Sun a refusé.