Garbage Collector란 무엇일까?
런타임에 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능
GC의 영역
- eden
- 처음 객체가 생성되는 공간
- Survivor 0, 1 -> Minor GC
- eden영역이 가득 찼을 때 reachable(참조되고 있는) 값만 걸러서 저장되는 영역
- Survivor (?)이 가득 차게 되면 비어있는 상대 Survivor (??)에 똑같이 reachable(참조되고 있는) 값만 걸러서 저장한다.
- 따라서 Survivor 0과 1 중 하나는 무조건 비어있는 형태를 띈다.
- 한번 걸러서 저장할 때마다 그 객체의 age는 올라가고 저장되지 못한 객체들(unreachable 객체들)은 삭제된다.
- Old Generation
- age값이 일정값을 넘긴 생존한 객체들이 이 곳에 저장된다.
- 이 저장소가 가득차게 되면 Major GC가 실행된다.
Serial GC
- GC를 처리하는 쓰레드가 1개이다
- CPU 코어가 1개만 있을 때 사용하는 방식
- Mark-Compact collection 알고리즘 사용
- compact하는 과정이 한번 더 추가된 알고리즘
- 삭제 후 생기는 빈 공간을 앞으로 땡겨서 압축
Stop-The-World
GC를 실행하기 위해 JVM이 애플리케이션의 실행을 멈추는 것이다.
Stop-The-World가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다.
GC 작업을 완료한 이후에 중단한 작업을 다시 시작한다.
CMS GC(Concurrent Mark Sweep GC)
Stop-The-World의 시간을 최소화한 GC
어플리케이션의 응답속도가 빨라야할 때 사용한다.
CPU를 더 많이 사용한다.
Compaction 단계가 적용되지 않는다.
G1 GC
각 영역을 Region영역(바둑판 모양)으로 나눈다.
일반적인 (eden, survivor, old generation) 영역과 다르다.
Compaction을 사용한다.
'Language > Java' 카테고리의 다른 글
Java 기본 - final 키워드 (0) | 2023.06.29 |
---|---|
Java 기본 - 제네릭 Generic (0) | 2023.06.27 |
Java 기본 - Annotation (0) | 2023.06.26 |
Java 기본 - Collection (0) | 2023.06.23 |
Java 기본 - JVM이란 무엇일까? (0) | 2023.06.22 |