«Метаданные» массива включают в себя:
- 8 байтов (32-битная JVM) или 16 байтов (64-битная JVM) для заголовка объекта
- 4 байта(32 бита) для длины массива
Добавьте 1 необходимый байт для логических данных, и вы получите минимум 13 байт (32 бита) или 21 байт (64 бита).
Однако объектам выделяется память в виде 8-байтовых кратных значений, поэтому даже если вам нужно только 12 или 20 байтов служебной информации + 1 байт для логического значения, вам придется использовать 16 или 24 байта памяти соответственно., для вашего объекта массива.
В дополнение к 16/24 байтам сам объект будет занимать, вам потребуется 4 байта (32 бита) или 8 байтов (64 бита) для адреса памятиобъект, занимающий 20 или 32 байта памяти соответственно для хранения вашего логического значения в массиве.
Размер автономной переменной зависит от JVM.Java не определяет размер хранилища, и на самом деле Oracle говорит
Этот тип данных представляет один бит информации, но его "размер" не является чем-то точно определенным.
Старые JVM используют 32-разрядную ячейку стека, используемую для хранения локальных переменных, аргументов метода и значений выражений, поэтому один логический тип, используемый в качестве переменной, будет занимать 4 байта;сделать массив как минимум в 5 раз дороже, чем для одного логического.Этот ответ может быть другим, если, например, логическое значение является переменной класса, и в этом случае это будет просто один байт, добавленный к существующим издержкам.В более новых JVM один логический тип будет использовать только 1 байт, но в зависимости от контекста и 8-байтового заполнения, необходимого для выравнивания адресов памяти, он все равно может занимать до 8 байт пространства кучи.Он все равно будет меньше, чем логический массив.