Junior — Middle
¿Cómo determina el recolector de basura qué objetos eliminar y cuáles mantener en la memoria?
sobes.tech AI
Respuesta de la IA
Сборщик мусора в Java определяет, какие объекты нужно удалить, основываясь на достижимости объектов из корневых ссылок (root references). Если объект недостижим, то есть нет ни одной ссылки на него из активных потоков, стека вызовов, статических полей и других корней, он считается мусором и подлежит удалению.
Основной алгоритм — это обход графа объектов, начиная с корней, и пометка всех достижимых объектов. Все, что не помечено, считается недостижимым и удаляется. Такой подход называется "маркировка и очистка" (mark-and-sweep).
Пример:
- Стек вызовов содержит локальные переменные, которые ссылаются на объекты.
- Статические поля классов тоже считаются корнями.
- Сборщик помечает все объекты, достижимые из этих корней.
- Объекты, не помеченные, удаляются из памяти.