Ответ
Разделение кучи на области (Eden, Survivor 0/1, Old Generation) и перемещение между ними — основа работы сборщиков мусора поколений (Generational GC). Цель — оптимизация производительности сборки мусора.
Принцип слабого поколения (Weak Generational Hypothesis):
- Большинство объектов становятся мусором очень быстро (временные объекты).
- Немногие объекты живут долго.
Процесс перемещения и его цели:
- Создание в Eden: Новые объекты размещаются в Eden (самой быстрой области для аллокации).
- Minor GC и Survivor: При заполнении Eden запускается Minor GC. Выжившие объекты перемещаются в один из Survivor-пространств (S0 или S1). Это копирующий алгоритм, который быстро очищает Eden и дефрагментирует память.
- Перемещение между Survivor: При следующих Minor GC живые объекты копируются между S0 и S1. Каждое такое копирование увеличивает счётчик возраста объекта.
- Promotion в Old Gen: Когда возраст объекта превышает порог (по умолчанию 15), он перемещается в Old Generation. Это долгоживущие объекты (например, кэши, статические данные).
- Major GC (Full GC): Сборка мусора в Old Gen происходит реже, но она медленнее и обычно вызывает паузы (STW — Stop-The-World).
Зачем это нужно (преимущества):
- Скорость: Minor GC работает очень быстро, так как сканирует только небольшую область Young Gen.
- Эффективность памяти: Копирующий сборщик в Young Gen компактизирует память, устраняя фрагментацию.
- Изоляция: Долгоживущие объекты изолированы в Old Gen и не сканируются при каждом Minor GC.