Ответ
Такой объект становится недостижимым (unreachable) и помечается как пригодный для сборки мусора (Garbage Collection, GC).
Как объект становится недостижимым:
- Переменная, указывающая на объект, выходит из области видимости.
- Переменной присваивается значение
nullили ссылка на другой объект. - Объект остается только в изолированном цикле ссылок (circular reference), недоступном из "корней" (GC Roots).
Пример:
public class GCDemo {
public static void main(String[] args) {
// 1. Создается объект, на который ссылается `obj`
Object obj = new Object();
// 2. Ссылка перенаправляется, старый объект становится недостижимым
obj = new Object();
// 3. Здесь уже два объекта-кандидата на GC
obj = null;
// 4. Явный запрос на сборку мусора (НЕ гарантирует немедленного выполнения)
System.gc();
}
}
Важные детали:
- Время сборки не определено. JVM сама решает, когда запустить сборщик мусора. Вызов
System.gc()является лишь рекомендацией. - Процесс сборки: Сборщик мусора находит недостижимые объекты, освобождает занимаемую ими память и при необходимости вызывает метод
finalize()(устарел с Java 9). - Корни сборки мусора (GC Roots): Статические переменные, активные потоки, локальные переменные в стеке, JNI-ссылки — точки, от которых начинается проверка достижимости.