Weshalb wird Java kaum zur Spieleprogrammierung genutzt?

...komplette Frage anzeigen

8 Antworten

Das Java nicht nur Spieleprogrammierung eingesetzt wird hat mehrere Gründe.

Der erste Grund ist das gefährliche Halbwissen, was hier viele der anderen Antwortgeber haben. Sie behaupten schlicht Java wäre zu langsam. Hieraus entsteht dann oft die Spirale, das man C/C++ als die einzig wahre Sprache für RIS Systeme ansieht. Unterzieht man die unterschiedlichen Technologien, also einer Bytecode-VM Umegbung und maschinenkompilate einer genauen Performanzanalyse, ergibt ist differenzierteres Bild:

  1. Zunächst nehmen sich Java und C/C++ bei reinen arithmetischen Operationen wenig bis gar nichts. Die Aussage, das Java langsamer wäre, stammt noch auf den 1990er Jahren, wo es hier wirklich eine Lücke von >20% gab. Durch den Einsatz eines Just in Time Compilers ist dieser Rückstand allerdings aufgeholt.
  2. Ein andere bild kann sich beim Aufruf von Funktionen/Methoden ergeben. Hier hat C/C++ den Vorteil, dass es statisch binden kann, wodurch der Aufruf nicht zu einem Fehler der Cache-Prediction führt. Bei Java hingegen gibt es nur virtual Methoden, wodurch in der Theorie jeder aufruf einen Neuaufbau des Cache notwendig macht. Dies relativiert sich allerdings aus zwei Gründen: a) Wenn man in C++ objektorientiert Programmiert, ist nahezu alles virtual, wordurch man den Vorteil des statischen Bindes verliert. b) Insbesondere die Java Server VM betriebt hier optimierung, wodurch in einigen Einsatzszenarien Java hier sogar schneller ist als C++
  3. Wenn man in C/C++ ein Programm kompiliert, macht man dies immer für den Durchschnittsprozessor, ohne wirklich die Features des Prozessors auszunutzen. Java kann hier im JIT compiler ein Kompilat für den aktuellen Prozessor erzeugen.

Dies macht interessanterweise Java in so einigen Anwendungsbereichen Schneller als C/C++.

Auch, dass Java Resourcenhungrig ist, stimmt nicht, wenn man dagegen den Speicherverbrauch von Texturen, Modellen und diversen Framebuffer object eine Multi pass rendering pipeline ansieht.

Wo liegt also das Problem von Java im 3D Bereich?

Um Libs wie Direct3d oder OpenGL von Java aus ansprechen zu können muss ein entsprechende Binding her. Diese versuchen meist, das API direkt in Java abzubilden. Hier erweist sich insbesondere das Setzen von uniforms als Flaschenhals, da dies sehr viele native calls über JNI bedeutet.

Das es allerdings nicht generell unmöglich ist mit solch einer Umgebung Spiele zu entwickeln zeigt XNA.

Du bist haarscharf dran;). Es ist nicht die Installation sondern die Verwendung der JRE. Die JRE liegt zwischen dem Betriebssystem und dem Java-Programm und das macht ein Java Programm langsamer.

C++ ist halt die Windows gängige sprache deswegen kommt sie bei den meisten Games zu einsatz! Dafür ist sie leider 100mal schwerer als Java!

klafidd 15.10.2010, 01:11

C++ ist nicht Windowsabhängig, sondern man kann in C++ sogar für mehr Plattformen programmieren als in Java. Und viel schwieriger ist C++ auch nicht, das einzige was vielleicht schwieriger als bei Java ist sind die Pointer, die ich aber ganz nützlich finde.

0

Java ist vor allem zu langsam. Aber auch die schlechte implementierung von directx oder opengl ist nicht so einfach. Dazu kommt Ressourcenhunger, wobei man diesen durch effezientes proggen auch wieder minimieren kann.

Außerdem erfolgt ja nur ein kleiner Teil der Spieleprogrammierung in Hochsprachen wie c++ java c# oder sontst was. Das meiste wird durch Scriptsprachen erledigt. Die müssen nicht mehr extra implemenitert werden, und können so leichter angepasst werden (Beispiel hierfür ist Supreme Commander).

java ist viel zu langsam. c++ oder c sind schnell und arbeiten gut mit directx

Genau weiß ich es nicht, aber ich glaube mit C++ hat man mehr möglichkeiten als mit Java

xXodemx 15.10.2010, 13:46

nein, eher weniger (Server prgrammierung ist bedeutdet schwieriger), wobei systemnahe sachen wie treiber in java und in c++ gar nicht möglich sind. C++ kommt zwar etwas näher an die Hardware ran "Pointer", aber vom Funktionsumfang her tut sich da nich viel

0
Li4m1992 15.10.2010, 20:50
@xXodemx

wieso sagst du, dass sich c++ nicht für systemnahe sachen eignet? wie kommt es dann, das die meisten treiber in c/c++ und asm geschrieben sind? oder meinst du nur c++ udn nich c eignen sich nicht dafür?

0
xXodemx 16.10.2010, 14:17
@Li4m1992

die treiber sind fast ausnamlsos in c geschrieben kein einziger in c++

0
hdusel 20.10.2010, 21:18
@xXodemx

Wir schweifen zwar vom Thema der urspr. Frage ab, aber in C++ werden durchaus Treiber entwickelt: Prominentes Beispiel ist Mac OS X. Dessen "IOKit", mit dem Treiber entwickelt werden, verwendet Embedded C++.

0
xXodemx 21.10.2010, 13:12
@hdusel

dann war ich anscheinend falsch informiert.

Trotzdem denke ich das c++ was treiber-programmierung angeht eher nich erste wahl ist

0

Es hängt vorallem damit zusammen, das Java so unendlich langsam und ressourcen hungrig ist!

weil es nicht so schnell läuft

Was möchtest Du wissen?