180 likes | 276 Views
Mark – Compact GC & Performancemessungen. Bernhard Prügl, 0156212. Inhalt. Motivation für Mark – Compact Algorithmenüberblick 4 Algorithmen im Detail Zusammenfassung Algorithmen Performance der verschieden Garbage Collection Strategien. Motivation für Mark – Compact.
E N D
Mark – Compact GC & Performancemessungen Bernhard Prügl, 0156212
Inhalt • Motivation für Mark – Compact • Algorithmenüberblick • 4 Algorithmen im Detail • Zusammenfassung Algorithmen • Performance der verschieden Garbage Collection Strategien
Motivation für Mark – Compact • Lange Programmlaufzeit führt zu Fragmentierung, welche folgende Probleme verursacht: • Aufwand zum Anlegen neuer Objekte steigt • Speicher wird nicht optimal ausgenützt • Nacheinander angelegte Objekte oft nicht nebeneinander • Mark-Compact reduziert diese Probleme
Algorithmenüberblick Grundsätzliche 3 Phasen: • Markieren der lebendigen Knoten. • Kompaktierung des Speichers (Knoten verschieben). • Aktualisieren der Zeiger auf verschobene Knoten. Kriterien anhand derer eine Einteilung möglich ist: • Einteilung nach Art wie verschobene Knoten angeordnet werden. • 2 oder 3 Durchläufe zum Kompaktieren. • Einteilung nach zusätzlich benötigten Speicher • Weitere Anforderungen, z.B. nur Knoten gleicher Größe
Zwei Finger Algorithmus • 2 Zeiger • "free" sucht freien Speicher • "live" sucht lebendige Knoten • "live" wird auf "free" verschoben • Neue Adresse wird in "live" hinterlassen
Lisp 2 Algorithmus (1/2) • Adressenweiterleitend • Zusätztliche Speicherzelle im Header jedes Knoten • "free" läuft von Anfang bis Ende • Neue Adresse wird in Header jedes Knoten geschrieben
Lisp 2 Algorithmus (2/2) • 2.Durchlauf: interne Zeiger aktualisieren anhand der Adresseinträge in den Headern • 3.Durchlauf: Knoten tatsächlich verschieben
Haddon-Waite Algorithmus (1/2) • Tabellenbasiert • Zeiger durchläuft Speicher von Anfang bis Ende • Knoten werden sofort verschoben • Information über Verschiebung in Tabelle eintragen
Haddon-Waite Algorithmus (2/2) • Tabelle am Ende des bearbeiteten Bereichs wird bei Bedarf verschoben • Am Ende muss Tabelle sortiert werden • 2. Durchlauf: interne Zeiger mit Hilfe der Tabelle aktualisieren
Threading • Zeiger werden verbogen durch tauschen der Inhalte • P enthält eine Liste mit allen Zeigern die auf P zeigen • Info im letzten Knoten
Jonkers Algorithmus (1/2) • Threaded • Zuerst vorwärtszeigende Zeiger threaden • Wird P erreicht werden alle schon gethreadeden Knoten aktualisiert
Jonkers Algorithmus (2/2) • Vorwärtszeigende Zeiger zeigen jetzt auf zukünftiges P • Rückwärtszeigende Zeiger werden gethreaded • 2. Durchlauf: Knoten verschieben • Alle rückwärtszeigenden Zeiger aktualisieren
Überblick • Geeigneter Algorithmus muss entsprechend Vorgaben gewählt werden.
Performance • Performancemessungen in GC Bereich • Messungen auf AMD Athlon XP 2600+, ausgeführt von Stephen M Blackburn, 2004 3 Graphiken: • Laufzeitmessungen des gesamten Programms und der Garbage Collection allein • Cache Misses bei verschiedenen GC Strategien • Performance in Generationensystemen
Laufzeitmessungen X-Achse: Heap Größe Y-Achse: Zeit
Cache Misses X-Achse: Heap Größe Y-Achse: Zeit (a) / Cache Misses (b - d)
Performance in Generationensystemen X-Achse: Speichergröße für neue Objekte Y-Achse: Zeit (a-c) / Cache Misses (d-f)