1. GC(Garbage Collection)란?
Heap Memory를 재활용 하기 위해 사용하지 않는(참조되지 않는) Object들을 해제해 가용한 공간을 만드는 작업.
신규 업무가 들어오면 Eden 영역에 매핑되고, 이어서 S0영역으로 이동한다. 사용이 없는 경우 S1로 이동하게 되며, Young Generation에서 이루어지는 과정은 Minor GC라고 한다. 이후 Old Generation으로 이동하게 되며, Old Generation 까지 가득 차게 되면 Major GC가 발생하게 된다.
- Minor GC : Young 영역에서 발생하는 GC
- Major GC : Old 영역에서 발생하는 GC
- Full GC : Heap 전체를 Clear 하는 작업
2. GC 방식
- Serial GC : Old 영역에 살아있는 객체를 식별하여 살아있는 것만 남긴다.
- Parallel GC : Serial과 방식은 동일한데, Parallel 방식으로 동시 처리한다.
- Parallel Old GC : Paraller GC 방식과 동일하며, Old 영역에서의 처리 방식만 다르다. Old 영역에서 살아있는 객체를 식별한다.
- CMS(Concurrent Mark Sweep) GC : 초기에는 클래스 로더에서 가장 가까운 객체 중 살아 있는 객체만 찾는 것으로 끝낸다. 따라서, 멈추는 시간은 매우 짧다. 그리고 Concurrent Mark 단계에서는 살아있다고 확인한 객체에서 참조하고 있는 객체들을 따라가면서 확인한다. 이 단계의 특징은 다른 쓰레드가 실행 중인 상태에서 동시에 진행된다는 것이다. Remark 단계에서는 Concurrent Mark 단계에서 새로 추가되거나 참조가 끊긴 객체를 확인한다. 마지막으로 Concurrent Sweep 단계에서는 쓰레기를 정리하는 작업을 실행한다. 이 작업도 다른 스레드가 실행되고 있는 상황에서 진행한다. 각 단계별로 진행되기 때문에 stop-the-world 시간이 짧다. 모든 애플리케이션의 응답 속도가 매우 중요할 때 CMS GC를 사용하며, Low Latency GC라고도 부른다. 그러나 다른 GC 방식보다 메모리와 CPU를 더 많이 사용하기 때문에 상황에 맞게 사용하는 것이 중요하다.
- G1 GC : Heap 영역을 여러개의 region으로 나누고, 각 region들은 Young, Old 영역을 유동적으로 사용한다. 주로 대용량의 멀티 프로세서 시스템을 위해 제작되었다. (보통 4gb 이상)
Heap을 체스판처럼 여러 Region이 동적으로 나뉘고 관리되며 Region마다 각각의 역할을 분담한다.
영역의 크기는 전체 Heap Size / 2048로 나뉜다. 4GB Heap을 사용 중이면 하나의 Region 크기는 2MB 이다.
기존 GC와 다르게 H영역 (Humongous Region)이 추가되었으며, 크기가 50%를 초과하는 객체를 저장하기 위한 공간이다. Full GC에 영향을 받지 않아서 메모리 단편화가 발생 할 수 있다.
- Eden Resion
- Survivor Resion
- Old Resion
- Humongous Resion
- Available/Unused Resion
3. JDK별 Default GC Type
- JDK 5 : Serial GC
- JDK 6 : Serial GC
- JDK 7 : Parallel GC
- JDK 8 : Parallel GC
- JDK 11 : G1 GC
'IT > MW' 카테고리의 다른 글
[Tomcat] JDBC 옵션 (0) | 2021.05.20 |
---|---|
[WebtoB] WebtoB - JEUS 연결 (0) | 2021.04.10 |
[WAS] Tomcat (0) | 2021.04.06 |
[Apache/Tomcat] mod_jk vs mod_proxy (0) | 2021.04.05 |
[Tomcat] "/", "\" URI에서 사용 (0) | 2021.03.26 |