Выбор ответа Senior JVM: память, GC, загрузка классов обновлено
Escape analysis
Вопрос
Что даёт escape analysis в JIT-компиляторе C2?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Если объект не покидает метод, JIT уберёт аллокацию в куче и лишние блокировки. C2 анализирует, может ли объект «сбежать» из метода (быть сохранённым в поле, возвращённым, передан в другой поток).
Варианты ответа
- Переносит все локальные объекты метода в стек потока, как требует спецификация
- Если объект не покидает метод, JIT уберёт аллокацию в куче и лишние блокировкиправильный ответ
- Находит утечки памяти во время выполнения и пишет их в лог JIT-компилятора
- Позволяет объектам переживать сборку молодого поколения без копирования
Разбор
C2 анализирует, может ли объект «сбежать» из метода (быть сохранённым в поле, возвращённым, передан в другой поток). Если нет, поля объекта раскладываются по регистрам и локальным переменным, аллокации в куче нет, а синхронизация на таком объекте снимается (lock elision). Это оптимизация JIT, а не правило языка: спецификация говорит только о куче. Утечки он не ищет и на поколения не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «JVM: память, GC, загрузка классов»
- Делегирование загрузчиков
- JVM в контейнере
- GC roots
- Области памяти JVM
- Виды ссылок
- Когда объект становится мусором
- Ошибка и область памяти
- Metaspace