Contents
가비지 컬랙터가비지 컬랙터
- 가비지 컬랙터
- JVM의 힙 영역에서 동적으로 할당했던 메모리 중 필요없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스
- 가비지 컬랙션의 대상은 유효한 래퍼런스가 없는 객체이다.
- 가비지 컬랙터의 청소 방식
- Stop The World : 가비지 컬랙션을 실행하기 위해 JVM이 애플리케이션의 실행을 멈추는 작업, GC가 완료되면 작업이 재개된다.
- Mark(식별) : Root space로부터 그래프 순회를 통해 연결된 객체들을 찾아내어 각각 어떤 객체를 참조하고 있는지 찾아 마킹
- Sweep(제거) : 마킹되어 있지 않은 객체들을 힙에서 제거함
- Compact(압축) : Sweep이 끝난 객체들을 Heap의 시작 주소로 모아 압축시킴
- Heap 메모리의 구조
- Heap 영역에서의 데이터는 다음 2가지 전제로 설계됨
- 대부분의 객체는 금방 접근 불가능한 상태가 된다(
Young
). - 오래된 객체에서 새로운 객체로의 참조는 아주 적게 존재한다(
Old
). Young
영역에서의GC
를Minor GC
,Old
영역에서의GC
를Major GC
라고 부른다.- 대부분 Young 영역의 수명이 짧은 객체들은 크기가 작기 때문에, Old 영역이 Young 영역보다 크게 할당된다.
→ 객체는 대부분 일회성이며, 메모리에 오랫동안 남아있는 경우는 드물다.
→ 이러한 특성을 이용해 JVM에서 힙을
Young
과 Old
영역으로 설계하였다.- 가비지 컬랙터의 알고리즘 종류
- Stop the world가 빈번하게 발생하면 애플리케이션이 중지되는 문제가 자주 발생한다. 이를 최적화하기 위해 다양한 GC 알고리즘이 개발되었다.
- GC 알고리즘은 모두 설정을 통해 Java에 적용할 수 있다.
- Parallel GC
- Java 8의 디폴트 GC
- Young 영역의 Minor GC를 멀티스레드로 수행, Old 영역은 싱글스레드
- Parallel Old GC
- Young 영역 뿐 아니라 Old 영역에서도 멀티스레드로 GC 수행
- G1 GC
- ZGC
Share article