The Java Virtual Machine Spesifikasi mengatakan bahwa ada dukungan terbatas untuk boolean primitif jenis.
Tidak ada instruksi mesin virtual Java yang hanya didedikasikan untuk operasi pada nilai boolean. Sebaliknya, ekspresi dalam bahasa pemrograman Java yang beroperasi pada nilai boolean dikompilasi untuk menggunakan nilai tipe data int mesin virtual Java.
Hal di atas menyiratkan (walaupun saya mungkin telah salah menafsirkannya) bahwa tipe data int digunakan ketika beroperasi pada boolean, tetapi ini adalah konstruksi memori 32 bit. Mengingat bahwa boolean hanya mewakili 1 bit informasi:
- Mengapa byte, atau short, type tidak digunakan sebagai proxy untuk boolean, bukan int?
- Untuk JVM tertentu, apa cara paling andal untuk mengetahui dengan tepat berapa banyak memori yang digunakan untuk menyimpan jenis boolean?
Satu boolean di suatu tempat dalam hierarki pewarisan dapat menggunakan hingga 8 byte! Ini karena bantalan. Detail selengkapnya dapat ditemukan di Berapa banyak memori yang digunakan oleh objek Java saya? :
sumber
Edisi ke-5 Java in a Nutshell (O'Reilly) mengatakan tipe primitif boolean adalah 1 byte. Itu bisa salah, berdasarkan apa yang ditunjukkan oleh pemeriksaan heap. Saya ingin tahu apakah sebagian besar JVM memiliki masalah dengan mengalokasikan kurang dari satu byte untuk variabel.
sumber
Pemetaan boolean dilakukan dengan CPU 32-bit. Nilai int memiliki 32 bit sehingga dapat diproses dalam satu kali operasi.
Berikut adalah solusi dari IAQ Java Peter Norvig: Pertanyaan yang Sering Dijawab untuk mengukur ukuran (dengan beberapa ketidaktepatan):
sumber
CPU beroperasi pada panjang tipe data tertentu. Untuk CPU 32bit, panjangnya 32 bit dan oleh karena itu disebut 'int' di Java. Segala sesuatu di bawah atau di atasnya yang harus diisi atau dipisahkan dengan panjang ini sebelum CPU dapat memprosesnya. Ini tidak memakan banyak waktu, tetapi jika Anda membutuhkan 2 siklus CPU, bukan 1 untuk operasi dasar, ini berarti biaya / waktu dua kali lipat.
Spesifikasi ini didedikasikan untuk CPU 32bit sehingga mereka dapat memproses boolean dengan tipe data asli mereka.
Anda hanya dapat memiliki satu di sini: kecepatan atau memori - SUN memutuskan kecepatan.
sumber
Boolean mewakili satu bit informasi, tetapi "ukurannya" bukanlah sesuatu yang didefinisikan secara tepat, katakanlah tutorial Sun Java. Literal Boolean hanya memiliki dua kemungkinan nilai, yaitu benar dan salah. Lihat Tipe Data Java untuk detailnya.
sumber
Mengapa tidak membuat satu file .java seperti ini:
Empty.java
dan satu kelas seperti ini:
NotEmpty.java
Kompilasi keduanya dan bandingkan file .class dengan hex editor.
sumber