В спецификации виртуальной машины Java говорится, что поддержка логических примитивных типов ограничена .
Не существует инструкций виртуальной машины Java, предназначенных исключительно для операций с логическими значениями. Вместо этого выражения в языке программирования Java, которые работают с логическими значениями, компилируются для использования значений типа данных виртуальной машины Java int.
Вышеизложенное подразумевает (хотя я, возможно, неправильно это понял), что тип данных int используется при работе с логическими значениями, но это 32-битная конструкция памяти. Учитывая, что логическое значение представляет только 1 бит информации:
- Почему байтовый или короткий тип не используется в качестве прокси для логического значения вместо int?
- Для любой данной JVM каков наиболее надежный способ узнать, сколько именно памяти используется для хранения логического типа?
Одно логическое значение где-то в иерархии наследования может использовать до 8 байтов! Это связано с заполнением. Более подробную информацию можно найти в разделе Сколько памяти используется моим объектом Java? :
источник
В 5-м издании Java in a Nutshell (O'Reilly) говорится, что логический примитивный тип равен 1 байту. Это могло быть неправильно, если судить по результатам исследования кучи. Интересно, есть ли у большинства JVM проблемы с выделением менее одного байта для переменных.
источник
Логическое отображение было выполнено с учетом 32-битного процессора. Значение int имеет 32 бита, поэтому его можно обработать за одну операцию.
Вот решение Питера Норвига по Java IAQ: Часто ответы на вопросы для измерения размера (с некоторой неточностью):
источник
ЦП работают с определенным типом данных. В случае 32-битных процессоров они имеют длину 32 бита и, следовательно, то, что вы называете int в Java. Все, что ниже или выше, должно быть заполнено или разделено на эту длину, прежде чем ЦП сможет обработать это. Это не займет много времени, но если вам нужно 2 цикла ЦП вместо 1 для основных операций, это означает удвоение затрат / времени.
Эта спецификация предназначена для 32-битных процессоров, чтобы они могли обрабатывать логические значения с их родным типом данных.
Здесь может быть только одно: скорость или память - SUN выбрал скорость.
источник
Логическое значение представляет собой один бит информации, но его «размер» не является чем-то точно определенным, как говорится в руководствах Sun Java. У логических литералов есть только два возможных значения: истина и ложь. Подробнее см. Типы данных Java .
источник
Почему бы не сделать такой файл .java:
Empty.java
и один такой класс:
NotEmpty.java
Скомпилируйте их оба и сравните файлы .class с шестнадцатеричным редактором.
источник