Réponses:
Java s'exécute sur une machine virtuelle, tandis que C ++ s'exécute directement sur le matériel. Cela signifie que vous avez plus de contrôle sur l'emplacement de votre mémoire et ce que vous en faites en C ++.
Java est un langage récupéré. Vous n'avez pas de contrôle direct sur votre mémoire. Vous pouvez allouer de nouveaux morceaux de mémoire, mais vous n'avez pas de contrôle (fin) sur le moment où il est supprimé. Le garbage collector vérifie chaque morceau de mémoire que vous avez alloué toutes les x trames et détermine s'il s'agit d'ordures ou encore utilisé.
Pour les jeux, cela peut être désastreux. Toutes les quelques images, un ramasse-miettes vient vérifier chaque allocation que vous avez faite pour voir si elle est toujours utilisée? Parlez d'un ralentissement!
Deuxièmement, la plupart des bibliothèques que nous utilisons ont été écrites en C ou écrites en C ++. Je parle de Scaleform, du moteur physique Havok, de PhysX, de SpeedTree, etc. Tous les packages professionnels, largement utilisés dans l'industrie. Si une autre langue veut être roi, il vaut mieux les soutenir.
Mon opinion personnelle est que Java est vraiment bien pour les applications de bureau et les applications, mais pas pour les jeux. Java a beaucoup de bons outils pour les développeurs et il peut théoriquement être exécuté sur n'importe quelle plate-forme qui a une implémentation de la machine virtuelle Java, mais je préfère toujours C ++ parce que j'ai besoin de ce contrôle sur ma mémoire. Surtout lorsque vous commencez à travailler avec des structures de données exotiques (arbre rouge-noir, liste doublement liée, etc.), cela permet de garder une bonne vue d'ensemble de toutes vos allocations de mémoire.
Je ne dis pas: n'utilisez pas Java. Je dis: réfléchissez à la raison pour laquelle vous utilisez Java. Minecraft a été construit en Java, il est donc certainement possible de créer des jeux en Java. Mais aurait-il été un meilleur jeu s'il avait été construit en C ++? Eh bien, il n'aurait certainement pas été aussi bon marché de le faire fonctionner sur les trois grands (Windows, MacOS, Linux), mais même ainsi, il a rencontré beaucoup de bogues spécifiques à la plate-forme dans son développement, des bogues que Java ne pouvait pas résoudre. plus de.
Il existe maintenant des tonnes de frameworks C ++ pour les programmeurs débutants. Il n'y a vraiment aucune excuse pour ne pas l'apprendre, surtout si vous souhaitez poursuivre votre carrière dans l'industrie.
Réponse courte: C ++ compile en code natif, donc les performances dépendent du développeur, pas d'un runtime ou d'une VM.
Longue réponse:
C ++ étant "plus rapide" n'a rien à voir avec C ++. À l'heure actuelle, il s'agit de l'une des rares langues disponibles prises en charge par des outils qui produisent du code natif autonome pour plusieurs plates-formes.
À l'époque, vous pouviez utiliser C, C ++, BASIC / 2, Delphi, etc., et obtenir des exécutables autonomes et efficaces. Le choix de la langue était une question de préférence personnelle et de forces du marché.
De nos jours, l'hypothèse que "C ++ est plus rapide" est essentiellement une prophétie auto-réalisatrice, bien que LLVM soit en bonne position pour changer cela car il fait tout ce qui entre dans le moot de l'analyseur, comme il l'était autrefois.
Borland avait raison: plusieurs langues analysées, les premières optimisations appliquées, puis transmises à un compilateur et un éditeur de liens communs. Ce qui est effectivement l'une des principales réalisations des LLVM.
Java est structuré de telle manière qu'il serait très difficile de l'implémenter sans la JVM. Curieusement, C #, communément et incorrectement, supposé être à peu près équivalent à Java, se compile déjà en code natif sur plusieurs plates-formes, y compris iOS.
Haut de ma liste de Noël? Une machine à remonter le temps pour ajouter des propriétés, une véritable gestion des exceptions et un véritable polymorphisme WORKING au C ++, et se débarrasser de la merde de la syntaxe de la flèche vers le haut que l'analyseur peut comprendre par lui-même. J'ai écrit un préprocesseur pour ces 10 années il y a parce que c'est vraiment stupide.