Вопрос проверяет понимание внутреннего устройства объектов и накладных расходов по памяти в JVM.
Любой объект в Java имеет служебный заголовок.
Даже пустой объект занимает заметное количество памяти.
Обычно это 12–16 байт только на заголовок.
К этому добавляется память под поля и выравнивание.
Точный размер зависит от JVM и архитектуры.
Чтобы оценить размер объекта, нужно учитывать не только его поля.
Определение:
Заголовок объекта — это служебная информация, которую JVM хранит для управления объектом.
В него обычно входят:
Mark Word (хеш, GC, блокировки).
Ссылка на класс (Class Pointer).
Типичные размеры:
32-bit JVM — ~8 байт.
64-bit JVM с Compressed Oops — ~12 байт.
64-bit JVM без сжатия — ~16 байт.
К заголовку добавляются:
Примитивные поля.
Ссылки на другие объекты.
Размер зависит от:
типов полей
их количества
порядка объявления
JVM выравнивает объекты:
Обычно по 8 байтам.
Размер округляется вверх.
Пример:
class A {
int x; // 4 байта
}
Фактический размер:
Заголовок (12 байт)
Поле int (4 байта)
Выравнивание → итог 16 байт
Даже простой объект в Java занимает минимум 16 байт памяти, а точный размер зависит от JVM, архитектуры и выравнивания.