Ответ
Garbage Collection (GC) — это автоматический процесс управления памятью в JVM. Его основная задача — найти и освободить память, занятую объектами, которые больше не используются программой.
Базовый цикл сборки мусора (на примере алгоритма Mark-Sweep-Compact):
- Mark (Пометка): Определяются все живые объекты, достижимые из GC Roots.
- Sweep (Очистка): Память сканируется, и пространство, занятое "мертвыми" (непомеченными) объектами, помечается как свободное.
- Compact (Уплотнение - опционально): Живые объекты перемещаются в начало области памяти, чтобы устранить фрагментацию и упростить выделение памяти под новые объекты одним непрерывным блоком.
Пример жизненного цикла объекта:
// 1. Выделение памяти в Young Generation (Eden Space)
String data = new String("Sample");
// 2. Объект используется...
// 3. Ссылка теряется
data = null;
// 4. При следующем Minor GC объект будет определен как мусор и его память освобождена.
Типы сборщиков мусора в Java (выбор через JVM флаги):
- Serial GC: Однопоточный, для приложений с маленькой кучей и нечувствительных к паузам.
- Parallel/Throughput GC: Многопоточный, максимизирует пропускную способность (throughput), используя несколько потоков для сборки.
- CMS (Concurrent Mark Sweep): Старая реализация, aiming to minimize pauses by doing most work concurrently with application threads (deprecated).
- G1 (Garbage-First): Параллельный, concurrent и incremental сборщик с предсказуемыми паузами, разделяющий кучу на регионы.
- ZGC / Shenandoah: Сборщики нового поколения, цель которых — сверхнизкие паузы (менее 10 мс) даже для очень больших куч (терабайты).