Ответ
Java использует механизм сборки мусора (Garbage Collection, GC), который удаляет объекты, ставшие недостижимыми. Объект считается недостижимым, если на него нет ссылок из активных точек программы:
- Из стека вызовов (локальные переменные, параметры методов).
- Из статических полей классов.
- Из других достижимых объектов в куче.
Пример:
public class GarbageCollectionExample {
public static void main(String[] args) {
Object obj1 = new Object(); // Объект 1 достижим через `obj1`
Object obj2 = new Object(); // Объект 2 достижим через `obj2`
obj1 = obj2; // Теперь ссылка `obj1` указывает на Объект 2
// На исходный Объект 1 больше нет ссылок → он недостижим и может быть удален GC.
}
}
Ключевые моменты:
- Автоматизм: GC работает в фоне, решение о запуске принимает JVM.
- Достижимость: Удаляются только объекты, до которых невозможно «добраться» из корневых ссылок (Root Set).
- Явный вызов:
System.gc()лишь предлагает JVM выполнить сборку, но не гарантирует её немедленное выполнение или удаление конкретного объекта.