Sobes.tech
Middle

Vertel over de methoden van garbage collection (Garbage Collector).

sobes.tech AI

Antwoord van AI

Methoden voor garbage collection:

  • Referentietelling (Reference Counting): Elk object houdt een teller bij van het aantal referenties naar zichzelf. Wanneer de teller nul wordt, wordt het object als afval beschouwd en verwijderd.
    • Voordelen: Eenvoudig, blokkeert de hoofduitvoering niet lang.
    • Nadelen: Kan niet omgaan met cyclische referenties; vereist extra ruimte voor de teller in elk object.
  • Tracing Garbage Collectors (Tracing Garbage Collectors): Beginnen met een set "kruispunten" (bijvoorbeeld actieve variabelen, call stack) en doorlopen recursief alle objecten die vanaf deze kruispunten bereikbaar zijn. Onbereikbare objecten worden als afval beschouwd.
    • Belangrijkste traceerstrategieën:
      • Mark and Sweep (Markeren en vegen):
        1. Markeren (Mark): Loop door de objectgrafen, markeer alle bereikbare objecten.
        2. Vegen (Sweep): Tweede loop door het geheugen, verwijder alle niet-gemarkeerde objecten.
        • Nadelen: Geheugenfragmentatie.
      • Mark and Compact (Markeren en comprimeren):
        1. Markeren (Mark): Zoals in Mark and Sweep.
        2. Comprimeren (Compact): Verplaatst levende objecten zodat ze aaneengesloten liggen, waardoor fragmentatie wordt geëlimineerd.
        • Nadelen: Complexer, kan stoppen van de uitvoering vereisen.
      • Copying (Kopiëren): Verdeelt het geheugen in twee gebieden (half-ruimtes). Bij elke garbage collection worden levende objecten uit één gebied gekopieerd naar het andere. Vervolgens wordt het oude gebied volledig leeggemaakt.
        • Voordelen: Geen fragmentatie, snelle geheugenallocatie na de collectie.
        • Nadelen: Vereist twee keer zoveel geheugen als actief gebruikt.
  • Generationele Garbage Collection (Generationele Garbage Collection): Gebaseerd op de hypothese dat de meeste objecten niet lang leven. Het geheugen wordt verdeeld in generaties (jong, oud). Objecten worden bij creatie in de jonge generatie geplaatst. Als een object meerdere collecties in de jonge generatie overleeft, wordt het verplaatst naar de oude generatie. Collecties in de jonge generatie gebeuren vaker.
    • Voordelen: Efficiënt, omdat het grootste deel van het werk in de jonge generatie wordt gedaan met weinig gegevens.
    • Nadelen: Vereist het volgen van referenties van oude naar jonge generaties (kaartjes of andere mechanismen).

Voorbeelden van talen en hun GC:

  • Python: Reference Counting (met cyclische verzameling voor cyclische referenties).
  • Java, C#: Generationeel, Mark and Sweep, Mark and Compact, Copying (verschillende varianten en combinaties afhankelijk van versie en instellingen JVM/.NET).
  • Go: Concurrerend, niet-generationeel, Mark and Sweep met optimalisaties.