티스토리 뷰

IBM JVM의 Heap은 Java5에 와서 그 구조가 달라지기 시작하였다. Java 1.4.2 버전까지는 One-Heap 구조로 고수하다가  Java 5에서는 Hotspot JVM 처럼 Generational Heap 구조를 사용할 수 있게 되었다.

One Heap구조는 아래의 그림과 같이 구성되어 있다. Heapbase라고 하는 Heap의 처음 주소에서부터 Heaptop 까지 확장이 가능하며 가변크기일 경우 현재까지 할당된 부분을 Heaplimit라고 한다.


Kcluster는 Pinned Class Object가 할당되는 곳으로 Default 1280개의 class entries가 저장이 가능하다. 1개의 Class Entry는 300byte(32it), 560byte(64bit)를 의미한다. Pcluster는  Pinned Object가 할당되는 곳이다. 이 두 영역은 Hotspot JVM의 Permanent Area와 유사하다.

Kcluster가 꽉차면 Pcluster에 할당되고 Pcluster가 꽉차면 2KB의 새로운 Pluster를 새로이 할당하게 된다. Pcluster는 연속된 공간이 아니어도 되기 때문에 Heap여기저기에 할당이 가능하다. 이러한 이유로 Fragmentation의 위험이 커지게 된다.

Java 5에서는 이러한
Fragmentation의 위험이 많이 사라졌다. 그 이유는 KCluster와 PCluster가 Java Heap영역이 아닌 Native Heap(system Heap)으로 따로 저장하기 때문이다.

Cache는 Cache Allocation을 위한 공간으로 Thread간의 경합을 회피하기 위한 TLH(Thread Local Heap)과 512 bytes이하의 작은 Object를 할당받을 때 사용하는 방식이다. 공유공간인 Heap에 공간을 할당받기 위해서는 Heap Lock을 설정하여야 하는데 이것은 성능에 영향을 준다. 그러나 Cache 공간은 Thread별로 공간을 미리 배타적으로 할당 받아 이러한 문제가 발생하지 않아 빠른 할당이 가능하다.

Large Object  Area는 Large Object의 할당을 효과적으로 하기 위한 공간으로 주로 64 Kbytes이상의 Object를 할당할 때 사용되면 Fragmentation등의 이유로 Heap의 할당이 불가능할 경우 일반 Object가 할당되기도 한다.


Subpool Layout은 1.4버전 부터 지원이 되는데 이것은 16개 이상의 CPU를 가진 SMP 시스템에서 Object Allocation의 효율을 위해 설계된 것이다. 이것은 Free Chunk의 크기에 따라 각각 FreeList를 구성하게 된다. 가장 적절한 크기의 Free Space를 할당받기 위한 방식으로 요약이 가능하다.


Java 5에서 Generation Heap이 추가되었다. 이것은 Generation Collector를 선택하면 자동으로 선택되는 구조이다. Allocation Space에 새로운 Object가 할당되고 Tenured Space로 Promotion되는 구조이다.





저작자 표시 비영리 변경 금지
신고

'기술이야기' 카테고리의 다른 글

Hotspot JVM Heap Object Layout  (0) 2009.11.03
Runtime Data Areas - IBM JVM Heap의 구조  (1) 2009.11.03
Runtime Data Areas - Hotspot JVM Heap의 구조  (0) 2009.10.29
Root Set과 Memory Leak  (0) 2009.10.28
댓글
  • 프로필사진 082 안녕하세요. 좋은 글 잘 보았습니다.
    혹 1.6에서 1.4처럼 kcluster, pcluster 사용이 가능한가요? (-Xknnn, -Xpnnn)
    2010.10.31 04:05 신고
댓글쓰기 폼