🌱 Spring

JVM의 Garbage Collector

토심 2020. 12. 20. 02:00

[10분 테코톡] 👌던의 JVM의 Garbage Collector

https://www.youtube.com/watch?v=vZRmCbl871I

 

내가 이해한만큼 정리

 

Garbage Collection 과정

1. Garbage Collector 가 Stack 의 모든 변수를 스캔하면서 각각 어떤 객체를 참고하고 있는지 찾아서 마킹한다.

2. Reachable Object 가 참조하고 있는 객체도 찾아서 마킹한다.

3. 마킹되지 않은 객체를 Heap 에서 제거한다.

 

 

 

1,2번을 Mark , 3번을 Sweep 작업이라고 한다.

그래서 Garbage Collection의 과정을 

Mark & Sweep 과정이라 한다.

 

 

 

Heap 은 New Generation 과 Old Generation 으로 구분되는데,

New Generation에는 Eden , Survival0, Survival1 로 영역이 나눠져 있다.

 

새로운 객체는 Eden 영역에 할당된다.

Eden 영역의 메모리가 다 사용이 됐으면 GC가 발생하는데 이때 발생한 GC는 Minor GC 라고 한다.

 

Eden이 꽉 차면 Mark & Sweep 과정이 일어나게 되고, 

Eden 영역의 Reachable 객체는 Survival 0 으로 옮겨진다.

 

그리고 Eden 영역에 있는 Unreachable 객체는 메모리에서 해제된다.

Eden에 메모리 영역이 또 꽉 차게 되면 Minor GC가 일어난다.

 

 

 

Survival 0 이 꽉 차게 되면 Mark & Sweep 과정이 일어나고

여기서 살아남은 객체는 Survival 1 로 이동한다.

이때 이동한 객체는 Age 값이 증가한다.

 

다시 새로운 객체는 Eden에 할당된다.

 

다시 Eden 에서 Minor GC가 일어나서 살아남은 Reachable 객체는 

Survival 0 이 아닌 ,

이미 객체가 차있는 Survival 1 영역에 쌓이게 된다.

즉, Survival 0, Survival 1 둘 중 하나는 항상 비어있는 상태로 유지가 된다.

 

Survival 1 이 다 찼을 때는 Survival 0 영역으로 이동하고, 

이동한 객체는 Age 값이 증가한다.

 

메모리가 다 사용이 되었으면 GC가 일어난다.

 

 

 

Survival 을 이동하면서 특정 Age 값을 넘어서면

Old Generation 영역으로 옮겨진다.

이 과정을 Promotion이라고 한다.

 

Promotion 이 반복되면 Old Generation 에 계속 데이터가 쌓일 거고,

Garbage Collection이 발생하는데

이때 Old Generation 이 GC 하는 과정을 Major GC 라고 한다.

 

지금까지의 과정이 반복되면서 Garbage Collector 가 메모리를 관리한다.

 

 

 

 

Garbage Collector 의 종류도 설명해주셨고 다음 부분은 필기노트

 

 

 

 

 

 


커피 한 잔 후원하기