Где хранятся примитивные поля (int, boolean и т.д.) объекта Java?

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

Ответ

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

1. Поле объекта (не static): Хранится в куче (Heap), внутри памяти, выделенной для самого объекта.

class Person {
    int age; // Примитив 'age' лежит в куче как часть объекта Person
    String name; // Ссылка 'name' лежит в куче, объект String — тоже в куче
}

2. Локальная переменная метода: Хранится в стеке (Stack).

void calculate() {
    int localSum = 0; // Примитив 'localSum' лежит в стеке фрейма метода calculate
}

3. Статическое поле (static): Хранится в Metaspace (область метаданных класса).

class Settings {
    static final int MAX_USERS = 100; // Хранится в Metaspace
}

Итог: Примитивное поле объекта — часть этого объекта и размещается в куче. Локальная примитивная переменная — часть контекста метода и размещается в стеке.