Выбор ответа Senior JVM: память, GC, загрузка классов обновлено

Escape analysis

Вопрос

Что даёт escape analysis в JIT-компиляторе C2?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Если объект не покидает метод, JIT уберёт аллокацию в куче и лишние блокировки. C2 анализирует, может ли объект «сбежать» из метода (быть сохранённым в поле, возвращённым, передан в другой поток).

Варианты ответа

  1. Переносит все локальные объекты метода в стек потока, как требует спецификация
  2. Если объект не покидает метод, JIT уберёт аллокацию в куче и лишние блокировкиправильный ответ
  3. Находит утечки памяти во время выполнения и пишет их в лог JIT-компилятора
  4. Позволяет объектам переживать сборку молодого поколения без копирования

Разбор

C2 анализирует, может ли объект «сбежать» из метода (быть сохранённым в поле, возвращённым, передан в другой поток). Если нет, поля объекта раскладываются по регистрам и локальным переменным, аллокации в куче нет, а синхронизация на таком объекте снимается (lock elision). Это оптимизация JIT, а не правило языка: спецификация говорит только о куче. Утечки он не ищет и на поколения не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме