Java에서 부울 변수의 크기는 얼마입니까?
누구든지 Java에서 부울 의 비트 크기를 알 수 있습니까 ?
가상 머신에 따라 달라집니다.
가상 머신에 따라 다르지만 Java의 바이트에 대해 질문 의 코드를 마련 할 수 있습니다 .
class LotsOfBooleans
{
boolean a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;
boolean b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;
boolean c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;
boolean d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;
boolean e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
}
class LotsOfInts
{
int a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;
int b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;
int c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;
int d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;
int e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
}
public class Test
{
private static final int SIZE = 1000000;
public static void main(String[] args) throws Exception
{
LotsOfBooleans[] first = new LotsOfBooleans[SIZE];
LotsOfInts[] second = new LotsOfInts[SIZE];
System.gc();
long startMem = getMemory();
for (int i=0; i < SIZE; i++)
{
first[i] = new LotsOfBooleans();
}
System.gc();
long endMem = getMemory();
System.out.println ("Size for LotsOfBooleans: " + (endMem-startMem));
System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));
System.gc();
startMem = getMemory();
for (int i=0; i < SIZE; i++)
{
second[i] = new LotsOfInts();
}
System.gc();
endMem = getMemory();
System.out.println ("Size for LotsOfInts: " + (endMem-startMem));
System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));
// Make sure nothing gets collected
long total = 0;
for (int i=0; i < SIZE; i++)
{
total += (first[i].a0 ? 1 : 0) + second[i].a0;
}
System.out.println(total);
}
private static long getMemory()
{
Runtime runtime = Runtime.getRuntime();
return runtime.totalMemory() - runtime.freeMemory();
}
}
다시 말하면 VM에 따라 다르지만 Sun의 JDK 빌드 1.6.0_11을 실행하는 Windows 랩톱에서 다음과 같은 결과를 얻었습니다.
Size for LotsOfBooleans: 87978576
Average size: 87.978576
Size for LotsOfInts: 328000000
Average size: 328.0
이는 부울이 기본적으로 Sun의 JVM에 의해 각 바이트로 압축 될 수 있음을 의미합니다.
Java에서 부울 값으로 표시되는 실제 정보는 1 비트입니다. 1은 참, 0은 거짓입니다. 그러나 메모리에있는 부울 변수의 실제 크기는 Java에 사양이 정확하게 정의되지 않았습니다. Java의 기본 데이터 유형을 참조하십시오 .
부울 데이터 유형에는 true 및 false의 두 가지 가능한 값만 있습니다. 참 / 거짓 조건을 추적하는 간단한 플래그에이 데이터 유형을 사용하십시오. 이 데이터 유형은 정보의 1 비트를 나타내지 만 "크기"는 정확하게 정의 된 것이 아닙니다.
참고로 ...
Boolean 객체의 배열을 사용하려는 경우에는 사용하지 마십시오. 대신 BitSet을 사용하십시오-성능 최적화가 가능합니다 (그리고 다음 설정 / 설정 해제 비트를 얻을 수있는 몇 가지 멋진 추가 방법).
Java는 boolean데이터 유형에 대해 1 바이트를 예약 하지만 1 비트 만 사용 한다고 읽었습니다 . 그러나 문서에 따르면 "크기"는 정확하게 정의 된 것이 아닙니다 . 여길 봐.
boolean값으로 컴파일 intJVM의 데이터 유형. 를 참조하십시오 여기 .
Java의 부울 크기는 가상 머신에 따라 다릅니다. 그러나 모든 Java 객체는 8 바이트 단위로 정렬됩니다. 부울에는 총 9 바이트의 정보에 대해 8 바이트의 헤더와 1 바이트의 페이로드가 있습니다. 그런 다음 JVM은이를 다음 8의 배수로 반올림하여 java.lang.Boolean의 한 인스턴스가 16 바이트의 메모리를 차지합니다.
정의되지 않았습니다. Jon Skeet이 제안한 것과 같은 작업을 수행하면 주어진 플랫폼에 대한 근사치를 얻을 수 있지만 특정 플랫폼에 대해 정확하게 아는 방법은 프로파일 러를 사용하는 것입니다.
참고 URL : https://stackoverflow.com/questions/383551/what-is-the-size-of-a-boolean-variable-in-java
'IT' 카테고리의 다른 글
| UITableView 명확한 배경 (0) | 2020.09.06 |
|---|---|
| 자바 펼쳐 시간으로 고유 번호 만들기 (0) | 2020.09.06 |
| Swift에서 NSMutableAttributedString을 사용하여 특정 텍스트의 색상 변경 (0) | 2020.09.06 |
| axios에서 헤더 및 옵션을 설정하는 방법은 무엇입니까? (0) | 2020.09.06 |
| Xcode- 다운로드 할 수있는 dSYM이 없습니다. (0) | 2020.09.06 |