Сборщик мусора (Garbage Collector) обнаруживает объекты без ссылок для последующего освобождения занимаемой ими памяти.
Он работает, отслеживая доступность объектов от "корней" (root objects), таких как:
- Локальные переменные текущего потока.
- Статические поля классов.
- Ссылки из JNI (Java Native Interface).
- Объекты, используемые сборщиком мусора для внутренних нужд.
Процесс выглядит примерно так:
- Marking (Пометка): Начинается с корней и рекурсивно помечаются все объекты, на которые есть ссылки. Это создает граф доступных объектов.
- Sweeping (Сборка): Происходит сканирование хипа. Все объекты, которые не были помечены на шаге 1 (недоступны), считаются мусором и их память освобождается.
- Compaction (Сжатие - опционально): После освобождения памяти, объекты могут быть перемещены для дефрагментации хипа.
Пример гипотетического объекта без ссылок:
java
Объекты без ссылок становятся кандидатами на сборку, но нет гарантии, что сборщик мусора запустится немедленно.