Выбор ответа Senior JVM: память, GC, загрузка классов обновлено
JVM в контейнере
Вопрос
Сервис в Kubernetes с лимитом памяти 2 ГБ запущен без флагов памяти. Какой будет максимальная куча в Java 21 по умолчанию?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Около 512 МБ: 25% от лимита контейнера. Современные JVM видят лимиты cgroup (UseContainerSupport включён по умолчанию) и берут MaxRAMPercentage = 25%.
Варианты ответа
- 2 ГБ: вся доступная контейнеру память целиком
- Четверть памяти всего узла кластера, а не контейнера
- Около 512 МБ: 25% от лимита контейнераправильный ответ
- 64 МБ, как у клиентской JVM по умолчанию
Разбор
Современные JVM видят лимиты cgroup (UseContainerSupport включён по умолчанию) и берут MaxRAMPercentage = 25%. В контейнере, где кроме JVM ничего нет, это расточительно, поэтому обычно задают -XX:MaxRAMPercentage=75. Всю память отдавать под кучу нельзя: нужны Metaspace, стеки потоков, code cache, direct-буферы. Память узла JVM в контейнере с лимитом не использует.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «JVM: память, GC, загрузка классов»
- Escape analysis
- Этапы загрузки класса
- GC roots
- Области памяти JVM
- Виды ссылок
- Когда объект становится мусором
- Ошибка и область памяти
- Metaspace