next up previous contents
Next: Sun Hotspot 2.0 Up: Implementierungen virtueller Maschinen Previous: Implementierungen virtueller Maschinen   Inhalt

Sun JDK 1.2.2 Reference Implementation

Diese Java Maschine ist eine Weiterentwicklung der ersten JVM 1.0.2. Sie stellte bis zur Version 1.2 die Standard-VM von Sun dar. Weiterhin wurde ihr Quellcode als Referenzimplementierung an Lizenznehmer weitergegeben.

Die Speicherverwaltung basiert noch auf Handles anstatt direkter Referenzen zwischen Objekten. Die Markbits eines Objektes sind nicht im Objektheader sondern in einem separaten Array untergebracht.

Als Garbage Collector wird ein konservativer Mark and Sweep ohne Freelist verwendet. Wird neuer Speicher aus dem globalen Heap benötigt, findet ein lineare Heap-Scan statt. Kann kein freier Speicherbereich von ausreichender Größe gefunden werden, so wird eine Mark-Compact Collection ausgeführt. Die Compaction ist dank der Verwendung von Handles möglich, obwohl der Kollektor nicht exakt ist.

Um contention bei der Allokation zu vermeiden wird ein local allocation buffer sowohl für den allozierten Speicher als auch für die notwendigen Handles verwendet. Die Größe des LAB beträgt 1K pro Thread, einen dynamische Anpassung dieses Wertes an die Anzahl der aktiven Threads findet nicht statt.

Monitore werden unter Verwendung der durch die Thread-Bibliothek bereitgestellten Mutexe und Condition-Variablen implementiert. Die Verbindung von Objekt zum zugehörigen Monitor erfolgt durch eine Hashtabelle - als Schlüssel wird die Adresse des zum Objekt gehörenden Handles verwendet.

Die Ausführung findet sowohl durch eine assembler-codierte Interpreterschleife als auch durch einen dynamischen Compiler statt. Der Sourcecode des Compilers lag uns jedoch nicht vor - ohne diesen läßt sich lediglich aussagen, daß ein Inlining von Synchronisations- oder Allokations-Code aufgrund des schwachen Designs nicht möglich ist.

Die JDK 1.2.2 Referenzimplementierung stellt eine ausgereifte JVM der ersten Generation dar. Designentscheidungen wie handle-basierte Speicherverwaltung oder tabellenbasierte Monitorzuordnung limitieren die erzielbare Effizienz. Der Schwerpunkt der Referenzimplementierung lag berechtigterweise auf Portabilität und Einfachheit, nicht auf Effizienz.


next up previous contents
Next: Sun Hotspot 2.0 Up: Implementierungen virtueller Maschinen Previous: Implementierungen virtueller Maschinen   Inhalt

2001-02-28