Risposte:
Java viene eseguito in una macchina virtuale, mentre C ++ viene eseguito direttamente sull'hardware. Ciò significa che hai un maggiore controllo su dove va la tua memoria e su ciò che viene fatto in C ++.
Java è un linguaggio spazzatura. Non hai il controllo diretto sulla tua memoria. È possibile allocare nuovi blocchi di memoria, ma non si ha il controllo (fine) su quando viene eliminato. Il garbage collector controlla ogni pezzo di memoria allocato per ogni x frame e determina se è spazzatura o è ancora in uso.
Per i giochi questo può essere disastroso. Ogni pochi frame arriva un garbage collector per controllare ogni singola allocazione che hai fatto per vedere se è ancora in uso? Parla di un rallentamento!
In secondo luogo, la maggior parte delle librerie che utilizziamo sono state scritte in C o in C ++. Sto parlando di Scaleform, motore fisico Havok, PhysX, SpeedTree, ecc. Tutti i pacchetti professionali, ampiamente utilizzati nel settore. Se un'altra lingua vuole essere re, è meglio supportarli.
La mia opinione personale è che Java è davvero bello per le applicazioni desktop e le app, ma non per i giochi. Java ha molti strumenti utili per gli sviluppatori e teoricamente può essere eseguito su qualsiasi piattaforma che abbia un'implementazione della Java Virtual Machine, ma preferisco ancora C ++ perché ho bisogno di quel controllo sulla mia memoria. Soprattutto quando si inizia a lavorare con strutture di dati esotici (albero rosso-nero, elenco doppiamente collegato, ecc.) Aiuta a mantenere una buona panoramica di tutte le allocazioni di memoria.
Non sto dicendo: non usare Java. Sto dicendo: pensa al motivo per cui stai usando Java. Minecraft è stato creato in Java, quindi è sicuramente possibile creare giochi in Java. Ma sarebbe stato un gioco migliore, se fosse stato creato in C ++? Beh, certamente non sarebbe stato così economico farlo funzionare sui tre grandi (Windows, MacOS, Linux), ma nonostante ciò, ha riscontrato un sacco di bug specifici della piattaforma nel suo sviluppo, bug che Java non ha potuto risolvere al di sopra di.
Ci sono tonnellate di framework C ++ ora per i programmatori principianti. Non ci sono davvero scuse per non impararlo, soprattutto se vuoi promuovere la tua carriera nel settore.
Risposta breve: il C ++ viene compilato in codice nativo, quindi le prestazioni dipendono dallo sviluppatore, non da un runtime o da una VM.
Risposta lunga:
Il fatto che il C ++ sia "più veloce" non ha nulla a che fare con il C ++. Al momento, è una delle pochissime lingue disponibili supportata da strumenti che producono codice nativo autonomo per più piattaforme.
In passato, potresti usare C, C ++, BASIC / 2, Delphi, ecc. E ottenere eseguibili efficienti e indipendenti. La scelta della lingua era una questione di preferenze personali e forze di mercato.
In questi giorni, il presupposto che "C ++ è più veloce" è essenzialmente una profezia che si autoavvera, sebbene LLVM sia in una buona posizione per cambiarlo poiché fa tutto ciò che accade nel parser, come una volta.
Borland aveva ragione: più lingue che venivano analizzate, prima venivano applicate le ottimizzazioni, poi passate a un compilatore e linker backend comuni. Che è effettivamente uno dei maggiori successi di LLVM.
Java è strutturato in modo tale che sarebbe molto difficile implementarlo senza JVM. Stranamente, C #, comunemente e in modo errato, si presume approssimativamente equivalente a Java, si compila già in codice nativo su diverse piattaforme, incluso iOS.
In cima alla mia lista di Natale? Una macchina del tempo per tornare indietro e aggiungere proprietà, gestione delle eccezioni reali e vero polimorfismo WORKING al C ++, e sbarazzarsi della merda della sintassi della freccia in alto che il parser può capire da solo. Ho scritto un preprocessore per quei 10 anni fa perché è stupidamente stupido.