Как GC понимает, что два объекта, ссылающиеся друг на друга, нужно удалить?

Tracing GC ищет достижимые объекты от корней, а не просто считает ссылки. Цикл из двух объектов удаляется, если до него нет пути от живых корней.

Короткий ответ

Что ответить на собеседовании

Tracing GC ищет достижимые объекты от корней, а не просто считает ссылки. Цикл из двух объектов удаляется, если до него нет пути от живых корней.

Подробный разбор

Ответ с пояснениями

Tracing GC ищет достижимые объекты от корней, а не просто считает ссылки. Цикл из двух объектов удаляется, если до него нет пути от живых корней.

Если A ссылается на B, а B на A, это не делает их живыми само по себе. Корнями служат доступные программе ссылки, например из стеков и глобальных переменных. После маркировки недостижимая группа может быть освобождена; именно этим tracing отличается от простого подсчёта ссылок.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее