Ответ
Очисткой памяти в Java автоматически управляет Сборщик мусора (Garbage Collector, GC). Он освобождает память, удаляя объекты, которые больше не достижимы из «корней» (живых потоков, статических полей, локальных переменных).
Принцип работы:
- Пометка: GC обходит граф объектов, помечая все достижимые.
- Очистка: Память, занятая неотмеченными (недостижимыми) объектами, освобождается.
- Компактизация (опционально): Выжившие объекты перемещаются для устранения фрагментации памяти.
Пример:
public class Example {
public static void main(String[] args) {
Object obj = new Object(); // Создан объект в куче.
obj = null; // Ссылка потеряна. Объект становится кандидатом на удаление.
System.gc(); // Запрос на выполнение сборки мусора (не гарантирует немедленный вызов).
}
}
Типы сборщиков и настройка:
- Serial GC: Для однопоточных приложений.
- Parallel/Throughput GC: Многопоточный, оптимизирован для пропускной способности.
- G1 GC (Garbage-First): Баланс между latency и throughput, делит кучу на регионы.
- ZGC/Shenandoah: Низкие паузы (low-latency) для больших куч.
Алгоритм выбирается и настраивается через JVM-флаги (например, -XX:+UseG1GC).