-
Garbage Collection개발하면서/etc 2009. 7. 2. 11:48반응형예전부터 조사해봐야지 생각만하다가 했음
나름대로 정리한것
우선 Java의 메모리 구조는 Eden, Survivor 1/2, Old, Perm으로 되어있다.
Eden은 객체가 생성되면 저장되는곳이고,
Survivor 1/2는 MinorGC가 일어날때마다 Eden에서 이동되는 공간이다.
Old는 Survivor영역에서 오래된 객체가 저장되는 곳이다.
마지막으로 Perm은 Code가 저장되는 곳으로서 실행이후 일정한 수치를 유지하므로 신경안써도된다.
우선 맨 처음 Application이 실행되면, 객체가 Eden에 저장이 된다. 그러다가 GC가 발생하면 Eden에 있던 객체중 Alive된 객체는 Survivor1로 이동을 하고, Eden에 있는 나머지는 clear된다.
중간에 객체가 생성이되고 Eden에 저장이되다가 GC가 실행이되면 Eden과 Survivor1에 Alive된 객체가 Survivor2로 이동되고 Eden, Survivor1은 clear된다.
다시 한번 GC가 실행되면 Eden, Survivor2에 있는 Alive된객체는 Survivor1에 이동되고 나머지는 Clear된다. 계속 반복을한다
위에서 수행되는 GC를 MinorGC라고한다. (속도 빠름, 자주일어남)
MinorGC가 수행하는 가운데 Survivor에 있는 객체중 오래된 객체는 Old영역으로 이동된다.
Old영역의 GC는 Mark & Compact 알고리즘을 사용한다. Old에 있는 모든 객체를 따라가면서 reference가 연결되지않은 객체를 Mark한뒤, Mark가 끝나면 Mark된객체는 삭제한다.
이것을 Full GC라고 한다. (속도느림, 순간적으로 application멈춤)
https://www.ibm.com/developerworks/java/library/j-jtp11253/확실한 건데 해석하려면 반나절이니. . . 일단 프린트 고고싱
의문점 : 그럼 오래된객체인지는 어떻게 하는지, Alive의여부는 어떻게 정해지는 것인지
이 글은 저의 이해 및 정리한 것이므로 사실과 다를 수 있습니다.
틀린점은 지적해주시면 감사하겠습니다.반응형