Выбор ответа Senior JVM: память, GC, загрузка классов обновлено
G1 или ZGC
Вопрос
Сервис с кучей 64 ГБ должен отвечать с p99 меньше 10 мс, паузы G1 доходят до 150 мс. Что попробовать в первую очередь?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: ZGC (-XX:+UseZGC): паузы обычно меньше миллисекунды на любой куче. ZGC делает почти всю работу конкурентно, паузы очень короткие и не растут с размером кучи, это как раз сценарий низкой задержки на больших кучах.
Варианты ответа
- ZGC (
-XX:+UseZGC): паузы обычно меньше миллисекунды на любой кучеправильный ответ - Parallel GC: он самый быстрый и даёт минимальные паузы на больших кучах
- Уменьшить
-Xmxдо 4 ГБ, чтобы G1 сканировал меньше памяти - Вызывать
System.gc()по таймеру в периоды низкой нагрузки сервиса
Разбор
ZGC делает почти всю работу конкурентно, паузы очень короткие и не растут с размером кучи, это как раз сценарий низкой задержки на больших кучах. Цена: немного меньшая пропускная способность и больше CPU. Parallel максимизирует пропускную способность, но паузы у него длиннее. Урезать кучу, не понимая профиля памяти, значит получить OOM. Ручной System.gc() вызывает полную сборку и сам по себе даёт долгую паузу.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «JVM: память, GC, загрузка классов»
- Делегирование загрузчиков
- JVM в контейнере
- Сборщик по умолчанию
- Escape analysis
- Этапы загрузки класса
- GC roots
- Области памяти JVM
- Виды ссылок