Mediumgc
Как работает сборщик мусора в Java?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
GC автоматически освобождает объекты без ссылок. Heap делится на поколения: Young (Eden + 2 Survivor) и Old (Tenured), плюс Metaspace для метаданных классов. Новые объекты в Eden, пережившие minor GC — в Survivor, затем в Old; major GC чистит Old.
new Object() → [ Eden ] --survive--> [ Survivor S0/S1 ] --age--> [ Old (Tenured) ]
|
GC roots: локальные переменные, static поля, JNI, активные потоки ──┘Алгоритмы: Mark-Sweep (пометка + очистка), Mark-Compact (+ дефрагментация), Copying (копирование живых между Survivor).
Реализации GC:
- Serial — один поток;
- Parallel — несколько потоков;
- G1 (Garbage First) — default с Java 9;
- ZGC — low-latency (sub-ms с Java 16);
- Shenandoah (OpenJDK);
- CMS — deprecated в Java 9, удалён в 14.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.