Java Garbage Collection
Angelika Kusel, 0055089
Überblick
Was ist Garbage Collection?
Vor- und Nachteile von GC
GC-Algorithmen/Verfahren
Java Garbage Collection
Anpassung des Java GCs an die eigene
Anwendung
Was ist Garbage Collection?
automatische Erkennung und Freigabe von nicht mehr referenzierten Objekten
somit zurück gewonnener Speicher steht dem System wieder zur Verfügung
a b a = b; a b
Vor- und Nachteile
Vorteile:
kein explizites Freigeben von Speicher nötig
Beseitigung von folgenden Fehlerquellen
zu frühe Freigabe (Dangling Pointer)
gar keine Freigabe Nachteile:
zusätzlicher Overhead, der vom
Laufzeitsystem bewältigt werden muss
GC-Algorithmen/Verfahren (1/2)
2 grundsätzliche Aufgaben:
„Garbage“-Objekte erkennen
Speicherplatz dem Programm wieder zugänglich machen
„lebendige“ Objekte sind solche, die von einem Wurzelzeiger aus erreicht werden können
Wurzelzeiger finden sich in:
lokalen Variablen am Stack
in globalen (statischen) Variablen
in Registern
Heap
GC-Algorithmen/Verfahren (2/2)
Reference Counting -> ältestes Verfahren, nicht in Java verwendet
Mark and Sweep
Mark and Compact
Stop and Copy
Generation Scavenging
Train Algorithmus
Mark and Sweep
2 Phasen: mark-Phase und sweep-Phase
mark-Phase:
Markierung aller von den Wurzelzeigern aus erreichbaren Objekte
sweep-Phase:
sequentieller Heap-Durchlauf
Zurücksetzen der Markierung
Freigabe von unmarkierten Objekten
Mark and Compact
-> verdichtende Variante von Mark and Sweep 1) mark();
2) berechne für jeden markierten Block die Zieladresse nach Verdichtung
3) Biege Wurzelzeiger und die Zeiger in den Blöcken auf die neue Zieladresse um
4) Verschiebe die Blöcke auf die neue Zieladresse
0 32 64
Stop and Copy (1/2)
to Space
unbenützt
from Space
a b c d e f
to Space from Space
a b c d e f a d
from Space
a b c d e f
to Space
a d c
scan free
scan == free
Stop and Copy (2/2)
Vorteile:
verdichtendes Einpaß-Verfahren
(vgl. Mark and Compact: 1 Mark-Phase plus 3 Sweep-Phasen)
Laufzeit abhängig von der Anzahl der lebenden Objekte (bei Mark and Sweep: abhängig von
Heapgröße) Nachteile:
nur die Hälfte des Heaps kann verwendet werden
das Kopieren der Objekte kostet Zeit
Generation Scavenging
Variante des Stop and Copy
Unterscheidung zwischen kurzlebigen und langlebigen Objekten
newFrom newTo
oldFrom oldTo
Wurzelzeiger
Train Algorithmus (1/5)
inkrementelles Verfahren
der gesamte Heap ist in Blöcke gleicher Größe unterteilt
bei jedem Aufruf wird 1 Block mit dem Stop and Copy Verfahren bereinigt (jeweils der erste Waggon im Zug mit der niedrigsten Nummer)
1.1 1.2 1.3 1.4
2.1 2.2 2.3
Zug 1
Zug 2
Train Algorithmus (2/5)
Welche Objekte müssen kopiert werden?
Wohin werden die Objekte kopiert?
-> abhängig davon, von wo das Objekt erreicht wird
von Wurzelzeiger: in den letzten Waggon des letzten Zugs (nicht erster Zug), wenn voll -> neuer Zug
von einem Waggon des Zugs z: in den letzten Waggon des Zugs z, wenn voll -> neuer Waggon im Zug z
a b c d e f
Remembered Sets c d Wurzelzeiger
Train Algorithmus (3/5)
R
A C
S
D E
T F
B
B, F
S
D E
T F
B
C, R
R A
C
Annahme: max. 3 Objekte finden in einem Waggon Platz
Train Algorithmus (4/5)
T F
B
E, S
R A
C
S
D E
Train Algorithmus (5/5)
B
C
R A
S
D E
T
F
C
B A
Aufbau in Java Hotspot VM 1.3.1
vereinigt mehrere Verfahren
newSpace
oldSpace
nursery
from to
Survivor Space Survivor Space
Heap
Anlage neuer Objekte
Platz für lang- lebige Objekte
Mark and Compact (default) oder Train Algorithmus
ab Java Hotspot VM 1.4.1
2 zusätzliche parallele GC-Verfahren (für parallele Anwendungen)
Für die junge Generation
Parallel Collector (paralleles Stop &
Copy - Verfahren)
Für die alte Generation
Concurrent Mark & Compact Collector
Anpassung des GCs
-Xincgc
Umschaltung auf Train Algorithmus
-XX:+UseParallelGC
Umschaltung auf parallele GC
-verbose:gc bzw. –Xloggc:file
erzeugt Ausgabe bei jedem GC-Lauf (zur Analyse des Verhaltens des GCs)