Sobes.tech
Junior

Čo je zberač odpadu (Garbage Collector) v C#?

sobes.tech AI

Odpoveď od AI

V C# je garbage collector súčasťou prostredia spustenia .NET (CLR), ktoré automaticky spravuje pamäť uvoľnením zdrojov obsadených objektmi, ktoré už nie sú dostupné.

Princípy fungovania:

  • Sledovanie objektov: Garbage collector sleduje objekty vytvorené v riadenej halde.
  • Určenie dostupnosti: Určuje, ktoré objekty sú dostupné pre bežiaci kód (t.j. majú platné odkazy).
  • Zber nedostupných objektov: Objekty, ktoré už nie sú dostupné, sa považujú za "odpad" a môžu byť bezpečne odstránené.

Proces zberu zahŕňa:

  1. Označovanie (Marking). GC prehľadá zásobník a registre, aby našiel korene (korenové objekty). Od koreňov prechádza grafom objektov a označuje dostupné.
  2. Kompakcia (Compacting). Znižuje fragmentáciu pamäte. GC presúva dostupné objekty do súvislého bloku pamäte, čím zanecháva voľný priestor.
  3. Upratovanie (Sweeping). Nedostupné objekty (neoznačené) sú odstránené a ich pamäť je uvoľnená.

Hlavné vlastnosti:

  • Automatické riadenie: Odstraňuje ručnú zodpovednosť vývojára za uvoľnenie pamäte.
  • Generácie: Halda je rozdelená na generácie (Gen 0, Gen 1, Gen 2). To optimalizuje zber, pretože väčšina objektov rýchlo skončí ako odpad. Nové objekty sa vytvárajú v Gen 0. Ak objekt prežije zber v Gen 0, je presunutý do Gen 1 a tak ďalej.
  • Finalizátory a uvoľnenie (Finalizers and Disposal): GC nezaručuje okamžité vykonanie finalizátorov pre objekty, ktoré implementujú IDisposable. Na uvoľnenie neadresovateľných zdrojov je potrebné použiť explicitný mechanizmus (Dispose(), vyhlásenie using).
// Príklad použitia vyhlásenia using na explicitné uvoľnenie zdrojov
using (var stream = new System.IO.FileStream("temp.txt", System.IO.FileMode.Create))
{
    // Práca so súborom
} // stream.Dispose() bude automaticky volané