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) Vertauschen der beiden Hälften (From-Space, To-Space) Kopieren der Objekte aus der root-set in den To-Space 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.: Cheneys 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.
Danke für Ihre Aufmerksamkeit! FRAGEN ?