Java Virtual Machine
Die Java Virtual Machine Specification definiert die JVM als eine imaginäre Maschine, die durch Softwareemulation auf einer realen Maschine oder direkt durch Hardware implementiert werden kann. Sie definiert damit eine virtuelle Hardwarespezifikation, für die jeglicher Java-Programmcode compiliert wird. Weil diese Hardwarespezifikation imaginär ist, sind Java-Programme von den realen Hardwareplattformen unabhängig.
Konkret definiert die JVM-Spezifikation:
- den Befehlssatz (in Analogie zum Befehlssatz einer CPU),
- den Registersatz,
- den Stack,
- einen Heap mit Garbage-Collection,
- die Speicherverwaltung und
- das Format der Class-Dateien.
In der Praxis ist eine JVM daher in der Regel ein in einem WWW-Browser integrierter Interpreter zur überwachten Ausführung von Java-Bytecode auf der jeweiligen Hardwareplattform.
Java-Quelltexte müssen vorher mit Hilfe eines Compilers in den maschinenunabhängigen Bytecode übersetzt worden sein. Dieser kann entweder mit einem Interpreter von der Kommandozeile aus (Java-Anwendung) oder aus einer HTML-Seite gestartet werden (Applet).
Das Codeformat der JVM ist ein sehr kompakter Bytecode. Da die Befehlslänge auf ein Byte beschränkt ist, kann es maximal 256 verschiedene Befehle geben. Programme, die durch Bytecode dargestellt werden, unterliegen einer sehr strengen Typüberprüfung. Der Großteil der Typüberprüfungen wird bereits zur Compilezeit durch einen Bytecodeüberprüfer durchgeführt. Ein Java-Interpreter muss in der Lage sein, jedes Programm auszuführen, dessen Class-Dateien der Java Virtual Machine Specification entsprechen.