우아한테크) 던의 JVM의 Garbage Collector
https://www.youtube.com/watch?v=vZRmCbl871I
1. JVM:
운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램. 메모리 관리, Garbage Collector 수행
-> Garbage Collector: 메모리를 간단하게 관리하기 위해 발명됨. 동적으로 할당한 메모리 영역중 사용하지 않는 영역을 탐지하여 해제하는 기능
-> Java에서 동적으로 할당한 메모리가 Heap이고, 모든 Object 타입의 데이터가 할당, Heap영역의 Object를 가리키는 참조변수가 Stack에 할당
메인메서드가 끝나면 stack영역의 변수가 사라지게 되고 Heap영역의 객체타입 데이터만 남게된다 이러한 코드를Unreachable Code라고 하고 Garbage Collector에 저장하게 된다.
2. Garbage Collector 과정 : Mark and Sweep과정
- Garbage Collector가 Stack의 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾아서 마킹한다.
- Reachable Object가 참조하고 잇는 객체도 찾아서 마킹한다.
-> Mark
- 마킹되지 않은 객체를 Heap에서 제거한다. -> Sweep
3. Garbage Colletor가 메모리를 관리하는 방법
Heap영역은 New Generation과 Old Generation 영역으로 나뉘어져 있다. 이중 새로운 New Generation은 Eden, Survival 0, Surviva1으로 구성되어있는데 새로운 데이터는 Eden으로 들어오게 된다. Eden 영역이 다 차게되면 GC(Garbage Collector)가 발생하게 되고 그중 살아남은 데이터가 Survival0으로 이동하게 되며, 이과정이 반복, Survival0이 다차면 또 Mark and Sweep 과정이 발생하게 되고 여기에 살아남은 객체는 Survival1에 이동하게 된다. 여기에 온 객체는 Age값이 증가하게 됨. 이후 Eden이 차게되면 Survival1으로 객체가 이동(0과 1중 한곳은 무조건 비어있어야 한다.)
Survival1영역이 또 차게 되면 Mark and Sweep 과정이 발생하게 되고 여기에 살아남은 객체는 Survival0영역으로 이동하게 되어 이동한 값의 Age는 증가..이러한 과정이 계속되다 특정 age값을 넘어서게 되면 Old Generation영역으로 옮겨진다(Promotion). Old Generation이 다차면 또 GC가 발생한다.
4. GC 종류..
이해를 잘 하지 못했다...공부를 좀 더 한 후에 다시 한번 보는 걸로