next up previous contents
Next: Nebenläufigkeit Up: Speicherverwaltung Previous: Der ,,Copying Collection``-Algorithmus   Inhalt


Zusammenfassung

In den vorigen Abschnitten wurden einige Anforderungen, die an die Speicherverwaltung einer modernen virtuellen Maschine gestellt werden dargestellt.

Dabei wurde gezeigt, daß eine dynamische Speicherverwaltung mit Garbage Collection die Softwareentwicklung in einer objektorientierten oder funktionalen Sprache deutlich produktiver gestalten kann. Aus diesem Grunde verfügen fast alle Sprachen dieser Klasse über Garbage Collection.

Der angewendete Algorithmus sollte Speicher aus einem linearen Bereich erlauben, da so die Speicherzuteilung erheblich beschleunigt wird. Auf diesen Punkt wird im Abschnitt 4.1 näher eingegangen. Um eine Fragmentierung des Speichers zu vermeiden, sollte der Algorithmus eine Speicher-Kompaktierung durchführen. Die Voraussetzung hierfür ist, daß es sich um einen exakten Algorithmus handelt. Auf welche Weise Exaktheit erzielt wird (durch Markierung oder Referenztabellen), ist unter Berücksichtigung der Zielsprache zu entscheiden. Dieses Thema wird in Abschnitt 4.2 für den Fall der Sprache Java näher behandelt.

,,Copying Collection`` vereinigt viele positive Eigenschaften, weist aber insofern einen Schwachpunkt auf, daß langlebige Objekte wiederholt kopiert werden. Der ,,Mark-Sweep``-Algorithmus hingegen bewegt keine Objekte, leidet daher aber unter Speicher-Fragmentierung. Bei beiden Algorithmen kann Garbage Collection störend lange Unterbrechungen des Programmflusses verursachen. All diese Probleme versucht die generationale Garbage Collection (s. Abschnitt 4.3) zu beheben, indem der Heap nach Alter der Objekte in mehrere Segmente aufgeteilt wird, die dann separat durch unterschiedliche Algorithmen bearbeitet werden können.

Eine neue Klasse von Problemen tut sich auf, wenn die virtuelle Maschine in einer Multithreading- bzw. Multiprozessor-Umgebung abläuft und dabei von mehreren Prozessoren profitieren soll. Beispielsweise muß die nebenläufige Speicherzuteilung möglich sein, da die Allokation sonst einen zentralen Flaschenhals darstellen könnte (s. Abschnitt 4.1).

Weiterhin ist eine Eigenschaft der vorgestellten Algorithmen in einer Multiprozessor-Umgebung infrage zu stellen: sie arbeiten sequentiell, d.h., daß alle Threads angehalten werden müssen, bevor die Garbage Collection in einem eigenen Thread ausgeführt werden kann. Auf einem Multiprozessor-System ist in dieser Zeit nur ein Prozessor ausgelastet, während alle anderen ungenutzt bleiben. Nebenläufige Algorithmen zur Garbage Collection (Abschnitt 4.4) versuchen, dieses Manko zu beheben, indem sie nebenläufig mit den Anwenderthreads abläufen.

Die effiziente Implementierung der Speicherverwaltung stellt eine komplexe Aufgabe dar, die nur unter enger Kooperation mit den anderen beiden Kernkomponenten, dem dynamischen Compiler und dem Thread-System, gelöst werden kann. Kapitel 4 stellt den Stand der Technik bei der Implementierung der Speicherverwaltung für virtuelle Maschinen dar.


next up previous contents
Next: Nebenläufigkeit Up: Speicherverwaltung Previous: Der ,,Copying Collection``-Algorithmus   Inhalt

2001-02-28