© Luciano Meirelles/Shutterstock.com
Überblick über CDS, AppCDS und AOT

Fast and Furious?


Eine gute Frage in einem Einstellungsgespräch ist immer noch, warum denn Programme auf der JVM eine recht ordentliche Performance aufweisen, obwohl nur mit Bytecode und nicht mit Maschinencode gearbeitet wird. Wer diese Hürde mit Leichtigkeit genommen hat, dem werden in diesem Artikel weitere Möglichkeiten des JDK verraten, mit denen Oracle versucht, die Leistung der JVM zu verbessern.

Video: Performancemessungen: Der JIT-Compiler und sein Einfluss auf Messergebnisse

Die Performance von Programmen auf der JVM, dabei geht es explizit nicht nur um Java-Programme, steht der von nativen Anwendungen in nichts mehr nach. Das ist seit Jahren bekannt. Der JIT-Compiler des JDK leistet hervorragende Arbeit, wenn es um Codeoptimierung und Generierung von Maschinencode geht. Das ist einer der Gründe für die Stellung von Java bei der Entwicklung von Serveranwendungen. Jedoch konnte Java sich nie als Sprache für kleine Programme oder als Skriptingumgebung etablieren, besonders nicht in den Bereichen Administration oder heute DevOps. Dass dem so ist, liegt nicht an der Sprache an sich, sondern vielmehr an dem langsamen Start der JVM, der je nach Umgebung bis zu ein paar hundert Millisekunden brauchen kann. Listing 1 zeigt das übliche Hello-World-Programm, Listing 2 dessen Ausführungsdauer und Listing 3 die eines äquivalenten C-Programms im Vergleich.

Listing 1: Hello World

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }

Listing 2: Ausführungsdauer in Java

time java -Xshare:off -jar helloworld.jar Hello world! real 0m0,123s user 0m0,084s sys 0m0,027s

Listing 3: Ausführungsdauer in C

time ./hw.out Hello World! real 0m0,004s user 0m0,001s sys 0m0,002s

Der Unterschied zwischen beiden liegt bei 119 ms, eine Spanne, die auch für uns Menschen wahrnehmbar ist, oder anders gesagt, dass C-Programm wird in einem Dreißigstel der Zeit des Java-Programms ausgeführt. Genau genommen lassen sich beide Programme nicht vergleichen, da bei ihrer Ausführung unterschiedliche Dinge passieren. Aus Anwendersicht ist es allerdings egal, warum Programm A schneller ist als Programm B. Bei solchen Programmen kann die JVM ihre Vorteile wie die Just-in-Time Compilation nicht ausspielen. Rufen wir uns grob vor Augen, was die JVM vor der Ausführung des eigentlichen Programms tut: Start der JVM selbst, Laden der für die JVM benötigten JARs bzw. Module, deren Initialisierung und Bytecodeverifizierung. Das alles kostet Zeit. Über die Jahre ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang