자바고양이 Tomcat 이야기 책을 보고 질문합니다
조회 3,976 · 댓글 1
자바고양이 Tomcat 이야기 책을 보고 질문합니다
27페이지 7 번째 줄에 보면
크기를 알 수 없는 객체는 Heap 영역에 저장되고
그 reference만 Local Variable에 저장된다.
이 reference는 1개 슬롯을 사용한다.
라고 되어있습니다.
32bit 컴퓨터에서는 이 슬롯이 32bit이므로
reference가 저장되는 공간이 32bit이죠.
그렇다면 64bit 컴퓨터에서는
reference가 저장되는 공간이 64bit인지요?
27페이지 7 번째 줄에 보면
크기를 알 수 없는 객체는 Heap 영역에 저장되고
그 reference만 Local Variable에 저장된다.
이 reference는 1개 슬롯을 사용한다.
라고 되어있습니다.
32bit 컴퓨터에서는 이 슬롯이 32bit이므로
reference가 저장되는 공간이 32bit이죠.
그렇다면 64bit 컴퓨터에서는
reference가 저장되는 공간이 64bit인지요?
말씀하신대로 "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)
2. 8점대 (Oracle)
정리하면,
[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)
로그인 후 답글을 남길 수 있습니다.