La spécification de la machine virtuelle Java indique que la prise en charge des types primitifs booléens est limitée .
Il n'y a pas d'instructions de machine virtuelle Java uniquement dédiées aux opérations sur des valeurs booléennes. Au lieu de cela, les expressions du langage de programmation Java qui fonctionnent sur des valeurs booléennes sont compilées pour utiliser des valeurs du type de données Java virtual machine int.
Ce qui précède implique (bien que je puisse l'avoir mal interprété) que le type de données int est utilisé lors du fonctionnement sur des booléens, mais il s'agit d'une construction de mémoire 32 bits. Étant donné qu'un booléen ne représente qu'un bit d'information:
- Pourquoi un octet, ou un type court, n'est-il pas utilisé comme proxy pour un booléen au lieu de int?
- Pour une JVM donnée, quel est le moyen le plus fiable de savoir exactement combien de mémoire est utilisée pour stocker un type booléen?
Un seul booléen quelque part dans la hiérarchie d'héritage peut utiliser jusqu'à 8 octets! Cela est dû au rembourrage. Plus de détails peuvent être trouvés dans Quelle quantité de mémoire est utilisée par mon objet Java? :
la source
La 5e édition de Java en bref (O'Reilly) indique qu'un type primitif booléen est de 1 octet. Cela pourrait être faux, sur la base de ce que montre l'examen du tas. Je me demande si la plupart des machines virtuelles Java ont des problèmes avec l'allocation de moins d'un octet pour les variables.
la source
Le mappage booléen a été fait avec un processeur 32 bits à l'esprit. La valeur int a 32 bits et peut donc être traitée en une seule opération.
Voici une solution de la IAQ Java de Peter Norvig: Questions rarement répondues pour mesurer la taille (avec une certaine imprécision):
la source
Les processeurs fonctionnent sur une longueur de type de données spécifique. Dans le cas des processeurs 32 bits, ils ont une longueur de 32 bits et donc ce que vous appelez «int» en Java. Tout ce qui est en dessous ou au-dessus qui doit être rempli ou divisé à cette longueur avant que le CPU puisse le traiter. Cela ne prend pas beaucoup de temps, mais si vous avez besoin de 2 cycles CPU au lieu de 1 pour les opérations de base, cela signifie doubler les coûts / temps.
Cette spécification est dédiée aux processeurs 32 bits afin qu'ils puissent traiter les booléens avec leur type de données natif.
Vous ne pouvez en avoir qu'un ici: vitesse ou mémoire - SUN a choisi la vitesse.
la source
Boolean représente un peu d'informations, mais sa "taille" n'est pas définie avec précision, disent les didacticiels Sun Java. Les littéraux booléens n'ont que deux valeurs possibles: true et false. Voir Types de données Java pour plus de détails.
la source
Pourquoi ne pas créer un fichier .java comme celui-ci:
Vide.java
et une classe comme celle-ci:
NotEmpty.java
Compilez-les tous les deux et comparez les fichiers .class avec un éditeur hexadécimal.
la source