티스토리 뷰

기술이야기

IBM JVM Heap Object Layout

novathinker 2009.11.03 15:24
IBM JVM은 1.4 버전까지는 Object와 Array의 구분 없이 세개의 Header를 가진다. 역시 각 header는 1 Word (32bit 머신 32 bits)의 크기를 가진다. 첫번째 header는 Object Size와 Flag정보를 보유하고 있다. Flag는 GC를 위한 정보와 Pinned 또는 Dosed Object 여부를 체크한다. 


두번째 header는 Object의 경우 Method Table을 위한 Pointer를 가지고 있게 되고 Array의 경우는 Array 엔트리 개수 정보를 가지고 있게 된다. 세번째 header는 lock 정보를 저장한다. Fat Lock mode라면 Monitor Index를 위해 23 bit가 할당되고 Thin Lock의 경우 15 bits의 Thread Index정보와 Lock count를 저장한다.

Java 5에 와서 Object Layout은 큰 변화를 맞게 된다. 일단 Object의 경우 Header가 두개, 그리고 Array의 경우 Header가 3개인 구조로 변경되었다.  첫번째 header는 기존과 같이 많은 정보를 가지고 있는 것이 아니라 OI 라는 구조체의 주소를 갖게 된다. 이것은 Object Information의 약자로 아래 그림과 같은 정보를 가지고 있게 된다.


두번째 header는 역시 lock word이긴 하지만 예전 버전과 약간 달라진 것이 눈에 띈다. 일단 Resevation Bit라는 것이 있는데 이것은 Lock Reserved Mode인 경우 사용된다. 만약 contention bit을 monitor shape bit로 사용하고 resevation bit를 사용하지 않게 되면 이전 버전의 lock word와 동일하게 사용된다. Array의 경우 세번째 header에서 Array의 크기 정보를 저장한다.
댓글
댓글쓰기 폼