우테코 테코톡 GC 를 보고 정리한 내용이다.
이미지 출처는 👉 https://smjeon.dev/etc/jvm-gc/
Heap의 구조는 New Genaration와 Old Generation 영역으로 나뉜다.
새로운 객체가 생성되면 Heap의 Eden이라는 영역에 할당된다.
Eden 영역의 메모리가 다 사용되고 나면 이때 Garbage Collector가 발생한다. → Minor GC
이때 Eden 영역에 대해서 Mark & Sweep 과정이 수행된다. 이 중 살아남은 객체는 Survivor1로 옮겨진다. (영상에서는 Survivor0과 1로 설명되었는데 그림에서는 Survivor1과 2로 나타나져 있다. 그림과 같이 이해하기 위해서 1, 2로 작성했다.)
Eden영역의 Unreachable 객체는 메모리에서 해제된다.
위의 과정이 반복되고 Survival1이 꽉 차면, Survival1 영역에 대해서도 GC가 발생해서 Mark & Sweep과정이 수행된다. 여기서 살아남은 객체들은 Survival2로 이동하고 이동한 객체의 Age 값이 1 증가한다.
Age값이 특정 이상인 객체는 Old Generation으로 옮겨진다. → Promotion
Old Generation이 꽉 차면 여기서 GC가 발생하는데 이를 Major GC라고 한다.
이 과정들이 반복되면서 GC가 메모리관리를 한다.