Sobes.tech
Junior

Wat is de garbage collector in C#?

sobes.tech AI

Antwoord van AI

De garbage collector in C# is een geautomatiseerd proces voor geheugenbeheer. Het vrijwaart geheugen dat wordt ingenomen door objecten die niet meer door de applicatie worden gebruikt.

Belangrijke aspecten:

  • Automatisch beheer: De ontwikkelaar hoeft niet handmatig geheugen toe te wijzen of vrij te geven voor de meeste objecten. De CLR (Common Language Runtime) doet dit automatisch.
  • Referentie tracking: De garbage collector bepaalt welke objecten toegankelijk zijn vanaf de root-bronnen (bijvoorbeeld, thread stacks, statische velden). Objecten zonder referenties vanaf deze bronnen worden als onbereikbaar beschouwd en verzameld.
  • Generaties: De heap wordt verdeeld in generaties (0, 1 en 2). Objecten die "overleven" na de verzameling worden verplaatst naar hogere generaties. Dit optimaliseert het proces, omdat de meeste objecten kort leven.
  • Finalisatie: Objecten kunnen een Finalize-methode hebben, die wordt aangeroepen door de garbage collector voordat het geheugen wordt vrijgegeven. Gebruikt voor het opruimen van niet-beheerde bronnen, maar het gebruik ervan is beperkt door de onvoorspelbare uitvoeringstijd.
  • Compactie: Na de verzameling kan de garbage collector de overlevende objecten verschuiven om geheugenfragmentatie te verminderen.
// Voorbeeld van het maken van een object op de beheerde heap
MyClass obj = new MyClass();
// Wanneer er geen referenties meer naar obj zijn, kan de garbage collector het geheugen vrijmaken

// Voorbeeld van handmatig vrijmaken van niet-beheerde bronnen met IDisposable en using
// Aanbevolen aanpak in plaats van Finalize
using (var resource = new UnmanagedResourceWrapper())
{
    // Gebruik van de bron
} // Hier wordt resource.Dispose() aangeroepen, waardoor de niet-beheerde bron wordt opgeruimd