Ответ
Сборка мусора (GC) — это процесс автоматического освобождения памяти, занятой недостижимыми объектами. Основные фазы (могут отличаться в зависимости от сборщика):
- Mark (Пометка): GC обходит корневые ссылки (стек, статические поля, ссылки в JNI) и рекурсивно помечает все достижимые из них объекты как "живые".
- Sweep (Очистка): Память сканируется, и объекты, не помеченные как живые, считаются мусором и подлежат удалению.
- Compact (Уплотнение - опционально): Выжившие объекты перемещаются в начало области памяти (heap), чтобы сократить фрагментацию и ускорить последующие аллокации.
Пример создания мусора:
public void createGarbage() {
Object obj = new Object(); // 1. Создан объект
// obj является достижимой ссылкой
obj = null; // 2. Ссылка обнулена, исходный объект теперь недостижим
// Объект готов к сборке мусором
}
Важные моменты:
System.gc()— лишь предложение JVM запустить GC, выполнение не гарантировано.- Типы сборщиков (Serial, Parallel, G1, ZGC, Shenandoah) определяют алгоритм (mark-sweep-compact, copying, concurrent marking) и влияют на паузы (stop-the-world).
- Best practice: Не полагаться на
System.gc(). Управлять производительностью GC через JVM-флаги (напр.,-XX:+UseG1GC) и анализ дампов памяти.