Ответ
Объект проходит через фазы цикла сборки мусора и в итоге его память освобождается.
Типичный цикл сборки мусора (на примере JVM):
- Marking (Пометка): GC обходит граф достижимых объектов, начиная с корневых ссылок (Garbage Collection Roots). Все непомеченные объекты считаются недостижимыми.
- Sweeping (Очистка): Память, занятая недостижимыми объектами, помечается как свободная.
- Compacting (Уплотнение) [опционально]: Выжившие объекты перемещаются в начало области памяти для борьбы с фрагментацией.
Пример создания кандидата на сборку:
void someMethod() {
Object obj = new Object(); // 1. Создан объект, есть сильная ссылка 'obj'
// ... использование obj
} // 2. После выхода из метода локальная ссылка 'obj' уничтожается.
// 3. Объект больше не достижим. Он будет обработан GC в следующем цикле.
Важные уточнения:
- Время сборки не детерминировано. Объект может быть собран не сразу, а при следующем запуске GC, когда потребуется память.
- Финализаторы (
finalize()) устарели (deprecated since Java 9) и их использование не рекомендуется. - Разные сборщики (G1, ZGC, Shenandoah) имеют свои алгоритмы, но общая логика (достижимость → пометка → очистка) сохраняется.