Antworten:
Java wird in einer virtuellen Maschine ausgeführt, während C ++ direkt auf der Hardware ausgeführt wird. Dies bedeutet, dass Sie mehr Kontrolle darüber haben, wohin Ihr Speicher verschoben wird und was in C ++ damit gemacht wird.
Java ist eine müllsammelnde Sprache. Sie haben keine direkte Kontrolle über Ihr Gedächtnis. Sie können neue Speicherbereiche zuweisen, haben jedoch keine (Fein-) Kontrolle darüber, wann diese gelöscht werden. Der Garbage Collector überprüft jeden Speicherbereich, den Sie alle x Frames zugewiesen haben, und ermittelt, ob es sich um Müll handelt oder noch verwendet wird.
Für Spiele kann dies katastrophal sein. Alle paar Frames kommt ein Garbage Collector, um jede einzelne Zuordnung zu überprüfen, die Sie vorgenommen haben, um festzustellen, ob sie noch verwendet wird. Sprechen Sie über eine Verlangsamung!
Zweitens wurden die meisten Bibliotheken, die wir verwenden, entweder in C oder in C ++ geschrieben. Ich spreche von Scaleform, Havok Physics Engine, PhysX, SpeedTree usw. Alle professionellen Pakete, die in der Branche häufig verwendet werden. Wenn eine andere Sprache König sein will, unterstützt sie diese besser.
Ich persönlich bin der Meinung, dass Java für Desktop-Anwendungen und -Apps sehr gut ist, aber nicht für Spiele. Java hat viele nützliche Tools für Entwickler und kann theoretisch auf jeder Plattform ausgeführt werden, auf der Java Virtual Machine implementiert ist. Ich bevorzuge jedoch C ++, da ich diese Kontrolle über meinen Arbeitsspeicher benötige . Insbesondere wenn Sie mit exotischen Datenstrukturen (rot-schwarzer Baum, doppelt verknüpfte Liste usw.) arbeiten, ist es hilfreich, einen guten Überblick über alle Ihre Speicherzuordnungen zu behalten.
Ich sage nicht: benutze kein Java. Ich sage: Überlegen Sie, warum Sie Java verwenden. Minecraft wurde in Java erstellt, daher ist es sicherlich möglich, Spiele in Java zu erstellen. Aber wäre es ein besseres Spiel gewesen, wenn es in C ++ gebaut worden wäre? Nun, es wäre sicherlich nicht so billig gewesen, es unter den großen drei Betriebssystemen (Windows, MacOS, Linux) zum Laufen zu bringen, aber dennoch stieß es auf viele plattformspezifische Fehler in seiner Entwicklung, Fehler, die Java nicht beseitigen konnte Über.
Es gibt jetzt Unmengen von C ++ - Frameworks für Programmieranfänger. Es gibt wirklich keine Entschuldigung, es nicht zu lernen, besonders wenn Sie Ihre Karriere in der Branche vorantreiben möchten.
Kurze Antwort: C ++ wird zu nativem Code kompiliert, sodass die Leistung dem Entwickler überlassen bleibt und nicht der Laufzeit oder der VM.
Lange Antwort:
C ++ "schneller" zu sein hat nichts mit C ++ zu tun. Momentan ist es eine der wenigen verfügbaren Sprachen, die von Tools unterstützt werden, die eigenständigen, nativen Code für mehrere Plattformen erstellen.
Früher konnten Sie C, C ++, BASIC / 2, Delphi usw. verwenden und effiziente, freistehende ausführbare Dateien erhalten. Die Wahl der Sprache war eine Frage der persönlichen Vorlieben und der Marktkräfte.
Heutzutage ist die Annahme, dass "C ++ schneller ist" im Wesentlichen eine sich selbst erfüllende Prophezeiung, obwohl LLVM in der Lage ist, dies zu ändern, da alles, was in den Parser einfließt, so wird, wie es einmal war.
Borland hatte es richtig gemacht: Mehrere Sprachen wurden analysiert, zuerst optimiert und dann an einen gemeinsamen Backend-Compiler und -Linker übergeben. Welches ist effektiv eine der wichtigsten Errungenschaften von LLVM.
Java ist so strukturiert, dass es ohne die JVM sehr schwierig zu implementieren wäre. Seltsamerweise wird angenommen, dass C # im Allgemeinen und fälschlicherweise in etwa Java entspricht und bereits auf mehreren Plattformen, einschließlich iOS, zu nativem Code kompiliert wird.
Oben auf meiner Weihnachtsliste? Eine Zeitmaschine, die es ermöglicht, C ++ Eigenschaften, echte Ausnahmebehandlung und tatsächlichen WORKING-Polymorphismus hinzuzufügen und den Syntaxfehler zu beseitigen, den der Parser selbst herausfinden kann. Ich habe für diese 10 Jahre einen Präprozessor geschrieben vor, weil es verdammt dumm ist.