• Keine Ergebnisse gefunden

Mark – Compact GC & Performancemessungen

N/A
N/A
Protected

Academic year: 2022

Aktie "Mark – Compact GC & Performancemessungen"

Copied!
18
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Mark – Compact GC &

Performancemessungen

Bernhard Prügl, 0156212

(2)

Inhalt

Motivation für Mark – Compact

Algorithmenüberblick

4 Algorithmen im Detail

Zusammenfassung Algorithmen

Performance der verschieden Garbage

Collection Strategien

(3)

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

(4)

Algorithmenüberblick

Grundsätzliche 3 Phasen:

1. Markieren der lebendigen Knoten.

2. Kompaktierung des Speichers (Knoten verschieben).

3. 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

(5)

Zwei Finger Algorithmus

2 Zeiger

"free" sucht freien Speicher

"live" sucht lebendige Knoten

"live" wird auf "free"

verschoben

Neue Adresse wird in

"live" hinterlassen

(6)

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

(7)

Lisp 2 Algorithmus (2/2)

2.Durchlauf: interne Zeiger aktualisieren anhand der

Adresseinträge in den Headern

3.Durchlauf:

Knoten tatsächlich

verschieben

(8)

Haddon-Waite Algorithmus (1/2)

Tabellenbasiert

Zeiger durchläuft

Speicher von Anfang bis Ende

Knoten werden sofort verschoben

Information über Verschiebung in Tabelle eintragen

(9)

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

(10)

Threading

Zeiger werden verbogen durch tauschen der Inhalte

P enthält eine Liste mit allen Zeigern die auf P zeigen

Info im letzten

(11)

Jonkers Algorithmus (1/2)

Threaded

Zuerst

vorwärtszeigende Zeiger threaden

Wird P erreicht

werden alle schon gethreadeden

Knoten aktualisiert

(12)

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

(13)

Überblick

Geeigneter Algorithmus muss entsprechend

Vorgaben gewählt werden.

(14)

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

(15)

Laufzeitmessungen

X-Achse: Heap Größe Y-Achse: Zeit

(16)

Cache Misses

(17)

Performance in

Generationensystemen

X-Achse: Speichergröße für neue Objekte

(18)

Danke für eure Aufmerksamkeit

Referenzen

ÄHNLICHE DOKUMENTE

Beob: Klassen definieren nur Slots, keine Methoden Grund: CLOS assoziiert Methoden nicht mit Klassen Stattdessen: Generische Funktionen.. • Funktion, die auf

Beob: Klassen definieren nur Slots, keine Methoden Grund: CLOS assoziiert Methoden nicht mit Klassen Stattdessen: Generische Funktionen. • Funktion, die auf

Wir halten diesen Typ für so allgemein bekannt, daß er nicht noch weiter zergliedert werden muß, obwohl dies ohne weiteres möglich wäre, z.B.: Zahl ist eine Folge von Ziffern,

Die Definition sollte so nahe wie möglich am Euklid’schen Algorithmus sein: man zieht solange die kleinere von der größeren Zahl ab, bis eine der beiden Zahlen 0 ist; dann ist

set lispval.. This type is used mainly by arrays of general lisp objects. Value cells are created with the ptr function. The access time for an element of a

It returns a temporary pvar containing in each active processor the arc hyperbolic tangent in radians of the corresponding value of numeric-pvar. The

It returns a temporary pvar containing in each active processor the arc sine in radians of the corresponding value of numeric-pvar. Similarly, the asinh!l function calculates the

*Lisp compiler, but users of the *Lisp compiler will also want to consult the chapters on type declaration and compiler options in the *Lisp Dictionary, the chapter describing the