performance
Jake2 zeigt, dass Java 3D Spiele ohne allzu große Hardwareanforderungen eine ansprechende Performance erreichen können.
Die folgende Tabelle zeigt die erreichbaren Frameraten von Jake2 und soll nur einen ersten Eindruck vermitteln.
Die hier gezeigten Werte stellen keinen absoluten Vergleich Java vs. C dar. Man kann aber bei einer 1:1 Portierung von C nach Java mindestens 60% der Performance erwarten. Bei objektorientierten C++ Anwendungen würde sich das Verhältnis weiter zugunsten von Java verschieben.
Die Version 0.9.2 mit dem neuen “fastjogl” OpenGL Renderer zeigt eine eindrucksvolle Steigerung. Der neue Renderer reduziert hauptsächlich die Anzahl der Java Native Interface Aufrufe. JNI Aufrufe erzeugen einen nennenswerten Overhead und waren bis jetzt der Hauptgrund für den Abstand zum Original. Mit Jake2 kann man inzwischen bis zu 85% der Framerate des Originals erreichen, abhängig vom Verhältnis von CPU- und Grafikleistung. Mit Version 0.9.3 wird die Lücke zum Original schon ziemlich eng, hauptsächlich durch die Reduzierung von Speicherallokierungen in performancekritischen Routinen. Es ist allerdings noch anzumerken, dass die Unterstützung von Fullscreen Modes in Java noch nicht optimal ist.
Die neue Version 0.9.4 bringt nochmals einen ordentlichen Performancegewinn. Einige Optimierungen (Datenstrukturen, Speicherallokierung etc.) haben sich doch ziemlich stark auf die Framerate ausgewirkt.
System
|
Original C Code
|
Jake2-0.9.1 JRE1.5 jogl
|
Jake2-0.9.2 JRE1.5 fastjogl
|
Jake2-0.9.3 JRE1.5 fastjogl
|
Jake2-0.9.4 JRE1.5 fastjogl/lwjgl
|
AMD Athlon XP 2400 Geforce4 MX Windows 2000 800x600 window
|
245 fps
|
172 fps
|
213 fps
|
241 fps
|
260/250 fps
|
AMD Athlon XP 2400 Geforce4 MX Windows 2000 800x600 fullscreen
|
315 fps
|
not supported
|
225 fps
|
235 fps
|
250/282 fps
|
AMD Athlon XP 2400 Geforce4 MX Linux 800x600 window
|
262 fps
|
141 fps
|
212 fps
|
215 fps
|
228/240 fps
|
AMD K6-2 350 Geforce2 MX Windows 2000 800x600 window
|
56 fps
|
21 fps
|
31 fps
|
|
|
|