Specyfikacja wirtualnej maszyny języka Java mówi, że wsparcie dla wartości logicznych jest ograniczone typów pierwotnych .
Nie ma instrukcji maszyny wirtualnej Javy poświęconej wyłącznie operacjom na wartościach logicznych. Zamiast tego wyrażenia w języku programowania Java, które operują na wartościach logicznych, są kompilowane w celu użycia wartości typu danych int maszyny wirtualnej Java.
Z powyższego wynika (chociaż mogłem to źle zinterpretować), że typ danych int jest używany podczas operacji na logicznych, ale jest to konstrukcja pamięci 32-bitowej. Biorąc pod uwagę, że wartość logiczna reprezentuje tylko 1 bit informacji:
- Dlaczego typ bajtowy lub krótki nie jest używany jako proxy dla wartości logicznej zamiast int?
- Jaki jest najbardziej niezawodny sposób sprawdzenia, ile pamięci jest używane do przechowywania typu boolowskiego dla dowolnej maszyny JVM?
Pojedyncza wartość logiczna gdzieś w hierarchii dziedziczenia może używać do 8 bajtów! Wynika to z wypełnienia. Więcej szczegółów można znaleźć w artykule Ile pamięci jest używane przez mój obiekt Java? :
źródło
Piąte wydanie Java in a Nutshell (O'Reilly) mówi, że prymitywny typ logiczny ma 1 bajt. To może być błędne, biorąc pod uwagę to, co pokazuje badanie sterty. Zastanawiam się, czy większość maszyn JVM ma problemy z przydzielaniem mniej niż bajtu dla zmiennych.
źródło
Mapowanie boolowskie zostało wykonane z myślą o 32-bitowym procesorze. Wartość int ma 32 bity, więc można ją przetworzyć w jednej operacji.
Oto rozwiązanie z Java IAQ Petera Norviga: Rzadkie odpowiedzi na pytania dotyczące pomiaru rozmiaru (z pewną niedokładnością):
źródło
Procesory działają na określonej długości typu danych. W przypadku procesorów 32-bitowych mają one długość 32 bitów i dlatego w Javie nazywamy to „int”. Wszystko poniżej lub powyżej, które musi zostać wypełnione lub podzielone do tej długości, zanim procesor będzie mógł to przetworzyć. Nie zajmuje to dużo czasu, ale jeśli potrzebujesz 2 cykli procesora zamiast 1 do podstawowych operacji, oznacza to podwojenie kosztów / czasu.
Ta specyfikacja jest przeznaczona dla 32-bitowych procesorów, aby mogły przetwarzać wartości logiczne z ich rodzimym typem danych.
Możesz mieć tylko jedną: prędkość lub pamięć - SUN zdecydował się na prędkość.
źródło
Boolean reprezentuje jeden fragment informacji, ale jego „rozmiar” nie jest czymś, co jest precyzyjnie zdefiniowane, mówią tutoriale Sun Java. Literały logiczne mają tylko dwie możliwe wartości: prawda i fałsz. Aby uzyskać szczegółowe informacje, zobacz Typy danych Java .
źródło
Dlaczego nie utworzyć takiego pliku .java:
Empty.java
i jedną taką klasę:
NotEmpty.java
Skompiluj je oba i porównaj pliki .class z edytorem szesnastkowym.
źródło