|
Die effiziente Implementierung einer Java Virtual Machine für Server-Software erfordert die Ausnutzung mehrerer Prozessoren bei gleichzeitiger Unterstützung einer hohen Zahl von Threads. Diese zwei Entwurfsziele in Einklang zu bringen, verkompliziert das Laufzeitsystem in erheblichem Maße. Kernentscheidungen betreffen den Mechanismus und die Granularität von Thread-Wechseln, den Abbildungsmechanismus auf Systemkontexte, den Umgang mit blockierenden Systemaufrufen sowie Globaloperationen wie das Anhalten aller Threads (,,stop-the-world``). Es ist zu prüfen, inwieweit existierende Betriebssystembibliotheken den gestellten Ansprüchen gerecht werden.
Der Ubiquität von Monitoren und konfliktfreien Synchronisierungsoperationen muß Rechnung getragen werden. Insbesondere sind die Kosten für nicht verwendeter oder konfliktfreie Monitore ist so gering wie möglich zu halten. Auch hier sind die Eigenschaften der Systembibliotheken in Betracht zu ziehen.
Das Laufzeitsystem mit Speicherverwaltung und Codegenerierung muß unter Berücksichtigung nebenläufiger Ausführung entworfen und implementiert werden, d.h. jeder Zugriff auf Laufzeitstrukturen wie die Klassenhierarchie, die Speicherorganisation und die Objektmetainformationen muß in thread-sicherer Manier erfolgen.
Im Folgenden werden Thread-Implementierungen und Synchronisierungsalgorithmen separat behandelt. Auf eventuelle Abhängigkeiten wird entsprechend hingewiesen. Nach einer kurzen Einführung in die verwendete Terminologie wird zunächst eine grobe Übersicht gängiger Implementierungsklassen und ihrer Eigenschaften gegeben und anschließend detailliert auf einzelne Systeme eingegangen.