Die Idee hinter Copying Garbage Collection (1)
Aufteilung des Heaps in zwei Teile:
To-Space und From-Space
Nutzung eines Teiles durch das Programm
Ist der Heap(-Teil) aufgebraucht, findet Garbage Collection statt und das Programm wird anschliessend im anderen Teil fortgesetzt
Die Idee hinter Copying Garbage Collection (2)
1. Vertauschen der beiden Hälften (From-Space, To-Space)
2. Kopieren der Objekte aus der root-set in den To-Space
3. Scannen der Objekte im To-Space und ggf. Kopieren referenzierter Objekte bzw. Korrektur der Referenzen
Cheneys Copying Collector (1)
Iterativer Algorithmus
Verbindet Kopieren und Scannen
Verwendet zwei Zeiger: scan / free
Forwarding-Zeiger um „Sharing“ zu garantieren
„The tricolour abstraction“
Cheneys Copying Collector (2)
Der Algorithmus:
Allokation
CPU-Kosten von stop-and-go Garbage Collection
niedrig, da nur aktive Knoten besucht werden und das Kopieren von kleinen Objekten billig ist
Überprüfen des Speichers im Semispace
Inkrementieren des free Zeigers
Rückgabe der neuen Adresse
Multiple-Area Collection
Statische Bereiche (static area)
Bereiche für grosse Objekte (large object area)
„Compacting Garbage Collection“:
Effizienz
R … Anzahl der erreichbaren Knoten c … Konstante (abhängig von der Zelle) M ...Grösse eines Semi-Space
s … Grösse einer Zelle
g … CPU-Kosten pro Garbage Collection einer Zelle
Lokalität
Falsche Strategie zerstört die Lokalität (z.B.: Cheney‘s breadth-first search)
Richtige Heap-Grösse wählen
Paging
Unterstützung durch Betriebssystem
Umgruppierungsstrategien
Depth-first vs Breadth-first Copying
„Stackless recursive copying collection“
„Approximately depth-first copying“
„Hierarchical decomposition“
„Hash tables“
Stackless recursive copying collection
Grundeinheit der Heap Allokation ist ein „frame of closures“ von variabler Länge
Jedes „closure“ enthält einen Code-Zeiger und einen Zeiger auf einen Heap-Rahmen
Rekursiv, aber Rekursionsstack liegt in bereits besuchten From-Space „closures“
Approximately Depth-first Copying
Es wird immer an der zuletzt teilweise gefüllten Seite im To-Space fortgesetzt
Partial untersucht die Seite am Ende von To-Space (benutzt Breitensuche)
Ist Partial fertig, wird übliche Breitensuche fortgesetzt und To-Space Objekte eingelesen
Hierarchical decomposition
Ähnlich wie „Approximately depth-first copying“
4 Zeiger (2 Scan, 2 Free)
Nur für Baumstrukturen empfehlenswert
Hash tables
Traversieren vermeiden
Lineare Liste globaler Variablen
Objekte nach Entstehung geordnet
Liste wird von Garbage Collection verwendet
Collector erreicht Objekte in der Erzeugungsreihenfolge
Gute Lokalität
Copying Collection – Ja oder Nein?
Ja wenn
Speicherverwaltung von Allokation dominiert wird
Es viele kleine, kurzlebige Objekte gibt
Die Verzögerung durch GC keine Rolle spielt
Alternative:
•Hybrides System: ein Teil wird von einem Copying Collector behandelt, ein anderer Teil vom z.B. Mark- Sweep oder Mark-Compact
Copying Garbage Collection bildet die Grundlage für andere Verfahren. Generationale und inkrementelle Garbage
Collection bauen auf Copying auf.