Va bene, c'è molta disinformazione in questo thread.
Conosco molto bene il business dei videogiochi , da 25 anni. Conosco Java molto bene nei giochi, essendo stato l'evangelista tecnico di Sun Java Game ed essendo stato esperto di programmazione delle prestazioni Java.
In termini di velocità computazionale, Java batte oggi il C ++ in molti benchmark di calcolo scientifico. Puoi scrivere un codice patologico in entrambe le lingue che funziona male se vuoi, ma soprattutto, sono alla pari e lo sono da molto tempo.
In termini di utilizzo della memoria, Java ha alcune spese generali. HelloWorld è un programma 4K in Java. Ma quel sovraccarico è piuttosto insignificante nei sistemi multi GB di oggi. Infine, Java ha più tempo di avvio. Non consiglierei di usare Java per utility di runtime di breve durata come i comandi da riga di comando Unix. In questi casi, l'avvio avrà la meglio sulle tue prestazioni. In un gioco, tuttavia, è abbastanza insignificante.
Il codice di gioco Java correttamente scritto non subisce pause GC. Proprio come il codice C / C ++, richiede una gestione della memoria attiva ma non al livello C / C ++. Fintanto che si mantiene l'utilizzo della memoria su oggetti di lunga durata (persistere per un intero livello o gioco) e oggetti di durata molto breve (vettori e simili, passati in giro e rapidamente distrutti dopo il calcolo) gc non dovrebbe essere un problema visibile.
In termini di accesso diretto alla memoria, Java lo ha da molto tempo; da Java 1.4 sotto forma di buffer di byte diretti nativi. La manipolazione dei bit in Java può essere leggermente fastidiosa a causa della mancanza di tipi interi senza segno, ma i round di lavoro sono tutti ben noti e non terribilmente onerosi.
Mentre il suo vero Java non ha mai avuto un binding Direct3D, ciò è dovuto al fatto che le tecnologie Java puntano alla portabilità. Ha DUE collegamenti OpenGL (JOGL e LWJGL) e OpenAL (JOAL) e un collegamento di input portatile (JInput) che si lega sotto il cofano a DirectInput su Windows, HID Manager su OSX e un collegamento Linux (dimentico quale).
È vero che nessun motore di gioco completo ha descritto Java come, ad esempio, Unity, ha caratterizzato C # e questo è un punto debole nello spazio indipendente. D'altra parte, c'erano due buoni APIS a livello di Scenegraph che erano totalmente portatili su piattaforma Windows, OSX e Linux. Entrambi scritti da Josh Slack, il primo si chiamava motore JMonkey e il secondo Ardor3D.
Il poster in alto ha ragione che le due cose più importanti che hanno trattenuto Java nello sviluppo del gioco sono il pregiudizio e la portabilità. Quest'ultimo è stato il problema più grande. Sebbene tu possa scrivere un gioco Java e spedirlo su Windows, OSX e Linux, non c'è mai stata una console virtuale. Ciò era dovuto alla totale inettitudine nella gestione intermedia di Sun. Pochi di noi che lavorano su Java nei giochi in realtà hanno avuto accordi con Sony non meno di 3 volte per ottenere una VM su una Playstation e tutte e 3 le volte la gestione intermedia di Sun l'ha uccisa.
Mentre Sun flirtava con le tecnologie client, il fatto è che la gestione Sun non ha mai ottenuto prodotti di consumo. Ecco perché Java come linguaggio client di Sun non è mai riuscito in nessuna forma e perché ci sono voluti Google e Dalvik (la macchina virtuale simile a Java Android) per rendere Java un successo piattaforma ovunque.
Ed è per questo che oggi codifico i giochi in C #. Perché Mono è andato dove la direzione di Sun si è rifiutata.