Все три становятся кандидатами на сборку, когда теряют достижимость от GC roots. Фактический момент освобождения выбирает сборщик, а не присваивание null само по себе.
Когда объект с цепочкой ссылок может быть удалён GC
Все три становятся кандидатами на сборку, когда теряют достижимость от GC roots. Фактический момент освобождения выбирает сборщик, а не присваивание null само по себе.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В Java объект A ссылается на B, B — на C. Внешняя сильная ссылка на A удалена, других путей от GC roots к этим объектам нет. Когда они могут быть освобождены?
Ответ
Все три становятся кандидатами на сборку, когда теряют достижимость от GC roots. Фактический момент освобождения выбирает сборщик, а не присваивание null само по себе.
Цикл ссылок между объектами не удерживает их, если весь цикл недостижим снаружи. Локальные переменные, статические поля и работающие потоки могут сохранять путь достижимости. Ресурсы вроде файлов закрывайте явно: нельзя привязывать своевременное освобождение внешних ресурсов к неопределённому запуску GC.