Что такое Old Generation (Tenured)?
IHOP (Initiating Heap Occupancy Percent) — порог в G1, при котором начинается Mixed GC. По умолчанию 45%: когда Old Gen заполнен на 45%, G1 начинает фоновую сборку.
🟢 Junior Level
Old Generation — область Heap для объектов, переживших несколько сборок Young Generation. JVM считает их «стабильными» и собирает реже.
Простая аналогия: “Склад” для вещей, которые вы храните годами.
Как объекты попадают сюда:
- Пережили 15 сборок молодого поколения
- Слишком большие для Young Generation
Full GC — в G1 и Parallel GC чистит весь Heap → долгая пауза (секунды). В ZGC/Shenandoah Full GC практически отсутствует.
🟡 Middle Level
Алгоритмы очистки
| Алгоритм | Плюсы | Минусы |
|---|---|---|
| Mark-Sweep | Быстро, конкурентно | Фрагментация |
| Mark-Compact | Без фрагментации | Долгий STW |
Promotion пути
1. Tenuring: объект достиг MaxTenuringThreshold (15)
2. Survivor Overflow: Survivor переполнен
3. Humongous Objects: объект > 50% региона G1
Promotion Failure
Minor GC пытается продвинуть объект в Old
→ Old Gen заполнен или фрагментирован
→ Full GC (STW на весь Heap!)
Решение: увеличить Old Gen или уменьшить Promotion Rate
Тюнинг
-XX:NewRatio=2 # Old:Young = 2:1
-XX:InitiatingHeapOccupancyPercent=45 # G1: порог Old GC (IHOP)
IHOP (Initiating Heap Occupancy Percent) — порог в G1, при котором начинается Mixed GC. По умолчанию 45%: когда Old Gen заполнен на 45%, G1 начинает фоновую сборку.
🔴 Senior Level
Free Lists
Без уплотнения (G1, CMS):
→ GC ведёт Free Lists — списки свободных блоков
→ Аллокация = поиск подходящего блока
→ Медленнее, чем Pointer Bumping
Floating Garbage
Объекты, умершие ПОСЛЕ разметки, но ДО завершения цикла
→ Занимают место до следующей сборки
→ Неизбежный overhead конкурентных GC
Floating Garbage — объекты, которые стали недостижимы AFTER того,
как GC сделал snapshot. Они не будут собраны в этом цикле,
но будут собраны в следующем.
G1 Mixed GC
G1 не чистит весь Old Gen сразу!
→ Выбирает самые "грязные" регионы
→ Очищает их вместе с Young Gen
→ Укладывается в MaxGCPauseMillis
ZGC и Shenandoah
Конкурентное уплотнение:
→ Объекты перемещаются БЕЗ STW
→ Паузы < 1 мс
→ Цена: CPU overhead (Load Barriers)
Best Practices
- Избегайте Premature Promotion
- Мониторьте Old Gen fill rate
- IHOP настройте для G1
- ZGC для < 1 мс пауз
- Не увеличивайте Old Gen без анализа
Резюме для Senior
- Old Gen = долгоживущие объекты, дорогие сборки
- Mark-Sweep vs Mark-Compact — trade-off
- Promotion Failure = катастрофа для latency
- G1 Mixed GC = постепенная очистка
- ZGC/Shenandoah = конкурентное уплотнение
🎯 Шпаргалка для интервью
Обязательно знать:
- Old Gen хранит объекты, пережившие 15 сборок (MaxTenuringThreshold), слишком большие объекты, и при переполнении Survivor
- Full GC чистит весь Heap → долгая пауза (секунды); в ZGC/Shenandoah Full GC практически отсутствует
- Два алгоритма: Mark-Sweep (быстро, но фрагментация) vs Mark-Compact (без фрагментации, но долгий STW)
- IHOP (InitiatingHeapOccupancyPercent) — порог в G1 (по умолчанию 45%); когда Old Gen заполнен на 45%, G1 начинает фоновую Mixed GC
- Promotion Failure: Minor GC не может продвинуть объект в Old → Full GC (STW на весь Heap)
- G1 Mixed GC: не чистит весь Old Gen, выбирает самые «грязные» регионы, укладывается в MaxGCPauseMillis
- Floating Garbage: объекты, ставшие недостижимыми ПОСЛЕ разметки; будут собраны в следующем цикле
Частые уточняющие вопросы:
- Что такое IHOP и как его настроить? — Porog запуска конкурентной разметки в G1; если Promotion Rate высокий, увеличьте (чтобы GC успел); если низкий — уменьшите
- Почему G1 Mixed GC лучше Full GC? — G1 чистит Old Gen постепенно, регионы за регионом; Full GC = STW всего Heap
- Что такое Free Lists? — Списки свободных блоков при отсутствии уплотнения; аллокация = поиск подходящего блока (медленнее pointer bumping)
- Когда ZGC лучше G1 для Old Gen? — Когда SLA < 10 мс; ZGC делает конкурентное уплотнение без STW
Красные флаги (НЕ говорить):
- «Увеличу Old Gen и проблема решится» — без анализа Promotion Rate это маскирует проблему
- «Full GC — это нормально для production» — Full GC = секунды паузы; для SLA < 100 мс это неприемлемо
- «Mark-Sweep лучше Mark-Compact» — Mark-Sweep вызывает фрагментацию, что ведёт к Promotion Failure
Связанные темы:
- [[8. Что такое поколения в GC (young, old, metaspace)]]
- [[9. Что такое Young Generation]]
- [[13. Что такое G1 GC]]
- [[14. Что такое ZGC]]
- [[16. Что такое stop-the-world]]