Краткий ответ: да, логические значения обрабатываются как 32-битные объекты, но массивы логических значений используют 1 байт на элемент.
Более длинный ответ: JVM использует 32-битную ячейку стека, используемую для хранения локальных переменных, аргументов метода и значений выражений. Примитивы, размер которых меньше 1 ячейки, дополняются, примитивы размером более 32 бит (длинные и двойные) занимают 2 ячейки. Этот метод минимизирует количество кодов операций, но имеет некоторые специфические побочные эффекты (например, необходимость маскировать байты).
Примитивы, хранящиеся в массивах, могут использовать менее 32 бит, и существуют разные коды операций для загрузки и хранения значений примитивов из массива. И логические, и байтовые значения используют коды операций baload и bastore, что означает, что логические массивы занимают 1 байт на элемент.
Что касается компоновки объекта в памяти, то это рассматривается в «частной реализации» правилах , оно может быть 1 битом, 1 байтом или, как заметил другой участник, выровнено по бит двойная граница слова. Скорее всего, он принимает базовый размер слова базового оборудования (32 или 64 бита).
Что касается сведения к минимуму объема пространства, используемого булевыми значениями: это действительно не проблема для большинства приложений. Кадры стека (содержащие локальные переменные и аргументы метода) не очень велики, и в большой схеме дискретный логический объект в объекте также не так велик. Если у вас много объектов с большим количеством логических значений, вы можете использовать битовые поля, которые управляются через ваши методы получения и установки. Тем не менее, вы будете платить штраф в процессорном времени, который, вероятно, больше, чем штраф в памяти.