• Keine Ergebnisse gefunden

Die Idee hinter Copying Garbage Collection (1)

N/A
N/A
Protected

Academic year: 2022

Aktie "Die Idee hinter Copying Garbage Collection (1)"

Copied!
64
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Die Idee hinter Copying Garbage Collection (1)

Aufteilung des Heaps in zwei Teile:

To-Space und From-Space

Nutzung eines Teiles durch das Programm

Ist der Heap(-Teil) aufgebraucht, findet Garbage Collection statt und das Programm wird anschliessend im anderen Teil fortgesetzt

(2)

Die Idee hinter Copying Garbage Collection (2)

1. Vertauschen der beiden Hälften (From-Space, To-Space)

2. Kopieren der Objekte aus der root-set in den To-Space

3. Scannen der Objekte im To-Space und ggf. Kopieren referenzierter Objekte bzw. Korrektur der Referenzen

(3)

Cheneys Copying Collector (1)

Iterativer Algorithmus

Verbindet Kopieren und Scannen

Verwendet zwei Zeiger: scan / free

Forwarding-Zeiger um „Sharing“ zu garantieren

„The tricolour abstraction“

(4)

Cheneys Copying Collector (2)

Der Algorithmus:

(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
(37)
(38)
(39)
(40)
(41)
(42)
(43)
(44)
(45)
(46)
(47)
(48)
(49)
(50)
(51)
(52)
(53)
(54)

Allokation

CPU-Kosten von stop-and-go Garbage Collection

niedrig, da nur aktive Knoten besucht werden und das Kopieren von kleinen Objekten billig ist

Überprüfen des Speichers im Semispace

Inkrementieren des free Zeigers

Rückgabe der neuen Adresse

(55)

Multiple-Area Collection

Statische Bereiche (static area)

Bereiche für grosse Objekte (large object area)

„Compacting Garbage Collection“:

(56)

Effizienz

R … Anzahl der erreichbaren Knoten c … Konstante (abhängig von der Zelle) M ...Grösse eines Semi-Space

s … Grösse einer Zelle

g … CPU-Kosten pro Garbage Collection einer Zelle

(57)

Lokalität

Falsche Strategie zerstört die Lokalität (z.B.: Cheney‘s breadth-first search)

Richtige Heap-Grösse wählen

Paging

Unterstützung durch Betriebssystem

(58)

Umgruppierungsstrategien

Depth-first vs Breadth-first Copying

„Stackless recursive copying collection“

„Approximately depth-first copying“

„Hierarchical decomposition“

„Hash tables“

(59)

Stackless recursive copying collection

Grundeinheit der Heap Allokation ist ein „frame of closures“ von variabler Länge

Jedes „closure“ enthält einen Code-Zeiger und einen Zeiger auf einen Heap-Rahmen

Rekursiv, aber Rekursionsstack liegt in bereits besuchten From-Space „closures“

(60)

Approximately Depth-first Copying

Es wird immer an der zuletzt teilweise gefüllten Seite im To-Space fortgesetzt

Partial untersucht die Seite am Ende von To-Space (benutzt Breitensuche)

Ist Partial fertig, wird übliche Breitensuche fortgesetzt und To-Space Objekte eingelesen

(61)

Hierarchical decomposition

Ähnlich wie „Approximately depth-first copying“

4 Zeiger (2 Scan, 2 Free)

Nur für Baumstrukturen empfehlenswert

(62)

Hash tables

Traversieren vermeiden

Lineare Liste globaler Variablen

Objekte nach Entstehung geordnet

Liste wird von Garbage Collection verwendet

Collector erreicht Objekte in der Erzeugungsreihenfolge

Gute Lokalität

(63)

Copying Collection – Ja oder Nein?

Ja wenn

Speicherverwaltung von Allokation dominiert wird

Es viele kleine, kurzlebige Objekte gibt

Die Verzögerung durch GC keine Rolle spielt

Alternative:

•Hybrides System: ein Teil wird von einem Copying Collector behandelt, ein anderer Teil vom z.B. Mark- Sweep oder Mark-Compact

Copying Garbage Collection bildet die Grundlage für andere Verfahren. Generationale und inkrementelle Garbage

Collection bauen auf Copying auf.

(64)

Danke für Ihre Aufmerksamkeit!

FRAGEN ?

Referenzen

ÄHNLICHE DOKUMENTE

• garbage collection: Speicherplatz nicht mehr referenzierter Objekte wird wieder freigegeben!. beachte: unreferenziertes Objekt kann (eigentich) nicht mehr referenziert werden; in

G1 stops the application threads for young collections, initial and finishing marks of old collection and does the rest of the GC concurrently except for compacting the old

 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

Das Reference Counting ist das älteste Verfahren und ich möchte es nur der Vollständigkeit halber kurz erwähnen, da es nur mehr in Spezialfällen verwendet wird. In Java wird nicht

 Objekte im F-reachable Queue können noch NICHT freigegeben werden, da erst ihre Finalize-Methode aufgerufen werden muß..

 Objekte so anlegen, dass blacklisted Referenz nicht in das Objekt zeigt (interior pointers...).  Erste Collection bevor Speicher

Außerdem kann eine Softwarevariante, die als Standard einen generationellen Collector verwendet leicht so angepasst werden, dass der Collector der alten Generation

Man muss immer noch an Computern denken, die nicht Multicore sind und GCs für Echtzeitsystemen (Es gibt solche GCs aber hier wurden sie nicht genannt) müssen weitergeforscht werden.