Garbage-Collection
Prinzipien & Algorithmen
➊ Warum Garbage Collection?
➋ Klassifikation von Garbage Collection Algorithmen...
➊
Warum Garbage Collection?
Nutzen, Einsatzgebiete
Automatische
Speicherverwaltung
Vorlesung Compilerbau,Wintersemester 2008/09
Automatische Speicherverwaltung
Stack: automatische Verwaltung einfach
wächst...
Vorlesung Compilerbau,Wintersemester 2008/09
Automatische Speicherverwaltung
Manuelle Heap-Verwaltung aufwendig & fehleran...
Vorlesung Compilerbau,Wintersemester 2008/09
Automatische Speicherverwaltung
Strategien für manuelle Speicherverwaltung
wo...
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Sweep vs. Manuel
7
➀ Garbage Collection: Warum?
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Sweep vs. Manuel
8
➀ Garbage Collection: Warum?
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Sweep vs. Manuel
9
➀ Garbage Collection: Warum?
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Sweep vs. Manuel
10
➀ Garbage Collection: Warum?
Was ist das?
Garbage
Vorlesung Compilerbau,Wintersemester 2008/09
Garbage
Garbage := aus akt. Programmzustand nicht erreichbar
statisch: ist ei...
Vorlesung Compilerbau,Wintersemester 2008/09
Erreichbarkeit nur Approximation
Beispiel:
Nach x
=
y o1 nicht erreichbar, o2...
➊
Warum Garbage Collection?
Nutzen, Einsatzgebiete
➋
Übersicht & Klassifikation
Garbage Collection Algorithmen
Vorlesung Compilerbau,Wintersemester 2008/09
Bewertung von GC Algorithmen
Geschwindigkeit
minimiere den Einfluss des Algori...
Vorlesung Compilerbau,Wintersemester 2008/09
Struktur von GC Algorithmen
Speicher: organisiert als Heap
verfügbarer Speich...
Vorlesung Compilerbau,Wintersemester 2008/09
Typen & Klassifikation von GC Algorithmen
Counting algorithms: zählte Verweise...
Vorlesung Compilerbau,Wintersemester 2008/09
Typen & Klassifikation von GC Algorithmen
20
Garbage Collectors
Reference­
Cou...
➋
Übersicht & Klassifikation
Garbage Collection Algorithmen
➌
“Stop-the-World”
Einfache GC Algorithmen
Vorlesung Compilerbau,Wintersemester 2008/09
Reference counting
23
➂ Einfache GC Algorithmen
ROOT
SET
HEAP SPACE
1
1
1
2
1...
Vorlesung Compilerbau,Wintersemester 2008/09
Reference counting
24
Reference counting
Create object:
• counter := 1
• retu...
Vorlesung Compilerbau,Wintersemester 2008/09
Reference counting
25
Root
Object
A(1)
E(1)D(2)
B(2)
C(1)
➂ Einfache GC Algor...
Vorlesung Compilerbau,Wintersemester 2008/09
Reference counting
26
Root
Object
A(0)
E(1)D(2)
B(2)
C(1)
➂ Einfache GC Algor...
Vorlesung Compilerbau,Wintersemester 2008/09
Reference counting
27
➂ Einfache GC Algorithmen
Root
Object
E(1)D(2)
B(1)
C(0)
Vorlesung Compilerbau,Wintersemester 2008/09
Reference counting
28
➂ Einfache GC Algorithmen
Root
Object
E(1)D(1)
B(1)Zykl...
Vorlesung Compilerbau,Wintersemester 2008/09
Reference counting
Verwalte Anzahl der Referenzen auf jedes Objekt
lösche Obj...
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Sweep
Zwei Phasen“stop-the-world”Algorithmus
erst markieren aller vo...
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Sweep
31
➂ Einfache GC Algorithmen
unreached
= alle Objekte;
scanned...
Vorlesung Compilerbau,Wintersemester 2008/09 32
➂ Einfache GC Algorithmen
Prof. Aiken CS 143 Lecture 17 17
Mark-and-Sweep
!"#$%&'$()#$$!"#$#%&'&"()
"$*
*+
,&$-.(/
!"#$%&'$()#$$
+&%""$( !"+&%""$(
),!"(-.,-/$
#$%&'$(
,/0$&.+-+&%""$(
),#-"$*-#$%&'...
Vorlesung Compilerbau,Wintersemester 2008/09
Bewertung des Algorithmus:
einfach, vollständig (keine memory leaks)
zwei Läu...
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Compact
Idee: verschieben erreichbarer Objekte an Beginn des Heaps
Z...
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Compact
36
free
free
➂ Einfache GC Algorithmen
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Compact
37
free
free
➂ Einfache GC Algorithmen
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Compact
38
free
free
➂ Einfache GC Algorithmen
Vorlesung Compilerbau,Wintersemester 2008/09
Mark-and-Compact
39
free
free
free
➂ Einfache GC Algorithmen
Vorlesung Compilerbau,Wintersemester 2008/09
Bewertung des Algorithmus:
einfach, vollständig (keine memory leaks)
bessere ...
Vorlesung Compilerbau,Wintersemester 2008/09
Stop-and-Copy Semispace
Idee: Ein-Phasen Verschieben durch Kopieren in reserv...
Vorlesung Compilerbau,Wintersemester 2008/09
Stop-and-Copy Semispace
42
➂ Einfache GC Algorithmen
TOSPACE
ROOT
SET
FROMSPA...
Vorlesung Compilerbau,Wintersemester 2008/09
Stop-and-Copy Semispace
43
TOSPACE
ROOT
SET
FROMSPACE
➂ Einfache GC Algorithm...
Vorlesung Compilerbau,Wintersemester 2008/09 44
A B
Scan Free
C
v)
A B
Scan Free
i)
ii)
iii)
iv)
A B
Scan Free
C
D
A B
Sca...
Vorlesung Compilerbau,Wintersemester 2008/09
Bewertung des Algorithmus:
nur ein Lauf über den Heap erforderlich
kaum zusät...
Vorlesung Compilerbau,Wintersemester 2008/09
Stop-and-Copy Semispace
46
➂ Einfache GC Algorithmen
➌
“Stop-the-World”
Einfache GC Algorithmen
➍
Partitionierende GC Algorithmen
Inkrementelle & Generationelle
Vorlesung Compilerbau,Wintersemester 2008/09
Typen & Klassifikation von GC Algorithmen
49
Garbage Collectors
Reference­
Cou...
Vorlesung Compilerbau,Wintersemester 2008/09
Inkrementelle Garbage Collection
Idee: garbage collection parallel zu Program...
Vorlesung Compilerbau,Wintersemester 2008/09
Inkrementelle Garbage Collection
51
I. Incremental GC
s GC with mutator actio...
Vorlesung Compilerbau,Wintersemester 2008/09
Inkrementelle Garbage Collection
52
Before After
A
B C
D
B C
D
A
➃ Partitioni...
Vorlesung Compilerbau,Wintersemester 2008/09 53
• All reaching pointers are found in “scanned objects”
• Requires the occu...
Vorlesung Compilerbau,Wintersemester 2008/09 54
anced Compilers 7 L15: Advanced Garbage Collec
• Intercept p in any of the...
Vorlesung Compilerbau,Wintersemester 2008/09
Write Barrier am effizientesten
wird seltener aktiv als Read Barrier
weniger st...
Vorlesung Compilerbau,Wintersemester 2008/09
Generationelle Garbage Collection
Grundidee: Partitioniere Objekte in stable
...
Vorlesung Compilerbau,Wintersemester 2008/09 57
Generationelle Garbage Collection
➃ Partitionierende GC Algorithmen
Vorlesung Compilerbau,Wintersemester 2008/09
Generationelle Garbage Collection
Root Set(i) := Root Set(Program) + Zeiger v...
Vorlesung Compilerbau,Wintersemester 2008/09
Generationelle Garbage Collection
59
Younger Generation
Older Generation
ROOT...
Vorlesung Compilerbau,Wintersemester 2008/09
Generationelle Garbage Collection
60
Second
Generation
Memory
First (New)
Gen...
Vorlesung Compilerbau,Wintersemester 2008/09
Generationelle Garbage Collection
Wie definieren wir eine Generation?
Objekt o...
Vorlesung Compilerbau,Wintersemester 2008/09 62
percent surviving
never copied
percent surviving
until scavenge 2
-/
perce...
Vorlesung Compilerbau,Wintersemester 2008/09 63
0 10 20 30 40 50 60 70 80 90 100
null
compress
db
jack
javac
jess
mpegaudi...
Vorlesung Compilerbau,Wintersemester 2008/09 64
0 10 20 30 40 50 60 70 80 90 100
null
compress
db
jack
javac
jess
mpegaudi...
Vorlesung Compilerbau,Wintersemester 2008/09 65
o1
o2
o4
o3
o5
o6
o7
o8
p1
p2
p3
ure 1: Example partitioning. Solid boxes ...
➍
Partitionierende GC Algorithmen
Inkrementelle & Generationelle
Vorlesung Compilerbau,Wintersemester 2008/09
Typen & Klassifikation von GC Algorithmen
67
Garbage Collectors
Reference­
Cou...
Fragen?
Vorlesung Compilerbau,Wintersemester 2008/09
Literatur zur Interprozeduralen Zeigeranalyse
Basiswissen:
Aho, Lam, Sethi, U...
Garbage Collection
Nächste SlideShare
Wird geladen in …5
×

Garbage Collection

678 Aufrufe

Veröffentlicht am

Veröffentlicht in: Bildung
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
678
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
7
Aktionen
Geteilt
0
Downloads
31
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Garbage Collection

  1. 1. Garbage-Collection Prinzipien & Algorithmen ➊ Warum Garbage Collection? ➋ Klassifikation von Garbage Collection Algorithmen ➌ Einfache Ansätze:“Stop-the-World” ➍ Partitionierende Ansätze: inkrementell, generationell ➎ JVM Tim Furche (Folien nach P. R. Wilson) Younger Generation Older Generation ROOT SET
  2. 2. ➊ Warum Garbage Collection? Nutzen, Einsatzgebiete
  3. 3. Automatische Speicherverwaltung
  4. 4. Vorlesung Compilerbau,Wintersemester 2008/09 Automatische Speicherverwaltung Stack: automatische Verwaltung einfach wächst und schrumpft gemäß Programmablauf, Prozedursegmente, … Compiler entscheidet über Verwaltung Heap: unabhängig von Programmablauf explizite Allozierung und Deallozierung notwendig hier: Ein-Prozessor, zentralisiertes System 4 ➀ Garbage Collection: Warum?
  5. 5. Vorlesung Compilerbau,Wintersemester 2008/09 Automatische Speicherverwaltung Manuelle Heap-Verwaltung aufwendig & fehleranfällig zu konservativ: memory leak zu aggressiv: Speicherzugriffsfehler, Null-Pointer da schwer → inflexible, statische Verwaltung leichter aber Gefahr von impliziten Grenzen beeinträchtigt Wiederverwendbarkeit & loose copling Lebensdauer von Objekten muß unter verschiedenen Komponenten abgestimmt sein oft schwer durch Testen auffindbar 5 ➀ Garbage Collection: Warum?
  6. 6. Vorlesung Compilerbau,Wintersemester 2008/09 Automatische Speicherverwaltung Strategien für manuelle Speicherverwaltung wo soll angeforderter Speicher alloziert werden? best fit, first fit, next fit … Problem: Fragmentierung, schlechte Lokalität (Paging & Caching) Automatische Speicherverwaltung alloziert und dealloziert Speicher automatisch durchschnittlich nur 10% langsamer als manuelle Speicherverwaltung Vergleich der Schemata: Geschwindigkeit, Vorhersehbarkeit, Einfluß auf Programmausführung Speicherbedarf, minimale Fragmentierung, maximale Lokalität 6 ➀ Garbage Collection: Warum?
  7. 7. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Sweep vs. Manuel 7 ➀ Garbage Collection: Warum?
  8. 8. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Sweep vs. Manuel 8 ➀ Garbage Collection: Warum?
  9. 9. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Sweep vs. Manuel 9 ➀ Garbage Collection: Warum?
  10. 10. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Sweep vs. Manuel 10 ➀ Garbage Collection: Warum?
  11. 11. Was ist das? Garbage
  12. 12. Vorlesung Compilerbau,Wintersemester 2008/09 Garbage Garbage := aus akt. Programmzustand nicht erreichbar statisch: ist ein Objekt einmal Garbage bleibt es es auch global: um festzustellen, ob ein Objekt Garbage ist muss man den gesamten Programmzustand inspizieren Wie erkennt man Garbage? beginne mit Root Set in den Daten Java: Statische + lokale Variablen (auf dem Laufzeit-Stack) Reachable := Root Set ∪ PointedTo(Reachable). Funktioniert das auch in C? 13 ➀ Garbage Collection: Warum? Nein: – schwach typisiert (Zeiger in Integers) – Zeigerarithmetik – unbekannte Grenzen von Arrays … . . . Object 1 Object 3Object 2 Free List
  13. 13. Vorlesung Compilerbau,Wintersemester 2008/09 Erreichbarkeit nur Approximation Beispiel: Nach x
=
y o1 nicht erreichbar, o2
erreichbar o2
wird nie mehr verwendet könnte also schon hier freigegeben werden Aber: solche Programmanalyse zu teuer im allgemeinen im folgenden: nur Erreichbarkeit 14 ➀ Garbage Collection: Warum? o1:
x


=
new
A(); o2:
y


=
new
B(); 
 x
=
y; 
 if
(true)
then
x
=
new
A()
else
x.foo;
  14. 14. ➊ Warum Garbage Collection? Nutzen, Einsatzgebiete
  15. 15. ➋ Übersicht & Klassifikation Garbage Collection Algorithmen
  16. 16. Vorlesung Compilerbau,Wintersemester 2008/09 Bewertung von GC Algorithmen Geschwindigkeit minimiere den Einfluss des Algorithmus Vorhersehbarkeit Unterbrechung der Programmausführung: minimal Speicherbedarf: minimal minimale Fragmentierung Lokalität: maximal gemeinsam verwendete Daten nahe beinander in Cache/Seiten 17 ➁ Übersicht Garbage Collection Algorithmen
  17. 17. Vorlesung Compilerbau,Wintersemester 2008/09 Struktur von GC Algorithmen Speicher: organisiert als Heap verfügbarer Speicher adressierbar über Free List Phasen der Automatische Speicherverwaltung (schematisch) Speicherallozierung: finde freien Bereich auf dem Heap Falls kein freier Bereich verfügbar Garbage detection: berechne Objekte, deren Speicher wiederverwendet wd. kann Garbage reclamation: freigeben des durch Garbage belegten Speicher besser: freigeben auch wenn noch Speicher verfügbar ist sonst: bei Speichermangel“stop-the-world”Effekt 18 ➁ Übersicht Garbage Collection Algorithmen . . . Object 1 Object 3Object 2 Free List
  18. 18. Vorlesung Compilerbau,Wintersemester 2008/09 Typen & Klassifikation von GC Algorithmen Counting algorithms: zählte Verweise auf Objekte local, aber unvollständig schwer effizient zu machen Tracing algorithms: verfolge Verweise um Garbage zu finden brauchen selber Speicher → können selbst zu Speicheranforderung führen “stop-the-world” Algorithmen: berechnen Reachable am Stück skalieren nicht, führen zu unberechenbarem Programverhalten zeitliche Partitionierung: incremental räumliche Partitionierung: generational 19 ➁ Übersicht Garbage Collection Algorithmen
  19. 19. Vorlesung Compilerbau,Wintersemester 2008/09 Typen & Klassifikation von GC Algorithmen 20 Garbage Collectors Reference­ Counters Trace­ Based Stop­the­World Short­Pause Mark­and­ Sweep Mark­and­ Compact Basic Baker’s Basic Cheney’s Incremental Partial Generational Train ➁ Übersicht Garbage Collection Algorithmen
  20. 20. ➋ Übersicht & Klassifikation Garbage Collection Algorithmen
  21. 21. ➌ “Stop-the-World” Einfache GC Algorithmen
  22. 22. Vorlesung Compilerbau,Wintersemester 2008/09 Reference counting 23 ➂ Einfache GC Algorithmen ROOT SET HEAP SPACE 1 1 1 2 1 1 1 2
  23. 23. Vorlesung Compilerbau,Wintersemester 2008/09 Reference counting 24 Reference counting Create object: • counter := 1 • return reference Duplicate reference: • counter += 1 Delete reference: Invariant: count == #refs Continuous; cost Cycles of garbage are not reclaimed v w uroot x z t y 1 2 2!1 1 1 1 1!0 ➂ Einfache GC Algorithmen
  24. 24. Vorlesung Compilerbau,Wintersemester 2008/09 Reference counting 25 Root Object A(1) E(1)D(2) B(2) C(1) ➂ Einfache GC Algorithmen
  25. 25. Vorlesung Compilerbau,Wintersemester 2008/09 Reference counting 26 Root Object A(0) E(1)D(2) B(2) C(1) ➂ Einfache GC Algorithmen
  26. 26. Vorlesung Compilerbau,Wintersemester 2008/09 Reference counting 27 ➂ Einfache GC Algorithmen Root Object E(1)D(2) B(1) C(0)
  27. 27. Vorlesung Compilerbau,Wintersemester 2008/09 Reference counting 28 ➂ Einfache GC Algorithmen Root Object E(1)D(1) B(1)Zyklische Verweise: Referenzzähler werden nie 0. memory leak
  28. 28. Vorlesung Compilerbau,Wintersemester 2008/09 Reference counting Verwalte Anzahl der Referenzen auf jedes Objekt lösche Objekt, sobald Referenzzähler 0 Bewertung des Algorithmus: inkrementell, kein“stop-the-world”effect real-time: Speicher kann sobald möglich freigegeben werden nicht vollständig: bei Zyklen kann Speicher nicht freigegeben werden nicht effizient: kurzlebige Referenzen dominieren typische Programme Update der Referenzen bei fast jeder Zuweisung Löschen kann kaskadieren (Anzahl der Löschungen/Updates nicht begrenzt) 29 ➂ Einfache GC Algorithmen Verzögertes Reference counting: periodische Updates für Verweise durch lokale Variablen.
  29. 29. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Sweep Zwei Phasen“stop-the-world”Algorithmus erst markieren aller vom Root Set erreichbaren Objekte (mark) dann aufsammeln und freigeben der nicht-markierten Objekte (sweep) Datenstrukturen: scanned: Erreichte und verarbeitete Objekte unscanned: Liste der erreichten, aber noch nicht verarbeiteten Objekte unreached: Liste der noch nicht erreichten Objekte (anfangs: alle) free: Liste der freien Speicherplätze (vereinfacht) 30 ➂ Einfache GC Algorithmen
  30. 30. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Sweep 31 ➂ Einfache GC Algorithmen unreached
= alle Objekte;
scanned
= ∅; verschiebe Root Set von unreached nach unscanned; while
(unscanned
≠ ∅) { o = nächstes Objekt in unscanned; verschiebe o von unscanned nach scanned; for all (o’ referenzierte von o) if (noch nicht erreicht) verschiebe o von unreached nach unscanned; } free = free ∪ unreached; unscanned = scanned; Baker’s Mark-and-Sweep: hier schon verbessert, nur allokierte werden inspiziert
  31. 31. Vorlesung Compilerbau,Wintersemester 2008/09 32 ➂ Einfache GC Algorithmen Prof. Aiken CS 143 Lecture 17 17 Mark-and-Sweep
  32. 32. !"#$%&'$()#$$!"#$#%&'&"() "$* *+ ,&$-.(/ !"#$%&'$()#$$ +&%""$( !"+&%""$( ),!"(-.,-/$ #$%&'$( ,/0$&.+-+&%""$( ),#-"$*-#$%&'%/1$-,/0$&.+ #$%&'$( *+ 0%(1'#&$-.(/ !"#$%&'$()#$$ +&%""$( 2131$#'"(#.4 "()-$((15'6' ! !"#$%&'$(
  33. 33. Vorlesung Compilerbau,Wintersemester 2008/09 Bewertung des Algorithmus: einfach, vollständig (keine memory leaks) zwei Läufe über den Heap erforderlich kann zu starker Fragmentierung des Speichers führen Lokalität so schlecht wie bei naïver manueller Verwaltung Objekte gleichen Alters in völlig unterschiedlichen Speicherbereichen braucht zusätzlichen Speicher (unscanned/scanned Listen) kann mit Tricks verhindert werden 34 Mark-and-Sweep: Analyse ➂ Einfache GC Algorithmen
  34. 34. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Compact Idee: verschieben erreichbarer Objekte an Beginn des Heaps Zwei Phasen“stop-the-world”Algorithmus erst markieren aller vom Root Set erreichbaren Objekte (mark) dabei berechne für jedes Objekt Adresse im kompaktierten Heap dann verschieben der erreichbaren Objekte & Verweise (compact) Datenstrukturen: free: Heap-Pegel nach Kompaktierung der bisher erreichten Objekte scanned: Erreichte und verarbeitete Objekte + newAddress unscanned: Liste der erreichten, aber noch nicht verarbeiteten Objekte 35 ➂ Einfache GC Algorithmen
  35. 35. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Compact 36 free free ➂ Einfache GC Algorithmen
  36. 36. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Compact 37 free free ➂ Einfache GC Algorithmen
  37. 37. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Compact 38 free free ➂ Einfache GC Algorithmen
  38. 38. Vorlesung Compilerbau,Wintersemester 2008/09 Mark-and-Compact 39 free free free ➂ Einfache GC Algorithmen
  39. 39. Vorlesung Compilerbau,Wintersemester 2008/09 Bewertung des Algorithmus: einfach, vollständig (keine memory leaks) bessere Lokalität als bei mark-and-sweep, keine Fragmentierung mindestens zwei Läufe über den Heap erforderlich compact Lauf deutlich langsamer als sweep Lauf braucht ebenfalls zusätzlichen Speicher (unscanned/scanned Listen) 40 ➂ Einfache GC Algorithmen Mark-and-Compact
  40. 40. Vorlesung Compilerbau,Wintersemester 2008/09 Stop-and-Copy Semispace Idee: Ein-Phasen Verschieben durch Kopieren in reservierten Bereich teile Speicher in zwei“Teilräume”ein (From- und To-Space) Durchlaufe die Erreichbaren Objekte sobald ein Objekte erreicht wird kopiere in To-Space wenn alle erreichbaren Objekte verarbeitet, vertausche From- und To-Space Datenstrukturen: newAddress: Neue Adresse eines verarbeiteten Objekts scanned: Erreichte und verarbeitete Objekte + newAddress unscanned: Liste der erreichten, aber noch nicht verarbeiteten Objekte 41 ➂ Einfache GC Algorithmen
  41. 41. Vorlesung Compilerbau,Wintersemester 2008/09 Stop-and-Copy Semispace 42 ➂ Einfache GC Algorithmen TOSPACE ROOT SET FROMSPACE
  42. 42. Vorlesung Compilerbau,Wintersemester 2008/09 Stop-and-Copy Semispace 43 TOSPACE ROOT SET FROMSPACE ➂ Einfache GC Algorithmen
  43. 43. Vorlesung Compilerbau,Wintersemester 2008/09 44 A B Scan Free C v) A B Scan Free i) ii) iii) iv) A B Scan Free C D A B Scan Free C D E A B Scan Free C D E F A B Scan Free C A C D E F B Scan Free A B ROOT SET i) ii) iii) iv) A B Scan Free C D Cheney Algorithm Kopieren mit Breitensuche Datenstrukturen: newAddress scanned & unscanned fallen weg
  44. 44. Vorlesung Compilerbau,Wintersemester 2008/09 Bewertung des Algorithmus: nur ein Lauf über den Heap erforderlich kaum zusätzlichen Speicher (Cheney) bessere Lokalität als bei mark-and-sweep, keine Fragmentierung immer noch“stop-the-world”Algorithmus halber Speicher bleibt ungenutzt 45 ➂ Einfache GC Algorithmen Stop-and-Copy Semispace
  45. 45. Vorlesung Compilerbau,Wintersemester 2008/09 Stop-and-Copy Semispace 46 ➂ Einfache GC Algorithmen
  46. 46. ➌ “Stop-the-World” Einfache GC Algorithmen
  47. 47. ➍ Partitionierende GC Algorithmen Inkrementelle & Generationelle
  48. 48. Vorlesung Compilerbau,Wintersemester 2008/09 Typen & Klassifikation von GC Algorithmen 49 Garbage Collectors Reference­ Counters Trace­ Based Stop­the­World Short­Pause Mark­and­ Sweep Mark­and­ Compact Basic Baker’s Basic Cheney’s Incremental Partial Generational Train ➃ Partitionierende GC Algorithmen
  49. 49. Vorlesung Compilerbau,Wintersemester 2008/09 Inkrementelle Garbage Collection Idee: garbage collection parallel zu Programmausführung immer wenn Daten unerreichbar werden, gleich freigeben Idee: trace-based wie Mark-and-… aber Objekte die einmal scanned
sind werden nicht mehr erneut betrachtet Jedes Objekt ist immer gerade: scanned: erreichte und verarbeitete unscanned: erreicht, aber noch nicht verarbeitetet unreached: noch nicht erreicht, aber erreichbar unreachable: unerreichbar 50 ➃ Partitionierende GC Algorithmen
  50. 50. Vorlesung Compilerbau,Wintersemester 2008/09 Inkrementelle Garbage Collection 51 I. Incremental GC s GC with mutator action to reduce pause time Ideal = (R ! New) " Lost (R ! New) " Lost # Answer # (R ! New) data scanned unscanned unreached tor new unreachable R (reachable) ideal lost mes run ator I. Incremental GC • Interleaves GC with mutator action to reduce pause time kinds of data scanned unscanned unreached after the mutator new unreachable R (reachable) ideal lost resumes has run before mutator ➃ Partitionierende GC Algorithmen
  51. 51. Vorlesung Compilerbau,Wintersemester 2008/09 Inkrementelle Garbage Collection 52 Before After A B C D B C D A ➃ Partitionierende GC Algorithmen
  52. 52. Vorlesung Compilerbau,Wintersemester 2008/09 53 • All reaching pointers are found in “scanned objects” • Requires the occurrence of a 3-step sequence in the mutator: Scanned Unscanned / Unreached Unreached 0. after a stage of GC A B C 1. Load p = ptr from B to C 3. Store new pointer in B, 2. Store p in A overwriting value p pp p ➃ Partitionierende GC Algorithmen
  53. 53. Vorlesung Compilerbau,Wintersemester 2008/09 54 anced Compilers 7 L15: Advanced Garbage Collec • Intercept p in any of the three-step sequence • Treat pointee of p as “unscanned” Scanned Unscanned / Unreached Unreached 0. after a stage of GC A B C 1. Load p = ptr from B to C 3. Store new pointer in B, 2. Store p in A overwriting value p pp p Read barrier: remember all loads of pointers from B ! C Write barrier: remember all stores of pointers A ! C Overwrite barrier: remember all overwrites of pointer B ! C ➃ Partitionierende GC Algorithmen
  54. 54. Vorlesung Compilerbau,Wintersemester 2008/09 Write Barrier am effizientesten wird seltener aktiv als Read Barrier weniger starke Approximation als Over-write Barrier (weniger irrtümlich reached Objekte) Optimierung: alloziere Objekte als white/unreachable → short-lived Bewertung des Algorithmus: kein“stop-the-world”effect verwenden Speicher während der gesamten Laufzeit nur konservative Approximation aus Effizienzgründen 55 ➂ Einfache GC Algorithmen Inkrementelle Garbage Collection
  55. 55. Vorlesung Compilerbau,Wintersemester 2008/09 Generationelle Garbage Collection Grundidee: Partitioniere Objekte in stable
und target
Mengen GC nur auf Objekten in target Objekten Root Set für target
:= allgemeines Root Set + Verweise aus stable dazu: Schreibzugriffe auf stable
abfangen 56 ➃ Partitionierende GC Algorithmen II. Partial GC • Reduces pause time by collecting only objects in the target area: Stable set Target set ignore used in tracing ignore include in root set
  56. 56. Vorlesung Compilerbau,Wintersemester 2008/09 57 Generationelle Garbage Collection ➃ Partitionierende GC Algorithmen
  57. 57. Vorlesung Compilerbau,Wintersemester 2008/09 Generationelle Garbage Collection Root Set(i) := Root Set(Program) + Zeiger von j to i mit j > i GC für Generation i falls Heap-Space für diese Generation verbraucht 58 Generational GC bservation: objects die young • 80-98% die within a few million instructions or before 1 MB has been allocated enerational GC: collect newly allocated objects more often h generation targetstable 1st 2nd 3rd 4th remembered sets ➃ Partitionierende GC Algorithmen
  58. 58. Vorlesung Compilerbau,Wintersemester 2008/09 Generationelle Garbage Collection 59 Younger Generation Older Generation ROOT SET Younger Generation Older Generation ROOT SET ➃ Partitionierende GC Algorithmen Semispace Stop-and-Copy
  59. 59. Vorlesung Compilerbau,Wintersemester 2008/09 Generationelle Garbage Collection 60 Second Generation Memory First (New) Generation Memory ➃ Partitionierende GC Algorithmen Semispace Stop-and-Copy
  60. 60. Vorlesung Compilerbau,Wintersemester 2008/09 Generationelle Garbage Collection Wie definieren wir eine Generation? Objekt o von i nach i+1 bei jedem Traversieren im GC von i auf o? schnell, geringer Overhead; aber: Objekte“altern”zu schnell z.B.: bei jedem zweiten Traversieren hängt auch von Zahl der Generationen ab viele Generationen = häufiger“altern” 61 ➃ Partitionierende GC Algorithmen
  61. 61. Vorlesung Compilerbau,Wintersemester 2008/09 62 percent surviving never copied percent surviving until scavenge 2 -/ percent surviving until scavenge 3 J’ COpid twice (advanced to next generation)1 -1 scavenge 0 scavenge 1 scavenge 2 scavenge 3 Time of data allocation FIGURE 2b. Copying cost with two-scavenge advancement threshold ➃ Partitionierende GC Algorithmen
  62. 62. Vorlesung Compilerbau,Wintersemester 2008/09 63 0 10 20 30 40 50 60 70 80 90 100 null compress db jack javac jess mpegaudio mtrt bh bisort em3d health mst perimeter power treeadd tsp voronoi ipsixql jigsaw nfc xalan average Shortlived Longlived Quasi immortal Truly immortal (a) In percent of all allocated objects. Table 3: Escap jects). The nu jects where the Benchmark null compress db jack javac jess mpegaudio mtrt bh bisort em3d health mst perimeter power treeadd tsp voronoi ipsixql jigsaw nfc xalan average Figure 2(a) show only shows data From Figure 2
  63. 63. Vorlesung Compilerbau,Wintersemester 2008/09 64 0 10 20 30 40 50 60 70 80 90 100 null compress db jack javac jess mpegaudio mtrt bh bisort em3d health mst perimeter power treeadd tsp voronoi ipsixql jigsaw nfc xalan average Shortlived Longlived Quasi immortal Truly immortal (a) In percent of all allocated objects. 0 10 20 30 40 50 60 70 80 90 100 1 10 100 1000 10000 100000 10MB 20MB SCCsize[objects] Figu Column “Write b the write barrier for timing data for jigsa Write barrier overh (v2.0.2) FastSemisp machine. The write store buffer. Becaus programming langu of the application,
  64. 64. Vorlesung Compilerbau,Wintersemester 2008/09 65 o1 o2 o4 o3 o5 o6 o7 o8 p1 p2 p3 ure 1: Example partitioning. Solid boxes are ects, solid arrows are pointers, dashed ovals are titions, and dashed arrows are partition edges. Partial GC partial garbage collection is a GC of only a portion he heap, such as when one or more young generations collected in a generational collector.2 Because they do examine the entire heap, partial GCs usually take less related, but different, term is incremental GC. Partial r global variable that h m(o) ∈ C, color that in topological order: bject, ith m(o) = q. field of o that points to olor that object gray. n q. ch partition q ∈ C in sures that C is closed opological order guar- a partition q, all prede- been visited. ly the unreachable ob- this choice: the estimator estimates how many o dead and live in each partition, and the chooser set of partitions where, based on the estimates, to collect a sufficient amount of garbage at low c The task of the estimator is to annotate each p ∈ P with two integers dead(p) and live(p) as Figure 2. p1 p2 p3 p4 p5 dead(p) : live(p) 1:12 6:3 10:3 2:2 4:3
  65. 65. ➍ Partitionierende GC Algorithmen Inkrementelle & Generationelle
  66. 66. Vorlesung Compilerbau,Wintersemester 2008/09 Typen & Klassifikation von GC Algorithmen 67 Garbage Collectors Reference­ Counters Trace­ Based Stop­the­World Short­Pause Mark­and­ Sweep Mark­and­ Compact Basic Baker’s Basic Cheney’s Incremental Partial Generational Train ➃ Partitionierende GC Algorithmen
  67. 67. Fragen?
  68. 68. Vorlesung Compilerbau,Wintersemester 2008/09 Literatur zur Interprozeduralen Zeigeranalyse Basiswissen: Aho, Lam, Sethi, Ullman: “Compilers”, 2nd Edition, Kapitel 7.5–7.7 Weiterführende Literatur: Wilson, P. R. 1992. Uniprocessor Garbage Collection Techniques. In Proc. International Workshop on Memory Management (September 17 - 19, 1992). Y. Bekkers and J. Cohen, Eds. Lecture Notes In Computer Science, vol. 637. Springer-Verlag, London, 1-42. 69 Fragen

×