2 Das Java-System

Java ist mehr als nur eine Programmiersprache, sie ist vielmehr ein "Technologiekonzept" [Dahl97]. Das Java-System beinhaltet ebenfalls ein Konzept für ein abstraktes Maschinenmodell und eine Spezifikation der Kernbibliotheken. Die folgenden Abschnitte stellen diese Konzepte kurz vor und zeigen anhand des Java Development Kits 1.0.x (JDK) von JavaSoft wie diese Modelle real implementiert werden können.

2.1 Die Programmiersprache

Die Sprache Java wurde seit 1990 bei Sun Microsystems entwickelt. In ihrer Syntax ähnelt sie sehr C und C++ und ist vollständig objektorientiert. Für weitergehende Informationen gibt es von Sun The Java Language Specification [Sun95a] und The Java Language: A White Paper [Sun94]. Für eine Einführung mit Referenz ist [Flan96] gut geeignet.

2.2 Die Java Virtual Maschine

Zusätzlich zur Spezifikation der Sprache hat Sun Microsystems auch The Java Virtual Maschine Specification [Sun95b] festgelegt.

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.

2.3 Die Kernbibliotheken

Mit der Entwicklung von Kernbibliotheken und der Schnittstellen-Spezifikation versucht JavaSoft eine auf allen Plattformen gleiche Java-Umgebung (vgl. auch [Sun95c]) festzulegen. Das in Abschnitt 5.1 näher beschriebene Abtract Window Toolkit (AWT) ist eine der ersten Bibliotheken und schon in der JDK 1.0.x enthalten. Ab der Version 1.1 sollen noch andere in die Standard-Distribution aufgenommen werden.

2.4 Die Implementierung

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.

2.5 JDK 1.0.x

Die JDK 1.0.x von JavaSoft wurde gemäß der JVM-Spezifikation entwickelt. Sie ist für Windows 32 Bit Plattformen und für Solaris erhältlich.1

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