Tracing GC ищет достижимые объекты от корней, а не просто считает ссылки. Цикл из двух объектов удаляется, если до него нет пути от живых корней.
Как GC понимает, что два объекта, ссылающиеся друг на друга, нужно удалить?
Tracing GC ищет достижимые объекты от корней, а не просто считает ссылки. Цикл из двух объектов удаляется, если до него нет пути от живых корней.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Tracing GC ищет достижимые объекты от корней, а не просто считает ссылки. Цикл из двух объектов удаляется, если до него нет пути от живых корней.
Если A ссылается на B, а B на A, это не делает их живыми само по себе. Корнями служат доступные программе ссылки, например из стеков и глобальных переменных. После маркировки недостижимая группа может быть освобождена; именно этим tracing отличается от простого подсчёта ссылок.