Garbage Collection

yeon·2021년 7월 25일
0

우테코 테코톡 GC 를 보고 정리한 내용이다.

이미지 출처는 👉 https://smjeon.dev/etc/jvm-gc/

Garbage Collector 과정

  1. Garbage Collector가 Stack의 모든 변수를 스캔하면서 각각 Heap의 어떤 객체를 참조하고 있는지 찾아서 마킹한다. (Mark)
  2. Reachable Object가 참조하고 있는 객체도 찾아서 마킹한다. (Mark)
  3. 마킹 되지 않은 객체를 Heap에서 제거한다. (Sweep)

Garbage Collection은 언제 일어나는가?

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 증가한다.

https://smjeon.dev/assets/img/gc/gc.gif

Age값이 특정 이상인 객체는 Old Generation으로 옮겨진다. → Promotion

https://smjeon.dev/assets/img/gc/14.png

https://smjeon.dev/assets/img/gc/15.png

Old Generation이 꽉 차면 여기서 GC가 발생하는데 이를 Major GC라고 한다.

https://smjeon.dev/assets/img/gc/16.png

이 과정들이 반복되면서 GC가 메모리관리를 한다.

0개의 댓글