170 likes | 293 Views
Garbage collection. De rommel van de programmeur. Pieter van Ede. Handmatig geheugenbeheer. Programmeur gooit zelf objecten weg Veel fouten mee gemaakt Geheugenlekken ‘ Dangling pointers’. Geheugenlek. Object A. Object B. Object C. ‘ Dangling pointers’. Object A. Object B.
E N D
Garbagecollection De rommel van de programmeur Pieter van Ede
Handmatig geheugenbeheer • Programmeur gooit zelf objecten weg • Veel fouten mee gemaakt • Geheugenlekken • ‘Dangling pointers’
Geheugenlek Object A Object B Object C
‘Dangling pointers’ Object A Object B Object C
Automatisch geheugenbeheer Ofwel garbagecollection Uitgevonden door John McCarthy in 1959
Referencecounting • Ieder object krijgt teller • Object wordt verwijderd als teller 0 wordt. 1 1 Object A Object B 2 Object C 0 1
Perfecte oplossing? Voordelen Nadelen • Makkelijk te implementeren • Objecten verwijderd zodra niet meer nodig • Detectie dode objecten tegelijk met uitvoer programma • Objecten worden opgeblazen • Veel administratie • Problemen met cyclische verwijzingen
Cyclische verwijzingen 1 Object A 1 1 Object B 2 Object C
Tracinggarbagecollection • Geen administratie per object • Lijst van alle objecten • Eens in zoveel tijd garbage collecten
Tracinggarbagecollection (2) Object A Object B Object C Object D Object E Object A Object C Object B Object D Object E
Nu wel perfecte oplossing? Voordelen Nadelen • Weinig administratie • Alle onbereikbare objecten worden verwijderd • Programma moet stoppen tijdens garbagecollection • Hele geheugen moet (meerdere malen) worden doorzocht per scan
Drie-kleuren markering • Om deze nadelen op te lossen, ander algoritme bedacht • Alle objecten in drie disjuncte verzamelingen verdeeld • wit – veroordeeld • zwart – geen verwijzingen naar wit • grijs – overig • Belangrijke invariant: geen object in zwart verwijst naar een object in wit
Drie-kleuren markering (2) Object C Object A Object D Object B
Nog perfectere oplossing? Voordeel: • Garbagecollection kan ‘on the fly’ door set-administratie bij te houden
Movingvsnon-moving Non-moving Moving • Object dat weg kan gewoon weggooien • Alle bereikbare objecten naar ander deel van het geheugen kopiëren • Alle verwijzingen updaten
Movingvsnon-moving (2) Moving Non-moving • Na kopiëren objecten hele oude geheugen snel vrij te geven • Steeds veel ruimte om nieuwe objecten te plaatsen • Bij goede verplaatsing objecten, veelgebruikte objecten dicht bij elkaar in geheugen, beter voor cache • Ieder onbereikbaar object afgaan en markeren als bruikbaar geheugen • Geheugen kan sterk gefragmenteerd raken