Sobes.tech
Junior

Ce este colectorul de gunoi (Garbage Collector) în C#?

sobes.tech AI

Răspuns de la AI

Colectorul de gunoi în C# face parte din mediul de execuție .NET (CLR), care gestionează automat memoria eliberând resursele ocupate de obiectele care nu mai sunt accesibile.

Principii de funcționare:

  • Urmărirea obiectelor: Colectorul de gunoi urmărește obiectele create în heap-ul gestionat.
  • Determinarea accesibilității: Determină care obiecte sunt accesibile pentru codul în execuție (adică, au referințe valide).
  • Colectarea obiectelor inaccesibile: Obiectele care nu mai sunt accesibile sunt considerate "gunoi" și pot fi eliminate în siguranță.

Procesul de colectare include:

  1. Marcarea (Marking). GC scanează stiva și registrele pentru a găsi rădăcini (obiecte rădăcină). De la rădăcini, parcurge graful obiectelor și marchează cele accesibile.
  2. Compactarea (Compacting). Permite reducerea fragmentării memoriei. GC mută obiectele accesibile într-un bloc de memorie contiguu, lăsând spațiu liber.
  3. Curățarea (Sweeping). Obiectele inaccesibile (ne-marcate) sunt eliminate, iar memoria lor este eliberată.

Caracteristici principale:

  • Gestionare automată: Elimină responsabilitatea manuală a dezvoltatorului pentru eliberarea memoriei.
  • Generații: Heap-ul este împărțit în generații (Gen 0, Gen 1, Gen 2). Acest lucru optimizează colectarea, deoarece majoritatea obiectelor devin gunoi rapid. Obiectele noi sunt create în Gen 0. Dacă un obiect supraviețuiește colectării în Gen 0, este mutat în Gen 1 și așa mai departe.
  • Finalizatori și eliberare: GC nu garantează executarea imediată a finalizatorilor pentru obiectele care implementează IDisposable. Pentru eliberarea resurselor nesupravegheate, trebuie folosit un mecanism explicit (Dispose(), declarația using).
// Exemplu de utilizare a declarației using pentru eliberarea explicită a resurselor
using (var stream = new System.IO.FileStream("temp.txt", System.IO.FileMode.Create))
{
    // Lucru cu fișierul
} // stream.Dispose() va fi apelat automat