Obsah

Garbage Collector (GC)

Garbage Collector je komponenta běhového prostředí (runtime), která automaticky spravuje přidělování a uvolňování paměti typu Heap (haldy). Díky GC se vývojáři nemusí starat o manuální mazání objektů, což předchází kritickým chybám, jako jsou úniky paměti (memory leaks).

1. Hlavní úkoly GC

2. Jak GC funguje: Generační hypotéza

Většina moderních GC (zejména v .NET a Javě) pracuje na principu generací. Vychází z pozorování, že většina objektů má velmi krátkou životnost (např. dočasné proměnné v metodě).

3. Algoritmus Mark-and-Sweep

Toto je základní proces, kterým GC prochází paměť:

1. **Mark (Označení):** GC začne od tzv. "kořenů" (roots – např. globální proměnné, zásobník) a projde všechny dosažitelné objekty. Ty označí jako "živé".
2. **Sweep (Smazání):** Všechny objekty, které nebyly označeny, jsou považovány za odpad a jejich paměť je uvolněna.

4. Výhody a nevýhody

Výhody Nevýhody
Bezpečnost: Eliminuje chyby typu „Double Free“ nebo „Dangling Pointers“. Výkonová režie: GC spotřebovává procesorový čas pro svou vlastní režii.
Produktivita: Vývojář píše méně kódu pro správu zdrojů. Pauzy (Stop-the-world): Při úklidu může dojít ke krátkému pozastavení běhu aplikace.
Automatická defragmentace: Udržuje haldu v dobrém stavu pro rychlou alokaci. Nepředvídatelnost: Programátor přesně neví, kdy k úklidu dojde.

5. Garbage Collector vs. Manuální správa

V jazycích jako C nebo C++ musí programátor paměť uvolňovat ručně pomocí příkazů `free()` nebo `delete`.

Poznámka: Ani GC není všemocný. Pokud v programu nechtěně držíte odkaz na velký objekt v globální proměnné, GC ho nesmí smazat, i když ho už nepotřebujete. Tomu se říká „logický únik paměti“.

Související články:

Tagy: programming memory-management garbage-collector dotnet java performance