|
Bytecode / Interpretation
Komponenten
des Java Runtime Systems
Der "Prozessor" der JVM arbeitet
Stack-orientiert. Parameter und Rückgabewerte von Methoden werden über
einen Stack weitergereicht. Das Gegenstück zu Registern in einer CPU sind
hier die lokalen Variablen. Die Implementierung einer JVM wird Java
Runtime System genannt. Ein Runtime System besteht im Allgemeinen aus
folgenden Komponenten:
- Execution Engine: Der virtuelle
(auch der Hardware-) Prozessor, der den Bytecode der Java-Methoden
abarbeitet.
- Memory Manager:
Speicherverwaltung, Reserviert Speicher, und beinhaltet den Garbage Collector,
der nicht mehr benötigten Speicher wieder freigibt.
- Error und Exception Manager: Zuständig
für die Behandlung von Fehlern (try, catch, throw, ...).
- Native Method Support: Ermöglicht
das Aufrufen vom Methoden, die mit anderen Programmiersprachen
erstellt wurden (C, C++).
- Threads Interface: Multithreading
in Java wird mit dem Threads Interface verwaltet.
- Class Loader: Zuständig für das
dynamische Laden von .class-Dateien.
- Security Manager: Überprüft, ob
die jeweiligen Klassen sicher sind, kontrolliert den Zugriff auf
System-Ressourcen.
Bytecode
Der Befehlssatz der JVM wird in einem Byte
codiert. Somit ist die Anzahl der Befehle im Befehlssatz auf 256 begrenzt.
Das bedeutet wiederum, daß nicht für jeden Datentyp gleich viele Befehle
existieren, um mit diesem Datentyp zu arbeiten. Es gibt also Datentypen
erster Klasse, und Datentypen zweiter Klasse.
|
Datentypen
Die Java-VM unterstützt
die folgenden fünf grundlegende Datentypen
-
INT - 32-Bit
Ganzzahl-Datentyp mit Vorzeichen
-
LONG - 64-Bit
Ganzzahl-Datentyp mit Vorzeichen
-
FLOAT - 32-Bit
IEEE-Fliesskomma
-
DOUBLE - 64-Bit
IEEE-Fliesskomma
-
ADDRESS - 32-Bit
grosser Referenzdatentyp
Instruktionen
der Java-VM Code
ILOAD
INT |
|
Int
Zahl vom Slot auf den Operandenstack legen |
ISTORE
SLOT |
|
Zahl
vom Stack nehmen und im Slot speichern |
IADD |
|
Addiert die
obersten beiden INT-Zahlen auf dem Stack und ersetzt
sie durch das Ergebnis |
ISUB |
|
wie
IADD, jedoch Zahlen subtrahieren |
IMUL |
|
wie
IADD, jedoch Zahlen multiplizieren |
BIPUSH
NUM |
|
NUM
auf den Operanden-Stack legen |
|
|
|
|
|