Definition „Java Virtual Machine“ Was ist eine JVM?
Die Java Virtual Machine, kurz JVM, ist die zentrale Komponente der JRE, sprich der Java Runtime Environment bzw. Java-Laufzeitumgebung. Sie ermöglicht die plattformunabhängige Ausführung von Programmen im Java-Bytecode

Bei höherne Programmiersprachen wie C und C++ generieren die Compiler normalerweise eine direkt ausführbare Programmdatei. Solche „native executables“ bestehen aus den Befehlen der Maschinensprache einer bestimmten Hardware-Architektur.
Das hat den Vorteil einer etwas schnelleren Ausführung und weniger Abhängigkeiten von komplexen Laufzeitumgebungen. Allerdings muss das Programm für jede unterstützte Hardware-Plattform und jedes Betriebssystem sowie bei Änderungen am Quellcode neu kompiliert werden.
Sprachen wie Java, C# oder Python gehen einen anderen Weg. Unter dem Motto „Write once, run everywhere“ will Java ein Maximum an Portabilität erreichen. Der Java-Compiler „javac“ übersetzt den Quelltext in einen Zwischencode, der noch nicht lauffähig ist. Für die schlussendliche Ausführung ist eine JVM erforderlich.
Wie funktioniert die JVM?
Die JVM ist eine prozessbasierte VM – ein sehr einfacher virtueller Computer, in dem der Java-Bytecode ausgeführt wird. Solche VMs übersetzen die Anweisungen des Bytecodes zur Laufzeit in den Maschinencode der realen Hardware sowie in die Systemaufrufe des Betriebssystems. Das hat den Vorteil einer hohen Portabilität.
Ein und dasselbe Programm kann ohne Neu-Kompilierung auf allen System laufen, für die es eine entsprechende VM gibt. Anders als systembasierte VMs wie VirtualBox, VMware oder Hyper-V ermöglichen sie bewusst nur die Ausführung einer einzelnen Anwendung statt eines ganzen Betriebssystems.
Neben der Plattformunabhängigkeit hat die JVM weitere Vorteile bei Geschwindigkeit und Sicherheit. Die Übersetzung zur Laufzeit kann dynamische Optimierungen vornehmen, die bei herkömmlichen Ahead-of-Time-Compilern nicht möglich sind. Beispielsweise kann der Just-in-Time-Compiler Code-Pfade und Schleifen, die bei den vorhandenen Eingabedaten nicht nötig sind, komplett entfernen. Dadurch erhöht sich die Geschwindigkeit von Funktionen im weiteren Verlauf der Ausführung.
Sicherheit ist eines der grundlegenden Designkriterien der Java-VM. Durch die virtuelle Maschine sind Java-Programme weitgehend vom Betriebssystem abgeschottet. Zugriffe auf die Ressourcen des unterliegenden Systems lassen sich genau kontrollieren. Die JVM enthält eine automatische Speicherverwaltung per Garbage Collector. Typische Programmierfehler wie Puffer-Überlaufe und Abstürze durch verfrüht freigegebenen Speicher sind in der VM so nicht möglich.
Eine VM, viele Sprachen
Die Java-VM führt einen Zwischencode aus, der mit der eigentlichen Programmiersprache wenig zu tun hat. Deshalb ist die JVM nicht nur in der Java-Programmierung einsetzbar. Prinzipiell lässt sich jede Sprache zu einem JVM-kompatiblen Bytecode übersetzen. Dazu ist nur ein entsprechender Compiler nötig.
Der Einsatz anderer Sprachen liefert neben dem Vorteil der Plattformunabhängigkeit auch eine bessere Integration unterschiedlicher Software-Systeme. Beispielsweise läuft die Python-Variante Jython auf der JVM. Sie kann dadurch Java-Klassen nutzen und ermöglicht eine nahtlose Integration von Python- und Java-Code. Weitere Sprachen für die JVM sind unter anderem der LISP-Dialekt Clojure, die funktionalen Sprachen Erjang und Scala sowie Kotlin, Groovy und Jruby.
Implementationen der Java VM
Neben der offiziellen Hotspot-JVM von Oracle gibt es einige weitere Implementationen der Java-VM. Sie unterscheiden sich vor allem in ihren Implementierungsdetails, Einsatzbereichen und zusätzlichen Funktionen. Allen gemeinsam ist die Fähigkeit, Java-Bytecode entsprechend des Standards „Java Virtual Machine Specification“ auszuführen. Zu den wichtigsten JVMs zählen:
- HotSpot: Die Referenz-Implementation von Oracle und ist Teil der Oracle Java Plattform inklusive der Open-Sourve-Version OpenJDK.
- GraalVM: Eine neue JVM von Oracle. Sie versteht nicht nur Java-Bytecode, sondern auch den Bytecode des Compiler-Systems LLVM. Daher kann sie auch Programme ausführen, die in LLVM-kompatiblen Sprachen wie C/C++, Julia, Rust und viele andere geschrieben sind.
- OpenJ9: Die JVM von Eclipse ist auf Leistungsfähigkeit und Skalierbarkeit ausgelegt. Ursprünglich von IBM entwickelt, ist heute die Eclipse Foundation für das Projekt verantwortlich.
- JamVM: Implementiert eine sehr kleine JVM, die beispielsweise auf einigen ARM-Systemen zum Einsatz kommt.
- DalvikVM: Die bei älteren Android-Geräten verwendete DalvikVM wird oft zu den JVMs gezählt. Streng genommen ist sie das nicht, da sie einen anderen Bytecode nutzt.
(ID:46934973)