Garbage Collection
정의
Garbage Collection이란?
자바의 메모리 관리 방법 중 하나로 JVM의 heap 영역에 동적으로 할당했던 메모리 중 필요없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스
장점
- 이미 해제 된 메모리에 접근 방지
- 이미 해제 된 메모리를 다시 해제 하는 버그 방지
- 메모리 누수 방지
단점
- 메모리 해제 타이밍 예측이 어려움
- Garbage Collection 이 일어나는 타이밍과 점유 시간 예측 어려움
- 객체가 필요 없어지는 시점을 프로그래머가 알고 있는 경우에도, 메모리 해제 시점을 추적해야 함
Garbage 탐지
- Heap Memory 객체를 참조하는 Root 목록을 순회하며 참조 여부 확인
- Heap Memory 를 순회하며 Root 와 관계없는 객체 해제(Sweap)
- 인접한 객체들을 이동시켜 빈 공간을 채움(Compaction)
- 객체 이동이 끝나면 깨끗한 상태의 메모리를 얻음
세대별 Garbage Collection
- “생성된지 얼마 안된 객체들은 빨리 해제될 가능성이 높다” 라는 가정
- CLR은 메모리를 구역별로 나누어 메모리에서 빨리 해제될 객체와 오래 남아있을 객체를 따로 관리
- 0, 1, 2 세가지의 세대 존재, 숫자가 낮을 수 록 빨리 해제될 가능성이 높은 객체들을 관리
- 객체는 Garbage Collection을 겪은 횟수가 많을 수록, 높은 세대로 이동
- 각 세대의 임계치에 따라 Garbage Collection 수행
- 2세대 Heap Memory 가 가득차면, 어플리케이션을 일시중단, 모든 세대에 대해서 다시 GC 실행
댓글남기기