티스토리 뷰

기술이야기

Hotspot JVM Heap Object Layout

novathinker 2009.11.03 14:31
Hotspot JVM이란 Hotspot Compiler를 사용하는 Sun, HP, Oracle에서 배포하는 JVM을 말한다. 이 Hotspot JVM의 Heap Object Layout은 왼편의 그림과 같다.

Heap에는 Object와 Array만이 존재하는데 Hotspot JVM의 경우 Object는 Header가 2개, Array에는 Header가 3개 존재한다. Array도 사실은 Object의 Layout에 Array Size를 알려주는 Header만 하나 더 추가된 셈이다.

각 Header는 1Word의 크기를 가지며 1 Word란 32 bit머신에서는 32bit의 크기를 가지게 되고 63 bit머신에서는 64 bit의 크기를 가진다.

첫번째 Word인 Mark Word는 Garbage Collection과 Synchronization을 위한 정보를 저장한다.

여기서 GC에 사용되는 것은 6 bit의 Age와 Tag정도이다. Age는 이 Object가 Young Area에서 얼마나 오래 살아남았는지를 알려주는 것이다. 또한 Tag가 11이라는 값을 가지게 되면 Marking되었음을 표시한다.

그밖에 정보는 모두 Synchronization을 위해 사용된다. hashcode는 각 Lock 모드에 따라 값이 정해지며 Biased mode일 때는 이 Object에 lock을 설정한 Thread의 ID가 저장된다.


두번째 Word는 Class Address이다. 이것은 이 Object의 Class Object, 즉 Method Area의 주소를 가리키고 있다.  Array의 경우 Array Size를 위한 Header가 하나 더 추가된다.
저작자 표시 비영리 변경 금지
신고
댓글
댓글쓰기 폼