Oleksii - stock.adobe.com
Java versus C++: Welche Programmiersprache ist schneller?
Häufig entsteht der Eindruck, dass Java langsamer als andere Sprache, wie zum Beispiel C++, ist. Allerdings sollte man verschiedene Kriterien bei der Bewertung berücksichtigen.
Ist Java langsam? Das ist eine häufig gestellte Frage in einer Welt, in der jeder Softwareentwickler das Optimum aus jedem Taktzyklus herausholen möchte. Es war auch ein Thema bei einer Java Birds of a Feather Session auf der Oracle Code One 2019.
Der Konsens war damals, dass es das nicht ist. Java ist im Vergleich zu seinen Konkurrenten sogar ziemlich schnell. Java ist in der Lage, mit anderen interpretierten Sprachen zu konkurrieren – und sie manchmal zu übertreffen –, basierend auf der Art und Weise, wie es den Speicher verwaltet, Just-in-Time-Kompilierungen (JIT) durchführt und verschiedene Funktionen der zugrunde liegenden Architektur nutzt.
Kompilierte versus interpretierte Programmiersprachen
Java ist eine interpretierte Sprache. Im Gegensatz dazu ist C++ – eine Sprache, mit der Java oft verglichen wird – statisch typisiert. Es ist die dynamische Natur der Java-Sprache, die den Benutzern oft Sorgen über mögliche Geschwindigkeitsprobleme bereitet.
Bei einer interpretierten Sprache wird der Code in eine Zwischenform kompiliert, bevor er in Maschinencode umgewandelt wird. In Java wird dieses Zwischenprodukt Bytecode genannt. Zur Laufzeit wandelt eine Java Virtual Machine (JVM) diesen Bytecode in Maschinencode um, und es ist der Maschinencode, der auf dem Prozessor läuft.
Java-Bytecode kann auf jedem Computer mit einer installierten JVM ausgeführt werden, was die Grundlage für das Motto von Java ist: write-once, run-anywhere. Aber diese zwischengeschaltete Übersetzung von Bytecode in Maschinencode benötigt zusätzliche Ressourcen. Dieser Schritt verärgert diejenigen, die in erster Linie auf Performance achten.
Java versus C++
Im Gegensatz dazu wird ein in C++ geschriebenes Programm direkt in Maschinencode kompiliert – ohne eine zwischengeschaltete Übersetzung, die zur Laufzeit erforderlich ist. Dies ist ein Grund, warum C++-Programme tendenziell schneller sind als in Java geschriebene.
Es gibt jedoch auch Ausnahmen. Wenn ein C++-Programm kompiliert wird, wird es auf der Grundlage der Architektur des Systems, auf dem es läuft, optimiert. Wenn ein C++-Programm zum Beispiel auf einen ARM-Prozessor ausgerichtet ist, kann es alle Funktionen nutzen, die diese Architektur derzeit bietet. Es kann keine Vorteile aus Funktionen ziehen, die in dieser Architektur noch nicht vorhanden sind. Java kann das.
Wenn ein Java-Programm ausgeführt wird, untersucht es das zugrunde liegende System, und die JVM kann den von ihr erstellten Maschinencode auf der Grundlage der verfügbaren Funktionen optimieren. Wenn ein neuer Prozessor mit neuen Optimierungsfunktionen herauskommt, kann die JVM sofort Maschinencode erzeugen, der diese Funktionen nutzt. Im Gegensatz dazu müsste ein in C++ geschriebenes Programm komplett neu kompiliert und bereitgestellt werden, um die neuen Funktionen zu nutzen.
Ist Java also langsam? „Java wird auf der CPU, die Sie noch nicht haben, schneller arbeiten als C“, sagte Azul CTO Gil Tene auf der Code One Session. „Als die AVX-512-Vektorunterstützung für Skylake-CPUs herauskam, liefen JIT-Compiler, die wussten, wie man vektorisiert, doppelt so schnell, während C bei der gleichen Geschwindigkeit blieb.“ Bis diese alten C-Programme neu kompiliert wurden, behielten die Java-Programme einen Leistungsvorsprung.
Viele Faktoren beeinflussen die Geschwindigkeit einer Anwendung. Ist Java also langsam? Nein.
Ist ein Java-Programm so schnell wie ein in C++ geschriebenes? Nicht immer, aber es gibt Fälle, in denen es in der Tat schneller sein kann.