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).
—
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ě).
—
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.
—
| 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. |
—
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