Sobes.tech
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í:

  1. Alokace paměti: Když program vytváří objekty, sběrač odpadu jim přiděluje místo na haldě (heap).
  2. 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.
  3. 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