Сборщик мусора (Garbage Collector, GC) — это механизм автоматического управления памятью, который выделяет и освобождает память, больше не используемую программой.
Принцип работы:
- Выделение памяти: Когда программа создает объекты, сборщик мусора выделяет для них место в куче (heap).
- Определение досягаемости: Сборщик мусора определяет, какие объекты доступны из "корней" (root) программы. Корнями могут быть локальные переменные в текущих выполняемых функциях, статические переменные, ссылки из потоков и т.д.
- Сборка мусора: Объекты, которые недостижимы из корней, считаются "мусором" и их память может быть освобождена.
Существуют различные алгоритмы сборки мусора, например:
- Mark-and-Sweep (Пометка и очистка): Сборщик проходит по графу объектов, достижимых из корней, помечая их. Затем он проходит по всей куче и освобождает память помеченных объектов.
- Copying (Копирование): Куча разделяется на две части. Достижимые объекты копируются из одной части в другую, а старая часть очищается.
- Generational (Поколенческая): Объекты делятся на поколения. Новые объекты попадают в младое поколение, старые — в зрелое. Сборка мусора происходит чаще в молодом поколении, так как большинство объектов имеют короткий срок жизни.
Пример работы в Java (упрощенно):
java