Réponse courte: oui, les valeurs booléennes sont manipulés comme 32-bit entités, mais les tableaux de booléens utilisation 1 octet par élément.
Plus réponse: la JVM utilise 32 bits pile cellulaire, utilisé pour contenir des variables locales, des arguments de méthode, et les valeurs d'expression. Les Primitives qui sont plus petits que 1 cellule sont rembourrées, des primitives de plus de 32 bits (long et double) prendre 2 cellules. Cette technique réduit le nombre d'opcodes, mais ne avoir des propres effets secondaires (tels que la nécessité de masque octets).
Primitives stockées dans des tableaux peut utiliser moins de 32 bits, et il y a différents opérateurs pour charger et stocker des valeurs primitives à partir d'un tableau. Boolean et valeurs d'octets à la fois utiliser le baload et bastore opcodes, ce qui implique que les tableaux de booléens prendre 1 octet par élément.
Aussi loin que la mémoire de l'objet de mise en page, il est couvert en vertu de la "mise en œuvre privée" des règles, il peut être de 1 bit 1 octet, ou comme une autre affiche a noté, en l'alignant sur un 64 bits en double limite de mot. Très probablement, il prend le texte de base de la taille du matériel sous-jacent (32 ou 64 bits).
Aussi loin que de réduire au minimum la quantité d'espace que les booléens utilisation: il n'est vraiment pas un problème pour la plupart des applications. Pile d'images (en maintenant les variables locales et les arguments de méthode) ne sont pas très grandes, et dans le grand plan discret boolean dans un objet qui n'est pas grande non plus. Si vous avez beaucoup d'objets avec beaucoup de booléens, alors vous pouvez utiliser un peu de champs qui sont gérés par l'intermédiaire de votre getters et setters. Cependant, vous devrez payer une pénalité en temps de calcul qui est sans doute plus important que la pénalité dans la mémoire.