Ist Java so schnell wie C++ zur Laufzeit? Warum?
Ist Java so schnell wie C++ zur Laufzeit? Warum?
Diese Frage ist nicht mit einem einfachen Ja oder Nein zu beantworten.
Generell ist Java zunächst einmal eine Sprache, die normalerweise in einer virtuellen Maschine, der JVM, läuft. Und da der Computer nun nicht nur das Java-Programm ausführen muss sondern eben auch parallel dazu die virtuelle Maschine, geht immer etwas Leistung verloren. C++ hat dieses Problem nicht.
Nun ist die JVM aber oftmals nicht das einzige, was die Java-Laufzeitumgebung hat. Viele bringen auch einen JIT-Compiler mit. JIT steht für Just In Time und bedeutet, dass es ein Compiler ist, der zur Programmlaufzeit Teile des Programms in von JVM-Bytecode in Maschinencode übersetzen kann. Dieser Maschinencode kann durchaus mit der gleichen Geschwindigkeit laufen, wie ein entsprechender Code in C++.
Natürlich kostet das JIT compilieren Zeit. Dieser zusätzliche Zeitaufwand lohnt sich nur für Programmteile, die wahrscheinlich mehr als nur ein Mal laufen und in einem realistischen Szenario werden nur wenige Programmteile mehrere Male angesprochen. Ein ganz großer Teil (zum Beispiel Fehlerbehandlung) wird oft gar nicht ausgeführt und anderes Teile eben nur ein Mal oder nur sehr selten. Daher vermeidet man es das gesamte Programm vom JIT-Compiler übersetzen zu lassen. Es gibt also Mechanismen, die entscheiden, welche Teile man übersetzt und welche nicht. Das eröffnet zusätzlich noch Optimierungsmöglichkeiten, denn während ein statisch compiliertes Programm immer “für alle Fälle” konstruiert sein muss, kann ein JIT-Compiler situationsabhängige Optimierungen vornehmen.
Generell ist ein Java Programm also zunächst einmal langsamer, es wird aber mit zunehmender Laufzeit schneller und kommt immer näher an die Leistung von nativ gebauten Programmen. Manchmal kann es sie sogar erreichen und, eher selten, auch übertreffen.
Das trifft allerdings nur dann zu, wenn man von einem nicht eigens optimierten C++ Programm ausgeht.