next up previous contents
Next: Zusammenfassung Up: Nebenläufigkeit Previous: Einsatz von Nebenläufigkeit in   Inhalt


Interaktion mit anderen VM-Komponenten

Die nebenläufige Ausführung mehrerer Threads verkompliziert die Implementierung anderer Komponenten der virtuellen Maschine. Insbesondere die Speicherverwaltung und der Compiler sind hiervon betroffen.

Die meisten Algorithmen für Garbage Collection erfordern, daß zur konsistenten Ermittlung der Wurzelreferenzen alle Threads an definierten Punkten, sogenannten ,,GC Points``, angehalten werden. Mit steigender Zahl von Threads wird es schwieriger, diesen Operation effizient zu implementieren. Mehrere diesbezügliche Techniken werden in Abschnitt 5.3 erläutert.

Bei der hohen Allokationsrate objektorientierter Sprachen ist es weiterhin nicht gangbar, für jede Allokationsoperation den globalen Heap durch komplexe Synchronisierungsmaßnahmen zu schützen. Die verwendeten Ausschlußverfahren dürfen nur einen sehr geringen Overhead pro Operation aufweisen.

Zusätzliche Komplexität für den Compiler besteht darin, daß der generierte Maschinencode ähnlich wie der Freispeicher nicht durch klassische Sperren geschützt werden kann. In einigen Fällen muß Code durch den Compiler nachträglich geändernt werden -- beispielsweise, wenn Annahmen über den Empfängertyp falsch sind, oder sich durch Laden neuen Codes die Klassenhierarchie geändert hat. Da andere Threads diesen Code nebenläufig ausführen, also davon lesen, muß eine solche Änderung atomar vollzogen werden. Typischerweise wird Code derart erzeugt, daß nur ein einzelnes Instruktionswort überschrieben werden muß.


next up previous contents
Next: Zusammenfassung Up: Nebenläufigkeit Previous: Einsatz von Nebenläufigkeit in   Inhalt

2001-02-28