Die Java Virtual Machine-Spezifikation besagt, dass boolesche primitive Typen nur eingeschränkt unterstützt werden.
Es gibt keine Anweisungen für Java Virtual Machine, die ausschließlich für Operationen mit booleschen Werten vorgesehen sind. Stattdessen werden Ausdrücke in der Java-Programmiersprache, die mit booleschen Werten arbeiten, kompiliert, um Werte des Datentyps Java Virtual Machine Int zu verwenden.
Das Obige impliziert (obwohl ich es möglicherweise falsch interpretiert habe), dass der Datentyp int verwendet wird, wenn mit Booleschen Werten gearbeitet wird, dies ist jedoch ein 32-Bit-Speicherkonstrukt. Vorausgesetzt, ein Boolescher Wert repräsentiert nur 1 Informationsbit:
- Warum wird ein Byte- oder Kurztyp nicht als Proxy für einen Booleschen Wert anstelle von int verwendet?
- Was ist für eine bestimmte JVM die zuverlässigste Methode, um genau herauszufinden, wie viel Speicher zum Speichern eines Booleschen Typs verwendet wird?
Ein einzelner Boolescher Wert irgendwo in der Vererbungshierarchie kann bis zu 8 Bytes verwenden! Dies liegt an der Polsterung. Weitere Details finden Sie unter Wie viel Speicher wird von meinem Java-Objekt verwendet? ::
quelle
Die 5. Ausgabe von Java in Kürze (O'Reilly) besagt, dass ein boolescher primitiver Typ 1 Byte ist. Das könnte falsch sein, basierend auf dem, was die Untersuchung des Haufens zeigt. Ich frage mich, ob die meisten JVMs Probleme haben, Variablen weniger als ein Byte zuzuweisen.
quelle
Die boolesche Zuordnung wurde unter Berücksichtigung einer 32-Bit-CPU durchgeführt. Der int-Wert hat 32 Bit, sodass er in einer Operation verarbeitet werden kann.
Hier ist eine Lösung aus Peter Norvigs Java IAQ: Selten beantwortete Fragen zum Messen der Größe (mit etwas Ungenauigkeit):
quelle
CPUs arbeiten mit einer bestimmten Datentyplänge. Bei 32-Bit-CPUs sind sie 32 Bit lang und daher in Java als "int" bezeichnet. Alles, was darunter oder darüber liegt, muss auf diese Länge gefüllt oder aufgeteilt werden, bevor die CPU es verarbeiten kann. Dies nimmt nicht viel Zeit in Anspruch, aber wenn Sie für grundlegende Vorgänge 2 CPU-Zyklen anstelle von 1 benötigen, bedeutet dies doppelte Kosten / Zeit.
Diese Spezifikation ist für 32-Bit-CPUs vorgesehen, damit sie Boolesche Werte mit ihrem nativen Datentyp verarbeiten können.
Sie können hier nur eine haben: Geschwindigkeit oder Speicher - SUN hat sich für Geschwindigkeit entschieden.
quelle
Boolean stellt eine Information dar, aber seine "Größe" ist nicht genau definiert, sagen Sun Java-Tutorials. Boolesche Literale haben nur zwei mögliche Werte: wahr und falsch. Weitere Informationen finden Sie unter Java-Datentypen .
quelle
Warum nicht eine .java-Datei wie folgt erstellen:
Empty.java
und eine Klasse wie diese:
NotEmpty.java
Kompilieren Sie beide und vergleichen Sie die .class-Dateien mit einem Hex-Editor.
quelle