Garbage Collection Maik Theisen Betreuer: Guido Tack Proseminar „Programmiersysteme“ – WS 03/04 Prof. Dr. Gert Smolka Programming Systems Lab, Universität des Saarlandes
Gliederung Grundlagen Copying Garbage Collection Generational Garbage Collection Ausblick
Was ist Garbage Collection? Automatisierte Bereinigung des Heaps Lisp war die erste Sprache mit GC Heute in vielen Programmiersprachen eingesetzt Ziel: „tote“ Speicherzellen freigeben
Wozu Garbage Collection? Entlastung des Programmierers Reduzierung von Fehlern, z.B. Speicherlecks Rechtzeitige Freigabe von Speicher
Lebende Objekte „root“ Stack Heap A „toter“ Knoten B C D E F
Verschiedene Formen von GC Mark-Sweep Mark-Compact Copying Generational
Gliederung Grundlagen P Copying Garbage Collection Generational Garbage Collection Ausblick
Entwicklung / Entstehung Erster CGC entstand 1969, war allerdings rekursiv (Fenichel, Yochelson) Cheney entwickelte 1970 einen iterativen Algorithmus Grundidee: Unterteilung des Heaps in „Semi-Spaces“ und Kopieren der Daten von einem „Semi-Space“ zum anderen
Funktion (Cheney‘s Algorithmus) B C D E Fromspace A‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C D E Fromspace A‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C D E Fromspace A‘ B‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C D E Fromspace A‘ B‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C D E Fromspace A‘ B‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ D E Fromspace A‘ B‘ C‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ D E Fromspace A‘ B‘ C‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ D E Fromspace A‘ B‘ C‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ D E Fromspace A‘ B‘ C‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E Fromspace A‘ B‘ C‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E Fromspace A‘ B‘ C‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E Fromspace A‘ B‘ C‘ D‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E Fromspace A‘ B‘ C‘ D‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ Fromspace A‘ B‘ C‘ D‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ Fromspace A‘ B‘ C‘ D‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ E‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ E‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ E‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ E‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ E‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ E‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ E‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Funktion (Cheney‘s Algorithmus) B C B‘ C‘ D E D‘ E‘ Fromspace A‘ B‘ C‘ D‘ E‘ free scan Tospace
Effizienz Cheney‘s Algorithmus läuft in der Komplexität O(n), wobei n die Anzahl der lebenden Objekte ist Abhängig von der Größe des Heaps Abhängig von der Größe der Objekte
Große Objekte Werden oft kopiert, benötigen spezielle Behandlung Bereiche im Heap für diese Objekte reservieren und GC dort mit anderer Technik durchführen, z.B. Mark-Sweep
Einsatzgebiete Systeme, bei denen die Speicherverwaltung von Allokationen dominiert wird Systeme mit kleinen, kurzlebigen Objekten Systeme, bei denen Verzögerungen bzw. Pausen unkritisch sind
Probleme Art der Durchmusterung des Heaps Lokalität geht verloren Objekte mit langer Lebensdauer
Gliederung Grundlagen P Copying Garbage Collection P Generational Garbage Collection Ausblick
Entwicklung / Entstehung Basiert auf der „Weak Generational Hypothesis“ „Most Objects die young.“ Erstes Paper von Lieberman und Hewitt 1983 Basiert auf Heuristiken
Funktion inter-generational Pointer jüngste Generation ältere Generation älteste Generation
Inter-generational Pointers Write Barrier (Schreibzugriff teuer) Entry tables (Lesezugriff teuer)
Inter-generational Pointers Write Barrier (Schreibzugriff teuer) Entry tables (Lesezugriff teuer)
Langlebige Objekte Durch Heuristiken erraten, welche Objekte lange leben (z.B. Programmcode in Alice) Diese Objekte bereits zu Beginn in ältester Generation speichern
Einsatzgebiete Als Weiterentwicklung von Copying GC gleiche Einsatzgebiete Eingesetzt in z.B. Java, Alice Ungeeignet für kleinere Systeme
Probleme Gleiche Probleme wie Copying GC, aber Problem mit Lebensdauer gelöst
Ausblick Incremental GC Region-based memory management Statische Analyse der Lebensdauer
Gliederung Grundlagen P Copying Garbage Collection P Generational Garbage Collection P Ausblick P
Literatur Gargage Collection, Richard Jones & Rafael Lins Concepts in Programming Languages, John Mitchell A Nonrecursive List Compacting Algorithm, C.J. Cheney Simple Generational Garbage Collection and Fast Allocation, Andrew W. Appel Generation Scavenging, David Ungar
Scheduling Ziel: Reduzierung der Pausezeiten GC durchführen, wenn User nicht gestört wird, z.B. beim Warten auf I/O Ungeeignet für Echtzeitsysteme Key Objects (z.B. Wurzel von Bäumen)