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

Что лежит в стеке

Вопрос

В методе объявлено int n = 5; User u = new User();. Где что хранится?

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

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

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

Коротко

Правильный ответ: n и ссылка u в стеке потока, объект User в куче. Локальные переменные метода живут во фрейме стека: примитив n и ссылка u.

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

  1. n и ссылка u в стеке потока, объект User в кучеправильный ответ
  2. Всё в стеке потока, потому что объявлено внутри метода
  3. Всё в куче, включая n, а в стеке только адрес возврата
  4. n в куче как упакованный Integer, а объект User в стеке

Разбор

Локальные переменные метода живут во фрейме стека: примитив n и ссылка u. Сам объект создаётся в куче, общей для всех потоков. «Всё в стеке» путает ссылку с объектом. JIT может убрать аллокацию объекта, который не выходит из метода (escape analysis), но это оптимизация, а не модель памяти.

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

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

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