คำตอบสั้น ๆ : ใช่ค่าบูลีนถูกจัดการเป็นเอนทิตี 32 บิต แต่อาร์เรย์ของบูลีนใช้ 1 ไบต์ต่อองค์ประกอบ
คำตอบที่ยาวขึ้น: JVM ใช้สแต็กเซลล์ 32 บิตใช้เพื่อเก็บตัวแปรโลคัลอาร์กิวเมนต์เมธอดและค่านิพจน์ สารดึกดำบรรพ์ที่มีขนาดเล็กกว่า 1 เซลล์จะถูกนำออกมาส่วนดั้งเดิมที่มีขนาดใหญ่กว่า 32 บิต (ยาวและสองเท่า) ใช้เวลา 2 เซลล์ เทคนิคนี้ช่วยลดจำนวน opcodes ให้เหลือน้อยที่สุด แต่มีผลข้างเคียงที่แปลกประหลาด (เช่นความจำเป็นในการปิดบังไบต์)
Primitives ที่เก็บในอาร์เรย์อาจใช้น้อยกว่า 32 บิตและมี opcodes ที่แตกต่างกันในการโหลดและจัดเก็บค่าดั้งเดิมจากอาร์เรย์ ค่าบูลีนและไบต์ทั้งคู่ใช้baload
และbastore
opcodes ซึ่งหมายความว่าอาร์เรย์บูลีนใช้เวลา 1 ไบต์ต่อองค์ประกอบ
เท่าที่โครงร่างออบเจ็กต์ในหน่วยความจำดำเนินไปสิ่งนี้จะครอบคลุมภายใต้กฎ "การนำไปใช้งานส่วนตัว" ซึ่งอาจเป็น 1 บิต 1 ไบต์หรือตามที่ผู้โพสต์อื่นระบุไว้ซึ่งสอดคล้องกับขอบเขตคำสองคำ 64 บิต ส่วนใหญ่จะใช้ขนาดคำพื้นฐานของฮาร์ดแวร์พื้นฐาน (32 หรือ 64 บิต)
เท่าที่จะลดจำนวนพื้นที่ที่บูลีนใช้: มันไม่ใช่ปัญหาสำหรับแอปพลิเคชันส่วนใหญ่ เฟรมสแต็ก (ถือตัวแปรโลคัลและอาร์กิวเมนต์เมธอด) ไม่ใหญ่มากนักและในโครงร่างใหญ่บูลีนแยกในออบเจ็กต์ก็ไม่ได้ใหญ่ขนาดนั้นเช่นกัน หากคุณมีวัตถุจำนวนมากที่มีบูลีนจำนวนมากคุณสามารถใช้บิตฟิลด์ที่จัดการผ่านทาง getters และ setters ของคุณ อย่างไรก็ตามคุณจะต้องเสียค่าปรับในเวลา CPU ซึ่งอาจมากกว่าค่าปรับในหน่วยความจำ