Middle
Co je to garbage collector a jak funguje?
sobes.tech AI
Odpověď od AI
Sběrač odpadu (Garbage Collector, GC) je mechanismus automatického řízení paměti, který alokuje a uvolňuje paměť, kterou již program nepoužívá.
Princip fungování:
- Alokace paměti: Když program vytváří objekty, sběrač odpadu jim přiděluje místo na haldě (heap).
- Určení dostupnosti: Sběrač odpadu určuje, které objekty jsou dostupné z "kořenů" (root) programu. Kořeny mohou být lokální proměnné v aktuálně běžících funkcích, statické proměnné, odkazy z vláken atd.
- Sběr odpadu: Objekty, které nejsou dostupné z kořenů, jsou považovány za "odpad" a jejich paměť může být uvolněna.
Existují různé algoritmy sběru odpadu, například:
- Mark-and-Sweep (Značení a úklid): Sběrač prochází graf dostupných objektů od kořenů, označuje je. Poté prochází celou haldu a uvolňuje paměť označených objektů.
- Kopírování: Hald je rozdělen na dvě části. Dostupné objekty jsou kopírovány z jedné části do druhé, stará část je vyčištěna.
- Generační: Objekty jsou rozděleny do generací. Nové objekty patří do mladé generace, staré do zralé. Sběr odpadu se častěji provádí v mladé generaci, protože většina objektů má krátkou životnost.
Příklad v Javě (zjednodušený):
// Program vytváří objekty na haldě
Object obj1 = new Object();
Object obj2 = new Object();
// obj1 se stává nedostupným
obj1 = null;
// Sběrač odpadu může uvolnit paměť obsazenou obj1