- 메모리 관리 방법 중 하나. JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스.
- 장점
- 생산성 증가
- 단점
- GC동작 시점 조절 불가. (메모리가 언제 해제되는지 모름)
- GC 작동 중 GC관련 스레드를 제외한 모든 스레드 멈춤. 이를 STW(Stop-The-World) 라고 함.
- GC 대상
- 가비지 컬렉션은 특정 객체의 도달성, 도달능력(Reachability) 라는 개념을 적용함.
- Reachable : 객체에 유효한 레퍼런스 존재(참조되고 있는 상태)
- Unreachable : 객체가 참조되고 있지 않은 상태(GC 대상)
- JVM 메모리에선 객체들은 실질적으로 Heap 영역에서 생성. Method Area나 Stack Area에서는 Heap Area에 생성된 객체의 주소만 참조하는 형식으로 구성.
- 가비지 컬렉션은 특정 객체의 도달성, 도달능력(Reachability) 라는 개념을 적용함.
기본 알고리즘
- Mark-Sweep-Compact
- Mark : Root Space로부터 그래프 순회를 통해 연결된 객체를 찾아내어 마킹
- Sweep : 참조하고 있지 않은 객체(Unreachable) 들을 Heap에서 제거
- Compact : Sweep 후 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 압축. (GC 종류에 따라 하지 않는 경우도 있음)
- Root Space
- Stack의 로컬 변수
- Method Area의 Static 변수
- Native Method Stack의 JNI 참조
JVM의 Heap 구조
- Young Generation (해당 영역의 GC : Minor GC)
- 새로운 객체들이 할당되는 영역
- 구조
- Eden : new를 통해 새로 생성된 객체가 위치. → GC 이후 계속 Reachable 객체들을 Survivor 영역으로 보냄.
- Survivor 0 / 1 : 최소 1번 이상의 GC 이후 살아남은 객체가 존재하는 영역. 둘 중 하나는 꼭 비어있어야함
- Old Generation (해당 영역의 GC : Major GC || Full GC)
- Young 영역에서 Reachable 상태를 유지하여 살아남은 객체가 복사되는 영역.
- Young 영역에서 Reachable 상태를 유지하여 살아남은 객체가 복사되는 영역.
구성
GC 알고리즘 종류
'프로그래밍 언어 > Java' 카테고리의 다른 글
JVM 메모리 구조 (0) | 2024.02.25 |
---|---|
JVM(Java Virtual Machine)이란? (0) | 2024.02.25 |