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:
- 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é.
- 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.
- 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ásenieusing).
// 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é