힙 영역 구분

Young Generation 영역

새로 생성된 지 얼마 안 된 객체들이 머무는 공간.

대부분의 객체는 이 공간에서 머무르다 사라지고 일정 조건 이상으로 생명주기가 긴 객체들은 Old Generation 으로 넘어간다. Young Generation은 Eden 영역과 Survivor 영역으로 나뉨.

Eden 영역

클래스의 인스턴스인 객체가 새로 생성되는 공간. 모든 객체는 이곳에서 생성되며, Eden 영역에 다 차게 되면 Young GC (Minor GC)가 발생

Survivor 영역

Eden 영역에서 Young GC가 발생했을 때 살아남은 객체가 옮겨지는 공간으로, Survivor0과 Survivor1의 두 개의 공간으로 나뉨.

Young GC가 이뤄질 때, Survivor 영역도 GC가 이루어지며, Survivor0에서 살아남은 객체는 Eden 영역에서 살아남은 객체와 함께 Survivor1 영역으로 옮겨진다. 즉, S0와 S1은 번갈아가며 사용되고 Survivor 영역에서 일정 조건 이상 살아남으면 Old Generation 영역으로 옮겨진다.

Old Generation 영역

일정 조건(-XX:MaxTenuringThreshold 값 - Minor GC 횟수)이상 Young Generation 에서 살아남은 객체가 옮겨지는 공간. 즉, 생명주기가 긴 객체들이 머무르는 곳이다. Old 영역에서 객체를 옮긴 공간이 없을 때 Full GC가 발생해 생명 주기가 끝난 객체를 정리한다. Full GC 가 발생하면 Young/Old/Permanent Generation 모두 GC 가 발생한다.

Permanent Generation 영역

바이너리 프로그램의 텍스트 메모리와 같은 공간으로, 클래스로더에 의해 클래스가 로드되면 저장되는 곳

GC 발생 시 힙 영역 간의 객체 이동

Eden 영역에서 새로운 객체가 만들어지면서 GC가 발생함에 따라 살아남은 객체는 Survivor 영역에서 일정 조건 머무르다 최종적으로 Old Generation 으로 이동한다.

Young Generation 은 Young 영역을 대상으로 하며, Minor GC라고도 한다. 이때 GC 대상은 Eden 과 Survivor 영역에 있는 객체다.