Где хранятся ссылочные переменные в Java?

«Где хранятся ссылочные переменные в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ссылочные переменные хранятся в стеке (Stack Memory), а объекты, на которые они указывают, — в куче (Heap Memory).

Пример:

// Переменная 'obj' хранится в стеке.
// Сам объект 'Object()' размещается в куче.
Object obj = new Object();

Почему так устроено?

  • Стек — быстрая, упорядоченная память (LIFO) для хранения примитивов и ссылок на объекты. Его размер ограничен, что обеспечивает простоту управления и скорость доступа.
  • Куча — динамическая область памяти для объектов, время жизни которых не привязано к методу. Требует управления сборщиком мусора (Garbage Collector).

Ключевое отличие от примитивов: Локальные переменные примитивных типов (int, char и т.д.) хранят значение напрямую в стеке.