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 подскажет развёрнутый ответ в реальном времени.