next up previous contents
Next: Implementierungen virtueller Maschinen Up: No Title Previous: Zusammenfassung   Inhalt


Zusammenfassung und Ausblick

Durch die Relevanz von Java ist die Implementierung virtueller Maschinen wieder zu einem Gegenstand aktiver Forschungsaktivitäten geworden. Dabei werden bekannte Techniken erweitert und an einen neuen Kontext angepaßt als auch neue Konzepte entwickelt und erprobt.

Diese Arbeit gibt einen Überblick über die Architektur virtueller Maschinen, speziell im Hinblick auf Java. Die drei Hauptkomponenten ,,Programmausführung``, ,,Speicherverwaltung`` und ,,Thread-System`` werden auf ihre Aufgabe und die Techniken ihrer Implementierung hin analysiert. Dabei wird eine enge Verzahnung dieser Komponenten offenbar.

Der dynamische Compiler bedient sich der Speicherverwaltung bei der Allokation der von ihm benötigten Strukturen wie Klassen- und Methodenobjekten. Im Gegenzug erfüllt er wichtige Aufgaben wie die Inline-Expansion von Allokationsoperationen, ,,Read Barriers`` und ,,Write Barriers`` für generationale und nebenläufige Garbage Collection sowie die Generierung von Referenztabellen für exakte Garbage Collection.

Mit dem Thread-System kooperiert der Compiler, indem er Synchronisations- und Unterbrechungscode erzeugt. Außerdem identifiziert er die Programmpunkte, an denen sich der ausführende Thread in einem konsistenten Zustand befindet, d.h. wenn Referenztabellen zur Identifikation der Inhalte von Registern und Stack vorliegen.

Die Speicherverwaltung muß mit dem Thread-System zusammenarbeiten, um thread-lokale Allokationspuffer mit den Ausführungskontexten zu assoziieren. Zur Einleitung einer Garbage Collection muß das Thread-System alle Threads an konsistenten Punkten stoppen.

Abbildung 6.1: Die drei Hauptkomponenten einer virtuellen Maschine
\begin{figure}
\center{\epsfig{file=thebigpicture/threefold-full,width=12cm}}
\end{figure}

Weiterhin wird in dieser Arbeit beschrieben, welche Techniken dem aktuellen Stand verfügbarer Implementierungen entsprechen. Diese stellen nach einfachen Interpretern und Maschinen mit nicht-adaptiven Compilern die dritte Generation in der Entwicklung dar. Es wird ersichtlich, durch welche Komponenten sie sich auszeichnen:

Die Arbeit zeigt weiterhin auf, welche Bereiche Gegenstand aktiver Forschung sind und Fortschritte erwarten lassen. Hierzu zählen folgende Punkte:

In Bezug auf den Entwicklungsprozess virtueller Maschinen ist zu erwarten, daß die Schnittstellen der Komponenten klarer dokumentiert werden. Ansätze hierzu lassen sich beispielsweise im Garbage Collection Interface der Sun Research VM [White and Garthwaite, 1998] erkennen. Hier wird versucht, die Verantwortlichkeiten und Abhängigkeiten der Speicherverwaltung in Form einer Programmschnittstelle festzuhalten.

Gelingt es, durch ein Bootstrapping die virtuelle Maschine in der Sprache selbst zu implementieren, kann somit auch bei der Entwicklung des Laufzeitsystems von den Vorteilen der Sprache Java profitiert werden. Insbesondere ist es auf diese Weise möglich, die VM selbst mit Hilfe dynamischer Profile zu optimieren. Eine solche Implementierung existiert bereits mit der Jalapeño VM.

Abschließend lässt sich sagen, daß moderne virtuelle Maschinen in ihrer Komplexität in den Bereich sehr großer Softwaresysteme wie Datenbanksysteme [Lockemann and Schmidt, 1987] und Betriebssysteme [Tanenbaum, 1992] gerückt sind. Sie übernehmen dabei zunehmend Aufgaben des Betriebssystems als Ausführungsumgebung für Anwendungsprogramme. Durch eine enge Kooperation ihrer Komponenten werden Ausführungsgeschwindigkeiten erreicht, die statisch kompilierten Sprachen in nichts nachstehen und sie sogar übertreffen können.


next up previous contents
Next: Implementierungen virtueller Maschinen Up: No Title Previous: Zusammenfassung   Inhalt

2001-02-28