Ответ
Место хранения зависит от модификатора поля:
- Нестатическое (поле экземпляра): Хранится внутри объекта в куче (Heap).
- Статическое (
staticполе класса): Хранится в Metaspace (ранее — Permanent Generation/PermGen), в области памяти для метаданных класса.
Пример:
class StorageExample {
int instancePrimitive = 10; // Значение 10 хранится в куче, внутри каждого объекта.
static int classPrimitive = 20; // Значение 20 хранится в Metaspace, одно на весь класс.
}
Почему так? Примитивные типы (int, char, boolean и др.) хранят значение напрямую, без создания отдельного объекта-обертки. Нестатические поля — часть состояния конкретного экземпляра, поэтому живут и умирают вместе с ним в куче. Статические поля принадлежат классу и существуют всё время работы приложения.