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

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

Ответ

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

  1. Нестатическое (поле экземпляра): Хранится внутри объекта в куче (Heap).
  2. Статическое (static поле класса): Хранится в Metaspace (ранее — Permanent Generation/PermGen), в области памяти для метаданных класса.

Пример:

class StorageExample {
    int instancePrimitive = 10;     // Значение 10 хранится в куче, внутри каждого объекта.
    static int classPrimitive = 20; // Значение 20 хранится в Metaspace, одно на весь класс.
}

Почему так? Примитивные типы (int, char, boolean и др.) хранят значение напрямую, без создания отдельного объекта-обертки. Нестатические поля — часть состояния конкретного экземпляра, поэтому живут и умирают вместе с ним в куче. Статические поля принадлежат классу и существуют всё время работы приложения.