Выбор ответа Junior JVM: память, GC, загрузка классов спрашивают часто обновлено
Что лежит в стеке
Вопрос
В методе объявлено int n = 5; User u = new User();. Где что хранится?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: n и ссылка u в стеке потока, объект User в куче. Локальные переменные метода живут во фрейме стека: примитив n и ссылка u.
Варианты ответа
nи ссылкаuв стеке потока, объект User в кучеправильный ответ- Всё в стеке потока, потому что объявлено внутри метода
- Всё в куче, включая
n, а в стеке только адрес возврата nв куче как упакованный Integer, а объект User в стеке
Разбор
Локальные переменные метода живут во фрейме стека: примитив n и ссылка u. Сам объект создаётся в куче, общей для всех потоков. «Всё в стеке» путает ссылку с объектом. JIT может убрать аллокацию объекта, который не выходит из метода (escape analysis), но это оптимизация, а не модель памяти.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «JVM: память, GC, загрузка классов»
- Делегирование загрузчиков
- JVM в контейнере
- Сборщик по умолчанию
- Escape analysis
- Этапы загрузки класса
- GC roots
- Области памяти JVM
- Виды ссылок