| |
2
2
Grundlagen - Garbage Collection
Zu Beginn dieses Kapitels wird erklärt, was unter dem Begriff Garbage Collection zu
verstehen ist, bevor anschließend drei verbreitete Ansätze - Reference Counting, Mark-
Sweep und Copying Garbage Collection - angesprochen werden. In Anlehnung an Jo-
nes und Lins [Jo96] kann Garbage Collection als automatisches Management von dy-
namisch zugewiesenem Speicher definiert werden. Dynamische Zuweisung bedeutet,
dass Daten, deren Lebensdauer nicht im Voraus exakt festgelegt ist, Speicher zugeteilt
wird und, nachdem die Daten nicht mehr im Speicher benötigt werden, die belegten
Speicherbereiche wieder freigemacht werden. Laut der Definition geschieht bei der GC
die Deallokation von zugewiesenem Speicher automatisch, d.h. ein Programmierer muss
nicht explizit angeben, wann Daten bzw. Objekte aus dem Speicher entfernt werden
sollen. Stattdessen wird diese Aufgabe auf die Laufzeitumgebung eines Programms
übertragen.
Bei der GC können folgende Ziele verfolgt werden: erstens den Speicher umfassend von
dem gesamten Garbage zu befreien, zweitens nur Garbage einzusammeln, drittens dabei
Speicher so schnell und in ausreichendem Maße wieder freizugeben, dass neue Alloka-
tionsanforderungen erfüllt werden können und viertens Zeit- und Platzoverhead auf ak-
zeptablem Niveau halten [Jo96]. Während das erste Ziel von einigen GC-Algorithmen
nicht immer vollständig erreicht wird, weil z.B. keine Zyklen zwischen Garbage-
Objekten erkannt werden, ist das Erreichen des zweiten Ziels essentiell für ein GC-
Verfahren, um einen fehlerhaften Programmablauf zu verhindern.
Eine automatische Deallokation hat den Vorteil, dass bei modularer Programmierung
Abhängigkeiten zw ischen verschiedenen Modulen insofern vermieden werden können,
dass ein Modul nicht wissen muss, ob andere Module noch ein bestimmtes Objekt des
Moduls benötigen bzw. darauf zugreifen können und es deshalb im Speicher gehalten
werden muss [Wi94]. Besonders in verteilten bzw. parallelen Systemen sollten Abhä n-
gigkeiten zwischen Modulen bezüglich der Speicherwaltung minimiert werden, weil
beispielsweise aufgrund mehrerer, interagierender Prozesse die Abhängigkeiten noch
komplexer und bei der Programmierung schwerer überschaubar werden können. Tritt
bei expliziter Speicherwaltung ein fehlerhaftes Verhalten in einem Programm auf, ge-
staltet sich die Fehlerdiagnose schwierig, weil Fehler häufig nicht wiederholt auftreten
und somit schwer reproduziert werden können [Wi94].
Laut Wilson lässt sich die Grundfunktionalität eines Garbage Collector in zwei Teile
aufgliedern. Erstens wird eine Unterscheidung zwischen sogenannten lebenden und to-
ten, überflüssigen Objekten (Garbage) durchgeführt, d.h. Garbage im Speicher wird
identifiziert (Garbage Detection). Zweitens werden die von nutzlosen Objekten belegten
|  |
|
| |
|
|