Що таке 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 |
Шляхи просування
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 і як його налаштувати? — Поріг запуску конкурентної розмітки у 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]]