티스토리 뷰

IT/개발

Garbage Collection

K.Nero 2017. 2. 4. 17:56

Java는 메모리를 할당 받는 것은 개발자가 원하는 만큼 받을 수 있지만 해제는 개발자의 영역이 아닌 JVM의 영역이다. 이 Garbage Collection는 Garbage Collector(이하 GC)에 의해서 수행되며 할당된 객체가 더이상 참조되지 않을 경우 수행되게 된다.

GC는 개발자가 메모리를 명시적으로 해제해야 하는 고민을 덜어 주었지만 의도와 다른 GC 수행으로 잠시 멈추는 현상인해 CPU를 많이 사용하는 프로그램의 경우 어려운 상황을 초래하기도 한다.

Hotspot의 GC
Hotspot은 Generational Collection 방식을 사용하는데 익히 들어왔던 것과 같이 Heap영역을 Young Generation과 Old Generation으로 나누는 것이다.

객체가 처음 생성되는 영역은 Young Generation으로 Young안에서도 Eden 영역에서 Object가 할당된다. 또한 Young 영역은 Eden 외에 두 개의 Survivor 영역이 좋재 하는데 이는 Young의 GC에서 살아남은 Object가 Copy되는 곳이다. 두 개의 Survivor 영역은 Old Generation으로 가기 위한 대기 장소로 볼 수 있다. Young 영역에서 오래 살아 남은 Object는 Old로 넘어가게 되는데 이것을 Promotion이라고 한다. 

GC는 두 종류로 나눠지는데 Minor GC는 Young에 대한 GC를 수행하는 것을 의미하며 한 번은 Eden, Survivor1 영역을 정리하고 남은 객체를 Survivor2영역으로 이동 시키고 한 번은 Eden, Survivor2 영역을 정리하고 남은 객체를 Survivor1 영역으로 이동 시킨다. 이렇게 반복하다가 오래 살아 남은 객체는 Old 영역으로 이동하게 된다.

Major GC는 Promotion 중 메모리가 부족해져 발생하게 되며 Full GC라고도 불린다. Major GC는 mark and compact 알고리즘으로 진행되는데 참조되지 않은 객체를 mark 해두었다가 이 작업이 끝나면 mark된 객체를 삭제하게 된다. 또한 Major GC는 Permanent Area가 부족하게 되도 발생한다. 여기서 Permanent 영역은 Method Area로 class의 정보등이 저장되는 영역이다.

GC의 구조는 JDK에서 기본으로 제공되는 VisualVM에서 VisualGC Plugin을 설치하면 아래와 같이 눈으로 확인해 볼 수 있다.

현재 각 벤더 사들은 다양한 GC를 제공하기 때문에 어떤 GC를 선택하느냐에 따라 성능에 많은 영향을 줄 수 있다. 여기서는 좋은 GC라고 불리우는 G1 Collector에 대해 알아 보겠다.

Garbage First Collector
Hotspot의 Garbage First Collector(G1)은 CMS Collector의 Pause Time을 개선한 것으로 물리적인 Generation이 구분을 없애고 전체 Heap을 1Mbytes 단위의 Region으로 재편했다. Region중 Garbage 로만 꽉찬 Region 부터 GC를 수행하기 때문에 붙여진 이름으로 발견된 영역은 즉시 GC가 이루어 진다. 그리고 Garbage region의 Live Object는 다른 Old Region으로 Compaction된다.

G1에서는 Young와 Old는 개념적으로만 구분되며 Regon 단위로 GC가 이루어지기 때문에 전체적인 Suspend가 아닌 GC대상의 Region를 사용하는 Thread에만 국한된다.

'IT > 개발' 카테고리의 다른 글

Redis HA  (0) 2018.04.05
Github 에 개인 maven repository 생성하기  (0) 2018.02.14
Object class  (0) 2017.02.01
Socket Option  (0) 2016.01.02
IO / NIO  (0) 2016.01.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함