티스토리 뷰

Sun, HP, Windows, Linux에서 사용되는 Hotspot JVM은 Young Generation과 Old Generation으로 나뉘는 Generational Heap을 가진다고 하였다.

Hotspot JVM의 Garbage Collection에는 하나의 가설이 뒤를 든든히 받치고 있다. 그것은 바로 Weak Generational Hypothsis이다. 내용은 두 가지로 구성되어 있다.

첫째. High Infant Mortality, 우리말로 하면 높은 유아 사망률 정도로 해석할 수 있는데 이것은 대부분의 Object는 생성된 후 얼마 되지 않아 Garbage 가 된다는 것이다.

둘째, Few References from Older to Younger Objects Exists, 살아남아 장수하는 Object는 새로 생성된 Object를 참조하는 경우가 거의 없다는 것이다.

이 두가지 가설로 인해 Hotspot JVM은 Generational Heap을 자신있게 내놓을 수 있었던 것이다. Young Generation에서는 Object를 어떻게든 빠르게 생성하게 해주고 몇 개의 살아남은 Object만 관리하겠다는 전략을 가져가면 되었던 것이고, 오래 살아남는 Object의 경우 차곡차곡 잘 쌓아서 관리 비용을 최소화하는 전략을 가져가면 되었던 것이다.

결국 이것이 생성시기에 따라 목적이 다른 두 종류의  Object를 관리하는 영역을 따로 가져가게 된 것이고 Garbage Collection도 다르게 진행할 수 밖에 없었던 것이다.

Young Generation의 경우 많은 Object가 생기고 바로 Garabge가 된다. 그러므로 Garbage Collection도 남아있는 Live Object를 빨리 찾아내는 것도 중요하지만 대다수를 차지하는 Garbage를 어떻게 하면 빨리 없애느냐도 중요하다. 그리고 자주 자주 이 영역을 비워줘야 하기 때문에 Garbage Coolection은 가볍게 진행되어야 한다.

Old Generation의 경우 Old Object의 특성상 Garbage 가 될 확률이 적지만, 이들은 서로간의 참조가 되어 있을 확률도 있기 때문에 성능을 발휘하기 위해서는 효율성을 강조하게 된다.


저작자 표시 비영리 변경 금지
신고
댓글
  • 프로필사진 황현미 안녕하세요?

    Java performance fundamental교재를 사서 공부하고 있는 독자입니다.
    문의사항이 있어서 이렇게 글 남깁니다.
    개인정보에 올려주신 메일주소(artdb@ex-em.com)이 메일이 전달이 안되더군요.

    현재 garbage collection부분까지 읽고 있는데요~
    125페이지를 보면 Hotspot JVM에서 -XX:MaxTenuringThreshold라는 옵션이 object가 최대 몇번까지 이동해서 young generation에 남아있을수 있는가를 설정하는 max값이라고 하셨는데요.
    제가 설정을 100으로 해도 최종 max값이 31이라고 하셨지요.

    그리고 이것이 앞의 heap영역 설명할때 잠깐 나온 age을 기록하는 비트가 6bit이기때문이고,
    6bit로 표현할수 있는 수치가 32개 밖에 안된다고 하셨는데..
    잘못된거 같습니다.

    6bit로 표현가능한 수치는 64개입니다.
    5bit가 32개 최대 표현이 가능하지요.
    의문점이 생기네요.

    그래서 궁금합니다.
    최대 63번까지 이동이 가능한것인지 아니면
    age가 5비트로 이루어져 있는것인지요?
    (mimi371@naver.com)
    2011.03.28 13:42 신고
댓글쓰기 폼