CS
JVM과 Garbage Collector
matt5659
2022. 11. 2. 23:32
<JVM>
- 운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램
- 메모리 관리, Garbage Collect 수행
<Garbage Collector>
- 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능
<Stack>
- 정적으로 할당한 메모리 영역
- 원시 타입의 데이터가 값과 함께 할당
- Heap 영역에 생성된 Object 타입의 데이터의 참조 값 할당
<Heap>
- 동적으로 할당한 메모리 영역
- Object 타입의 데이터가 할당됨
- Heap 영역의 Object를 가리키는 참조 변수가 Stack에 할당
<Garbage Collection 과정>
- Garbage collector가 stack의 모든 변수를 스캔하면서 각각 어떤 객체(Object)를 참조하고 있는지 마킹
- Reachable Object가 참조하는 객체도 마킹
- 마킹되지 않은 객체를 Heap에서 제거 (Sweep)
* 이러한 과정을 Mark and Sweep이라고 함
<Garbage Collection이 발생하는 시점>
- Heap은 “New Generation”, “Old Generation” 영역으로 나뉨
- “New Generation”은 Eden, Survival0, Survival1으로 나뉨
- 새로운 객체가 생성되면 eden에 저장되고, eden 영역이 가득차게 되면 Garbage collection이 발생됨 (이 때 발생되는 Garbage collection을 Minor GC라고 함)
- Eden 영역에서 GC 이후에 Reachable 객체는 Survival0으로 옮겨지고, UnReachable 객체는 메모리에서 해제된다.
- Survival0 영역이 가득차게 되면 GC가 발생되고, Survival0 영역에서 살아남은 객체는 Survival1영역으로 이동 후 Age 값이 증가되게 된다.
- Survival1 영역이 가득차게되면 GC가 발생되고, 살아남은 객체는 다시 Survival 0으로 이동하게 된다.
- Age 값이 특정 값을 넘어가게 되면 Old Generation 영역으로 옮겨진다. 이 과정을 Promotion이라 한다.
- Old Generation 영역이 가득차게 되면 GC가 발생되고 이때 발생되는 GC를 Major GC라고 한다.