Sobes.tech
Junior — Middle

Kuidas otsustab prügikorjaja, milliseid objekte tuleb kustutada ja milliseid hoida mälus?

sobes.tech AI

Vastus AI-lt

Сборщик мусора в Java определяет, какие объекты нужно удалить, основываясь на достижимости объектов из корневых ссылок (root references). Если объект недостижим, то есть нет ни одной ссылки на него из активных потоков, стека вызовов, статических полей и других корней, он считается мусором и подлежит удалению.

Основной алгоритм — это обход графа объектов, начиная с корней, и пометка всех достижимых объектов. Все, что не помечено, считается недостижимым и удаляется. Такой подход называется "маркировка и очистка" (mark-and-sweep).

Пример:

  • Стек вызовов содержит локальные переменные, которые ссылаются на объекты.
  • Статические поля классов тоже считаются корнями.
  • Сборщик помечает все объекты, достижимые из этих корней.
  • Объекты, не помеченные, удаляются из памяти.