Die JVM ist eine abstrakte stack-basierte Maschine und besteht aus folgenden Komponenten:
Zur Implementierung sagt Sun folgendes: All of these are logical, abstract components of the virtual machine. They do not presuppose any particular implementation technology or organization, but their functionality must be supplied in some fashion in every Java system based on this virtual machine [Sun95b].
In der Spezifikation wird deshalb auch nur die Funktionalität und Begrenzung der Systemkomponenten beschrieben. Eine erweiterte Darstellung wird in [TiYe96] und [Dahl97] gegeben.
Die einzige Festlegung, die für einen konkreten Interpreter von Java-Bytecode getroffen wird, ist folgender Pseudo-Code-Abschnitt:
do { fetch a byte execute an action depending on the value of the byte } while (there is more to do);
Der Interpreter erhält eine Folge von übersetztem Java-Code und führt byteweise die Befehle der virtuellen Maschine aus.
Teil der JVM-Spezifikation ist auch die Festlegung des Class File Format, in dem der Bytecode abgelegt ist. Es ermöglicht den Austausch von übersetztem Code mit jeder beliebigen Plattform.
Abbildung 2.1: Komponeten des Java-Systems |
Abbildung 2.1 skizziert die Zusammenhänge der einzelnen Komponeten des Java-Systems.
Der Java-Compiler übersetzt Java-Code in Bytecode, entsprechend der JVM-Spezifikation. Um diesen auszuführen, werden dann ein Java-Interpreter und die Kernbibliotheken gebraucht. Um auf einer beliebigen Plattform eine vollständige Java-Laufzeit-Umgebung zu unterstützen, müssen die gestrichelt gezeichneten Teile implementiert werden.
Am Beispiel des Java Development Kits (JDK) von JavaSoft wird im nächsten Abschnitt eine Implementierung der JVM vorgestellt. Die JVM-Spezifikation läßt sich aber auch als Hardware realisieren; ein Beispiel dafür ist der Pico-Chip von Sun Microsystems.
Im Folgenden wird der Begriff Java Virtual Maschine (JVM), wie im allgemeinen Sprachgebrauch üblich, für die Implementation der Spezifikation verwendet.
Abbildung 2.2: Verzeichnisstruktur JDK 1.0.2 für Windows: share-Zweig |
Abbildung 2.3: Verzeichnisstruktur JDK 1.0.2 für Windows: win32-Zweig |
Der Quellcode ist in einen plattformunabhängigen (vgl. Abbildung 2.2) und in einen -abhängigen Teil (vgl Abbildung 2.3) gegliedert. Beide besitzen ein java- und ein sun-Unterverzeichnis.
In den beiden java-Verzeichnissen sind alle Funktionen der Sprache und des Interpreters gesammelt. In java\runtime, java\util und java\jang sind die Hauptteile der JVM implementiert. Die Verzeichnisse java\java enthalten nur Java-Code; aufbauend auf Funktionen in C (z.B. in java\runtime) werden hier die Klassen der Kernbibliotheken implementiert oder Schnittstellen definiert.
Der sun-Zweig in beiden Abbildungen ist ähnlich aufgebaut. In den direkten Unterverzeichnissen von sun (debug, gif, images, ... und awt_common, mfc, ...) wird in C/C++ Funktionalität implementiert, auf die in den Java-Klassen in sun\sun\*zugegriffen wird. Sun/Javasoft bietet hier neben der Implementierung für das AWT auch noch zusätzliche Tools, wie einen Debugger und Compiler. Der Java-Compiler ist direkt in Java geschrieben ( sun.tools.javac.Main) und kann deshalb mit jeder JVM-Implementierung verwendet werden.
Die in Abbildung 2.3 zusätzlich markierten Verzeichnisse beinhalten den plattfor\nobreak mabhängigen Programmcode für das AWT, dessen Struktur und Portierung in Abschnitt 5.1 näher betrachtet wird.
Die hier beschriebene Struktur der JDK 1.0.x stellt nur eine Implementierung der JVM-Spezifikation dar, aber viele Software-Hersteller haben ihre Produkte auf diese aufgebaut.
1) Die Executeables sind bei JavaSoft (http://www.javasoft.com) frei
erhältlich. Aber auch der Source-Code ist unter bestimmten Bedingungen
(http://java.sun.com/nav/business/license_dl.html) frei erhältlich.
JavaSoft fördert so die Portierung auf andere Systemplattformen. Nach
einer Funktions-Kontrolle kann von jeder Portierung die Übersetzung
frei zur Verfügung gestellt werden.
Für Firmen gibt es die Möglichkeit der kommerziellen Lizensierung.
---------------------------------------------------------------- [home] [TOC] [prev] [next] [guestbook] [contact] (c) SM