Где в памяти JVM хранятся значения примитивных типов?

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

Ответ

Место хранения примитивного значения зависит от его контекста:

  • В стеке (Stack Memory): хранятся локальные переменные примитивных типов, объявленные внутри методов или блоков кода. Они существуют только в рамках вызова метода (фрейма).
  • В куче (Heap Memory): хранятся примитивные поля, являющиеся частью экземпляра объекта, а также элементы массивов примитивных типов (например, int[]).

Пример:

public class StorageExample {
    private int instanceField = 10; // Хранится в куче как часть объекта

    public void calculate() {
        int localVar = 20; // Хранится в стеке
        int[] numbers = {1, 2, 3}; // Сам массив (объект) и его элементы хранятся в куче
        System.out.println(localVar + instanceField);
    }
}

Почему так? Это оптимизация производительности. Быстрый доступ к локальным переменным в стеке и централизованное управление долгоживущими данными в куче.