[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 의 종류도 설명해주셨고 다음 부분은 필기노트