티스토리 뷰

Hotspot JVM 그러니까 Sun, HP, Windows, Linux, Mac 등에서 사용되는 JVM은 Generational Heap 구조를 가지고 있다. Generational Heap이란 Java Object의 활용도에 따라 Object가 위치하는 영역을 구분해 놓은 것으로 말할 수 있다.

Hotspot JVM의 Heap Generation의 구조는 아래의 그림과 같은데 Sun사에서 Heap을 이렇게 디자인한 것은 경험적으로 알게된 어떠한 사실들 때문이다. 그 경험적 지식을 Weak Generation Hypothesis라고 한다.



이 가설은 두가지 사실로 구성이 되어 있다.

첫 번째는 바로 High Infant Mortality. 우리말로 하면 높은 유아 사망률 정도가 된다. 이것은 Java Object는 생겨난지 얼마 되지 않아 바로 Garbage가 된다는 사실이다. 그렇기 때문에 새로 할당되는 Object가 모여있는 Young Generation의 경우에는 Garbage Object를 찾는 것 보다 Live Object를 찾는 것이 훨씬 효율적이다. 그리고 Garbage 를 지우는 방식도 Garbage를 찾아서 지우는 것 보다는 전반적으로 개간해 버리는 것이 훨씬 빠르게 된다. 그래서 Young Generation의 Garbage Collection 방식도 그러한 식으로 되어 있다.

두 번째는 Older Object가 Young Object를 참조하는 것은 상당히 드문 일이라는 것이다. 다시 말해 할아버지와 친구 먹는 아이는 별로 없다는 얘기가 된다. 사람처럼 Java Object도 비슷한 나이끼리 어울린다. 그래도 나이를 초월한 교제는 불가능한 것은 아니다. 이것은 Java도 마찬가지이다.

그런데 이러한 드문 경우가 있을 지 몰라 Young Generation을 Garbage Collection 하면서 Old Generation까지 찾아다니게 되면 Garbage Collection시간이 너무나 오래 걸리게 된다. 그래서 Sun은 Write Barrier와 Card Table이란 것을 만들어 내었다. 이것은 쉽게 말해 Old Generation의 약도 같은 것으로 만약 Young Generation으로 향하는 참조가 생기면 그 영역의 Card가 뒤집어 진다.


그래서 Young Generation의 Garbage Collection을 할 때에 뒤집어진 Card에 해당하는 Old Generation의 영역만 탐색하면 되도록 되어 있다. Write Barrier는 Java Code를 해석하는 부분에 포함된 가벼운 연산으로 Old Generation에서 Young으로 가는 참조가 생기면 Card를 뒤집도록 하는 작업을 수행한다.
저작자 표시 비영리 변경 금지
신고
댓글
댓글쓰기 폼