Java   Implementierungsstrategien für die JVM  

... [ Seminar "Java und Werkzeuge für das Web" ]  ... [ Inhaltsverzeichnis ]  ... [ zurück ]  ... [ weiter ] ...
     

Garbage Collection


Mark-Sweep Algorithmus

Mark Sweep Algorithmus

Der Speicher wird periodisch nach Objekten durchsucht, die von laufenden Programmen aus noch erreicht werden können. 

Üblicherweise werden zu diesem Zweck alle Wurzeln auf einen Stack gelegt und dann die jeweils oberste Referenz bearbeitet, bis der Stack leer ist. Bei der Bearbeitung wird zunächst geprüft, ob das referenzierte Objekt bereits markiert wurde. Ist das nicht der Fall, so wird sein ,,Mark Bit`` gesetzt (dies ist üblicherweise ein Bit im Objektkopf) und alle Referenzen, die in diesem Objekt enthalten sind, werden auf den Stack gelegt.

Wenn alle erreichbaren Objekte markiert wurden, kann vom restlichen Speicher angenommen werden, dass dieser frei ist. 

In der Sweep-Phase wird der Heap linear durchlaufen und unmarkierte Speicherbereiche werden einer oder mehreren Freispeicherlisten zugefügt - folgende Allokationen werden dann aus diesen Listen bedient. Während der linearen Suche durch den Heap werden weiterhin alle Markierungen zurückgesetzt, damit diese bei der nächsten Garbage Collection zur Verfügung stehen.

Um eine Fragmentierung des Speichers zu verhindern, endet dieses Verfahren oft damit, dass der Speicher so umgeordnet wird, dass der freie Speicher ein einziger Block ist.

Während die Garbage Collection mit diesem Verfahren läuft, ist das System in einem unstabilen Zustand

 "tote" Objekte werden entfernt, "lebende" Objekte erkannt und Referenzen auf Objekte erneuert 

Automatischer Ablauf ohne Unterbrechungen

Performanceeinbußen in Systemen mit viel Speicher.

dieses Verfahren ist schlecht für Echtzeit-Anforderungen.

 


index