Okay, es gibt viele Fehlinformationen in diesem Thread.
Ich kenne das Spielegeschäft sehr gut, seit 25 Jahren. Ich kenne Java in Spielen auch sehr gut, da ich Suns technischer Evangelist für Java-Spiele und Dozent für Java-Performance-Programmierungsexperte war.
In Bezug auf die Rechengeschwindigkeit übertrifft Java C ++ heutzutage in vielen Benchmarks für wissenschaftliches Rechnen. Sie können pathologischen Code in jeder Sprache schreiben, die schlecht abschneidet, wenn Sie möchten, aber insgesamt sind sie gleichwertig und schon lange.
In Bezug auf die Speichernutzung hat Java einen gewissen Overhead. HelloWorld ist ein 4K-Programm in Java. In heutigen Multi-GB-Systemen ist dieser Aufwand jedoch ziemlich bedeutungslos. Schließlich hat Java mehr Startzeit. Ich würde nicht empfehlen, Java für kurze Laufzeitprogramme wie Unix-Kommandozeilenbefehle zu verwenden. In diesen Fällen dominiert das Starten Ihre Leistung. In einem Spiel ist es jedoch ziemlich unerheblich.
Bei ordnungsgemäß geschriebenem Java-Spielcode treten keine GC-Pausen auf. Genau wie C / C ++ - Code erfordert es eine aktive Speicherverwaltung, jedoch nicht auf der Ebene von C / C ++. Solange Sie Ihre Speichernutzung für langlebige Objekte (die für ein ganzes Level oder ein Spiel bestehen) und für sehr kurzlebige Objekte (Vektoren usw., die nach der Berechnung herumgereicht und schnell zerstört werden) beibehalten, sollte gc kein sichtbares Problem sein.
Bezüglich des direkten Speicherzugriffs hat Java dies für eine lange Zeit getan; seit Java 1.4 in Form von Native Direct Byte Buffers. Bit Twiddling in Java kann aufgrund des Fehlens von vorzeichenlosen Integer-Typen etwas ärgerlich sein, aber die Arbeitsrunden sind alle bekannt und nicht besonders lästig.
Während sein wahres Java noch nie eine Direct3D-Bindung hatte, ist dies darauf zurückzuführen, dass Java-Technologien Portabilität anstreben. Es verfügt über ZWEI OpenGL-Bindungen (JOGL und LWJGL) und OpenAL-Bindungen (JOAL) sowie eine portable Eingabebindung (JInput), die unter Windows an DirectInput, unter OSX an HID Manager und eine Linux-Bindung (ich vergesse welche) gebunden wird.
Es ist wahr, dass keine vollständige Game-Engine Java wie Unity unterstützt, und das ist eine Schwäche im unabhängigen Bereich. Auf der anderen Seite gab es zwei gute APIS auf Scenegraph-Ebene, die plattformunabhängig für Windows, OSX und Linux waren. Beide wurden von Josh Slack geschrieben, der erste hieß JMonkey Engine und der zweite Ardor3D.
Das Top-Poster zeigt, dass die beiden größten Hindernisse für Java bei der Spieleentwicklung Vorurteile und Portabilität waren. Letzteres war das größte Problem. Obwohl Sie ein Java-Spiel schreiben und es unter Windows, OSX und Linux ausliefern konnten, gab es nie eine Konsolen-VM. Dies war auf die völlige Unfähigkeit des Sun Middle Management zurückzuführen. Die wenigen von uns, die in Spielen an Java arbeiteten, hatten mindestens dreimal mit Sony zu tun, um eine VM auf einer Playstation zu bekommen, und alle dreimal, wenn das mittlere Sun-Management es tötete.
Während Sun mit Client-Technologien flirtete, war es eine Tatsache, dass das Sun-Management niemals Konsumgüter bekam. Das ist der Grund, warum Java als Client-Sprache von Sun in keiner Form erfolgreich war und warum Google und Dalvik (die Java-ähnliche Android-VM) erforderlich waren, um Java überall zu einer erfolgreichen Plattform zu machen.
Und deshalb programmiere ich heute Spiele in C #. Weil Mono dahin ging, wohin sich das Sun-Management geweigert hatte.