2014년 하고 싶은 일 중 하나가 전공 관련 스터디 해보기였다. 

그러던 중 한 개발자 커뮤니티에서 스터디원을 모집했는데  ‘JAVA 그리고 JVM’이라는 스터디를 선택했고,

6개월간의 스터디 기간 동안 배웠던 내용 중 하나가 바로 Garbage Collection이다.

그래서 오늘은 배운내용도 공유할겸 Garbage Collection에 대해 간단히 소개해 보는 시간을 갖도록 하겠다. 


1.Garbage Collection이란 ? 


“Heap storage for objects is reclaimed by an automatic

storage management system(typically a garbage collector);

objects are never explicitly deallocated.”

--Java Virtual Machine Speculation, Section 3.5.3[JVMS2 1999]


2.Garbage Collection의 대상


Garbage Collection은 Garbage를 모으는 작업이다.

그럼 Garbage를 정의하고 넘어가면, Heap과 Method Area에서 사용되지 않는 Object를 의미하는데,

사용되지 않는 다는 의미를 어디까지 볼 것이냐는 문제가 있다.

현재 사용 여부는 Root Set과의 관계로 판단하는데  

Root Set에서 어떤 식으로든 Reference관계가 있다면 Reachable Object.

즉 현재 사용하고 있는 Object로 간주하고 이렇게 판단해서 Reachable Object가 아니면 Garbage

Collection의 대상이 된다.




*여기서 Root Set이란 

한 객체는 여러 다른 객체를 참조하고, 참조된 다른 객체들도 마찬가지로 또 다른 객체들을 참조할 수 있

으므로 객체들은 참조 사슬을 이룬다. 이런 상황에서 유효한 참조 여부를 파악하려면 항상 유효한 최초

의 참조가 있어야 하는데 이를 객체 참조의 root set이라고 한다.


3.Garbage Collection과 단편화 문제

새로운 Object의 할당을 위해 한정된 Heap공간을 재활용하려는 목적으로 수행한다.

재활용을 위해 수행된 메모리의 해지는 할당한 그 자리에서 이루어지기 때문에 Garbage가 빠져 나간자

리는 듬성듬성 해지는데 Heap의 단편화(Fragmentation)발생한다.  

이러한 현상을 방지하기 위해 Compaction과 같은 Algorithm을 사용한다. 


다시한번 정리하면 Garbage Collection이란 

Heap을 재활용하기 위해 Root Set에서 참조되지 않는 Object를 없애 

가용한 공간을 만드는 작업을 말한다.  


이제는 Hotspot JVM의 Garbage Collection 소개해볼까 한다. 

Garbage Collector는 두 가지 가설 하에 만들어지는데 아래와 같다. 



--대부분의 객체는 금방 접근 불가능 상태가 된다. – high infant mortality

--오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.


이러한 가설을 ‘weak generational Hypothesis’이라 하고 

이러한 가설의 장점을 최대한 살리기 위해 Hotspot JVM에서는 크게 2개로 물리적 공간을 나누었다. 



Young 영역(Yong Generation 영역):

  


새롭게 생성한 객체의 대부분이 여기에 위치.대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 매우 많

은 객체가 Young 영역에 생성되었다가 사라짐.이 영역에서 객체가 사라질때 Minor GC가 발생한다고 말함.



Old 영역(Old Generation 영역): 


접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 여기로 복사됨. 대부분 Young 영역보다 크

게 할당하며, 크기가 큰 만큼 Young 영역보다 GC는 적게 발생. 이 영역에서 객체가 사라질 때 Major GC(혹

은 Full GC)가 발생한다고 말함.




*여기서 잠깐 


Old 영역에 있는 객체가 Young 영역의 객체를 참조하는 경우가 있을 때에는 어떻게 처리될까?


Card Table이라는 장치를 마련했는데  

Card Table 이란 Old Generation의 메모리를 대표하는 별도의 메모리 구조를 의미한다. 

만약  Young Object를 참조한 Old Object가 있다면 그 Old Object 시작주소에 해당하는 카드를 Dirty로 

표시하고, 만약 이 Reference가 해제되면 Dirty 표시가 사라진다.

Card Table에 Card들을 늘어 놓고 뒤집어 가며 Reference의 존재 여부를 한 눈에 파악할 수 있게 해준다.


여기까지 정리하고,

다음시간에는 Hotspot JVM의 Garbage Collector에 대해 알아보도록 하겠다. 


참조문헌:


•http://blog.takipi.com/garbage-collectors-serial-vs-parallel-vs-cms-vs-the-g1-and-whats-new-in-java-8/

•http://www.omsn.de/blog/brief-comparison-of-java-7-hotspot-garbage-collectors

•Java Performance Fundamental 김한도 지음 ㈜엑셈

•http://helloworld.naver.com/helloworld/textyle/1329

•http://blog.jelastic.com/2013/01/24/the-truth-about-paas-vertical-scaling-and-why-you-are-being-oversold/

•https://www.google.co.kr/urlsa=t&rct=j&q=&esrc=s&source=web&cd=1&sqi=2&ved=0CCUQFjAA&url=http%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Ftech%2Findex-jsp-140228.html&ei=MMXaVL2TJOe5mwWZnoCADw&usg=AFQjCNHhFj3D5-BfVBPuZ6JL7JF7PCX-UA&sig2=z4gqAR4bu7LA-7IN2lLwbg&bvm=bv.85761416,d.dGc&cad=rja

•http://www.infoq.com/articles/Java_Garbage_Collection_Distilled


'Newbie's Log' 카테고리의 다른 글

Garbage Collection -part 2  (0) 2015.02.25
크롬 브라우저로 MS Office 사용하기.  (0) 2015.02.25
POST vs PUT  (1) 2015.02.08
Unity 3D 인터페이스3  (0) 2014.12.09
Unity 3D 인터페이스2  (0) 2014.12.08
Posted by 알 수 없는 사용자
,