La especificación de la máquina virtual de Java dice que hay un soporte limitado para los tipos primitivos booleanos .
No hay instrucciones de máquina virtual Java dedicadas exclusivamente a operaciones con valores booleanos. En su lugar, las expresiones en el lenguaje de programación Java que operan con valores booleanos se compilan para utilizar valores del tipo de datos int de la máquina virtual Java.
Lo anterior implica (aunque puedo haberlo malinterpretado) que el tipo de datos int se usa cuando se opera con valores booleanos, pero esta es una construcción de memoria de 32 bits. Dado que un booleano solo representa 1 bit de información:
- ¿Por qué no se usa un byte, o un tipo corto, como proxy para un booleano en lugar de int?
- Para cualquier JVM dada, ¿cuál es la forma más confiable de averiguar exactamente cuánta memoria se usa para almacenar un tipo booleano?
¡Un solo booleano en algún lugar de la jerarquía de herencia puede usar hasta 8 bytes! Esto se debe al acolchado. Se pueden encontrar más detalles en ¿Cuánta memoria utiliza mi objeto Java? :
fuente
La quinta edición de Java in a Nutshell (O'Reilly) dice que un tipo primitivo booleano es de 1 byte. Eso podría estar mal, según lo que muestra el examen del montón. Me pregunto si la mayoría de las JVM tienen problemas para asignar menos de un byte para las variables.
fuente
El mapeo booleano se realizó con una CPU de 32 bits en mente. El valor int tiene 32 bits, por lo que se puede procesar en una sola operación.
Aquí hay una solución de Java IAQ de Peter Norvig: Preguntas con respuestas poco frecuentes para medir el tamaño (con cierta imprecisión):
fuente
Las CPU operan en una longitud de tipo de datos específica. En el caso de las CPU de 32 bits, tienen una longitud de 32 bits y, por lo tanto, lo que se llama 'int' en Java. Todo lo que esté por debajo o por encima de lo que debe llenarse o dividirse a esta longitud antes de que la CPU pueda procesarlo. Esto no lleva mucho tiempo, pero si necesita 2 ciclos de CPU en lugar de 1 para operaciones básicas, esto significa duplicar los costos / tiempo.
Esta especificación está dedicada a las CPU de 32 bits para que puedan procesar valores booleanos con su tipo de datos nativo.
Aquí solo puede tener uno: velocidad o memoria: SUN se decidió por la velocidad.
fuente
Boolean representa un bit de información, pero su "tamaño" no es algo que esté definido con precisión, dicen los tutoriales de Sun Java. Los literales booleanos tienen solo dos valores posibles: verdadero y falso. Consulte Tipos de datos de Java para obtener más detalles.
fuente
¿Por qué no crear un archivo .java como este?
Empty.java
y una clase como esta:
NotEmpty.java
Compile ambos y compare los archivos .class con un editor hexadecimal.
fuente