Garbage Collection
- 자바의 메모리 관리 방법 중 하나로, JVM의 Heap 영역에서 동적으로 할당한 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스를 말한다.
- 개발자 입장에서 메모리 관리, 메모리 누수 문제에 대하여 처리해주기 때문에, 오롯이 개발에만 집중할 수 있다는 장점이 있다.
- 동시에 개발자가 메모리가 언제 해제되는지 정확하게 알 수 없고, GC가 동작하는 동안에는 다른 모든 동작이 정지하기 때문에 오버헤드가 발생하는 단점이 있다.
- GC 대상
- 객채의 상태
- Reachable → 객체가 참조되고 있는 상태
- Unreachable → 객체가 참조되지 않는 상태(GC 대상)
Heap Area
- Young / Old 2개의 영역으로 나누는 전제 조건
- 대부분의 객체는 금방 접근 불가 상태(Unreachable)가 된다.
- 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.
- Young Generation
- 자바 객체가 생성되자마자 저장되고, 생긴지 얼마 안되는 객체가 저장되는 공간
- Heap 영역에 객체가 생성되면 최초 Eden 영역에 할당되며, 이 영역에 데이터가 쌓일 경우 참조 정도에 따라 Survivor의 빈 공간으로 이동되거나 회수된다.
- 대부분의 객체는 Young 영역에서 생성되었다가 사라진다.
- Young Generation 에서의 GC를 Minor GC 라고 한다.
- Old Generation
- Young Generation 영역이 차게 되면 다시 참조 정도에 따라 Old 영역으로 이동되거나 회수된다.
- Rechable 상태를 유지하며, Young 영역에서 살아남은 객체가 복사된다.
- Old 영역 역시 임계점이 넘을 경우 GC가 실행되며, 이때 GC를 실행하는 쓰레드를 제외한 모든 스레드는 작업을 멈추게 된다.
- 이를 Stop-the-World라고 한다.
- Old Generation에서의 GC를 Major GC 혹은 Full GC라고 한다.
Reference