2012-07-13 3 views
1

int는 거의 모든 플랫폼에서 4 바이트를 차지합니다. Java 참조는 어떻습니까?Java 참조는 얼마나 많은 힙 공간을 차지합니까?

Map<String, String> m = null; 

변수 m은 32 비트/64 비트 JVM의 공간을 얼마나 차지합니까?

byte[] b = new byte[10]; 

위의 바이트 배열은 10 바이트를 차지하지만 b에 대한 참조 공간은 얼마나됩니까? B는 주소와 길이가 최소한 포함되어 있으면 누구나 세부 사항을 줄 수 있다고 생각하십니까?

+1

참조가 힙에없는 경우 힙 공간이 필요하지 않습니다. – EJP

답변

0

사실상 대부분의 JVM에서 32 비트 JVM의 모든 참조는 4 바이트, 하나의 64 비트 JVM, 참조는 8 바이트를 사용합니다.

+0

JVM에서 압축 된 Oops를 사용하는 경우 64 비트 JVM에서 참조가 32 비트가됩니다. 이것은 최근 JVM의 기본값입니다. –

10

최근 64 비트 JVM에서 최대 32GB의 힙에 Compressed Oops을 사용하므로 객체의 참조는 대부분의 JVM에서 4 바이트를 사용합니다 (32 비트 또는 64 비트). 일부 64 비트 JVM에서는 8 바이트 .

그러나 스택의 크기는 일반적으로 계산되지 않으므로 힙 크기 만 중요하며이 경우 힙에서는 크기가 필요하지 않습니다.

byte[10]은 실제로 8 바이트의 헤더를 포함하고 ~ 8 바이트 경계에 오브젝트가 할당되어 ~ 24 바이트를 사용합니다.

0

주어진 스펙에 따르면, JVM 개발자는 32 비트 컴퓨터에서 32 비트, 64 비트 컴퓨터에서 32 비트 또는 64 비트를 사용하는 참조 변수의 메모리에 제약이 없습니다 jvm 프로그래머의 경우

관련 문제