Sobes.tech
Junior

Co je to garbage collector v C#?

sobes.tech AI

Odpověď od AI

Garbage collector v jazyce C# je automatizovaný proces správy paměti. Uvolňuje paměť obsazenou objekty, které již aplikace nepoužívá.

Klíčové aspekty:

  • Automatické řízení: Vývojář nemusí ručně alokovat nebo uvolňovat paměť pro většinu objektů. CLR (Common Language Runtime) to dělá automaticky.
  • Sledování odkazů: Garbage collector určuje, které objekty jsou dostupné z kořenových zdrojů (například zásobníky vláken, statická pole). Objekty bez odkazů z těchto zdrojů jsou považovány za nedosažitelné a jsou sbírány.
  • Generace: Heap (halda) je rozdělen na generace (0, 1 a 2). Objekty, které "přežijí" po sběru, jsou přesunuty do vyšších generací. To optimalizuje proces, protože většina objektů má krátkou životnost.
  • Finalizace: Objekty mohou mít metodu Finalize, kterou volá garbage collector před uvolněním paměti. Používá se k čištění neřízených zdrojů, ale její použití je omezeno kvůli nepředvídatelnému čase provádění.
  • Kompakce: Po sběru může garbage collector přesouvat přežívající objekty, aby snížil fragmentaci paměti.
// Příklad vytvoření objektu na spravované haldě
MyClass obj = new MyClass();
// Když na obj již nejsou žádné odkazy, garbage collector může uvolnit paměť

// Příklad ručního uvolnění neřízených zdrojů pomocí IDisposable a using
// Doporučený přístup místo Finalize
using (var resource = new UnmanagedResourceWrapper())
{
    // Použití zdroje
} // Zde je voláno resource.Dispose(), čistí se neřízený zdroj