Где хранится ссылка на объект в Java?

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

Ответ

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

Детали:

  • Стек: Содержит фреймы методов. В них хранятся локальные переменные, включая ссылки (указатели) на объекты. Сама ссылка — это, по сути, адрес объекта в куче.
  • Куча: Область динамической памяти, где размещаются все создаваемые объекты (экземпляры классов) и массивы.

Пример:

public void example() {
    // 1. Локальная ссылка 'message' хранится в стеке.
    // 2. Объект String("Hello") создается в куче.
    // 3. Ссылка 'message' содержит адрес этого объекта в куче.
    String message = new String("Hello");

    // Примитив хранится прямо в стеке (в значении переменной 'count').
    int count = 5;
}

Ключевое отличие от примитивов: Для локальной переменной-примитива (int count = 5) значение 5 хранится прямо в стеке. Для ссылочного типа в стеке хранится только адрес объекта, а не его данные.