짧은 대답 : 예, 부울 값은 32 비트 엔터티로 조작되지만 부울 배열은 요소 당 1 바이트를 사용합니다.
더 긴 답변 : JVM은 로컬 변수, 메소드 인수 및 표현식 값을 보유하는 데 사용되는 32 비트 스택 셀을 사용합니다. 1 셀보다 작은 프리미티브는 패딩되고 32 비트 (long 및 double)보다 큰 프리미티브는 2 셀을 사용합니다. 이 기술은 opcode의 수를 최소화하지만 몇 가지 특이한 부작용 (예 : 바이트 마스킹 필요)이 있습니다.
배열에 저장된 프리미티브는 32 비트 미만을 사용할 수 있으며 배열에서 프리미티브 값을로드하고 저장하는 데 서로 다른 opcode가 있습니다. 부울 및 바이트 값은 모두 baload
및 bastore
opcode를 사용하며 이는 부울 배열이 요소 당 1 바이트를 사용함 을 의미합니다.
메모리 내 개체 레이아웃에 관한 한, 이것은 "비공개 구현" 규칙에 따라 다룹니다 . 1 비트, 1 바이트 또는 다른 포스터에서 언급했듯이 64 비트 더블 워드 경계에 정렬 될 수 있습니다. 대부분의 경우 기본 하드웨어의 기본 워드 크기 (32 비트 또는 64 비트)를 사용합니다.
부울이 사용하는 공간의 양을 최소화하는 한 : 대부분의 응용 프로그램에서는 실제로 문제가되지 않습니다. 스택 프레임 (지역 변수 및 메서드 인수 포함)은 그다지 크지 않으며 큰 체계에서 객체의 이산 부울도 그다지 크지 않습니다. 부울이 많은 객체가 많은 경우 getter 및 setter를 통해 관리되는 비트 필드를 사용할 수 있습니다. 그러나 메모리의 패널티보다 더 큰 CPU 시간의 패널티를 지불하게됩니다.