자바고양이 Tomcat 이야기 책을 보고 질문합니다

조회 3,976 · 댓글 1
vvanallen작성자2017년 9월 30일
자바고양이 Tomcat 이야기 책을 보고 질문합니다

27페이지 7 번째 줄에 보면

크기를 알 수 없는 객체는 Heap 영역에 저장되고
그 reference만 Local Variable에 저장된다.
이 reference는 1개 슬롯을 사용한다.

라고 되어있습니다.

32bit 컴퓨터에서는 이 슬롯이 32bit이므로
reference가 저장되는 공간이 32bit이죠.

그렇다면 64bit 컴퓨터에서는
reference가 저장되는 공간이 64bit인지요?
nnastyboy2017년 10월 1일
말씀하신대로 "64bit 컴퓨터에서는 reference가 저장되는 공간이" 64bit 입니다. 정확히는 64bit JVM인 경우입니다.

정리하면,


[ul]
[li]32bit JVM의 경우는 object reference가 32bit[/li]
[li]64bit JVM의 경우는 object reference가 64bit[/li]
[/ul]

다만 64bit JVM이라도 heap size가 32GB보다 적으면 -XX:+UseCompressedOops 옵션이 default로 설정되는데, 이 옵션에 의하여 32bit object reference가 됩니다. 물론 -XX:-UseCompressedOops로 비활성화시킬 수 있습니다. ( 오라클 문서 링크)

1. 7점대 (OpenJDK)

$ java -XX:+PrintFlagsFinal -version|grep UseCompressedOops

bool UseCompressedOops := true {lp64_product}
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.3.el6_6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)


2. 8점대 (Oracle)

$ java -XX:+PrintFlagsFinal -version|grep UseCompressedOops

bool UseCompressedOops := true {lp64_product}
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

로그인 후 답글을 남길 수 있습니다.