Câu trả lời ngắn gọn: có, các giá trị boolean được xử lý như các thực thể 32 bit, nhưng các mảng boolean sử dụng 1 byte cho mỗi phần tử.
Câu trả lời dài hơn: JVM sử dụng một ô ngăn xếp 32 bit, được sử dụng để chứa các biến cục bộ, đối số phương thức và giá trị biểu thức. Các nguyên thủy nhỏ hơn 1 ô sẽ được đệm ra, các nguyên lớn hơn 32 bit (dài và gấp đôi) lấy 2 ô. Kỹ thuật này giảm thiểu số lượng mã opcodes, nhưng có một số tác dụng phụ đặc biệt (chẳng hạn như cần phải che dấu byte).
Các mã nguyên thủy được lưu trữ trong mảng có thể sử dụng ít hơn 32 bit và có các mã quang khác nhau để tải và lưu trữ các giá trị nguyên thủy từ một mảng. Giá trị boolean và byte đều sử dụng mã baload
và bastore
opcodes, điều này ngụ ý rằng mảng boolean chiếm 1 byte cho mỗi phần tử.
Theo như cách bố trí đối tượng trong bộ nhớ, điều này được đề cập trong quy tắc "triển khai riêng tư" , nó có thể là 1 bit, 1 byte hoặc như một người đăng khác đã lưu ý, được căn chỉnh theo ranh giới từ kép 64 bit. Rất có thể, nó có kích thước từ cơ bản của phần cứng bên dưới (32 hoặc 64 bit).
Về việc giảm thiểu dung lượng mà boolean sử dụng: nó thực sự không phải là vấn đề đối với hầu hết các ứng dụng. Khung ngăn xếp (chứa các biến cục bộ và đối số phương thức) không lớn lắm và trong lược đồ lớn, boolean rời rạc trong một đối tượng cũng không lớn. Nếu bạn có nhiều đối tượng với nhiều boolean, thì bạn có thể sử dụng các trường bit được quản lý thông qua getters và setters của bạn. Tuy nhiên, bạn sẽ phải trả một hình phạt trong thời gian CPU có thể lớn hơn hình phạt trong bộ nhớ.