Hotspot JVM GC 방식
- Middleware/JAVA
- 2012. 12. 12.
Hotspot JVM GC 방식
|
Young Gen |
Old Gen |
GC 방식 |
장/단점 |
Serial GC |
Generation Algorithm |
Mark-Compact Algorithm |
1) Old 살아있는 객체 식별(Mark) 2) 힙 앞부분부터 확인해 살아 있는 것만 남김(Sweep) 3) 각 객체들이 연속되게 쌓이도록 힙의 가장 앞 부분부터 적재(Compact) |
-적은 메모리 CPU 코어 1개
-운영서버에서 절대사용하면안대는 방식
|
Parallel GC |
Generation Algorithm (Thread 여러개) |
Mark-Compact Algorithm |
Serial GC와 동일하나 Young Gen을 병렬처리 하여 처리량을 늘림으로써 빠르게 객체를 처리할 수 있음 |
-메모리 충분 코어 개수 많을때 유리 |
Parallel Old GC |
Generation Algorithm (Thread 여러개) |
Parallel Compactiong Algorithm (Mark-Summary-Compaction) |
Summary 단계는 앞서 GC를 수행한 영역에 대해서 별도로 살아 있는 객체를 식별한다는 점 (Mark-Sweep-Compaction 차이)
|
-기존의 Parallel GC 에서 Old Gen 처리량도 늘리자는 취지 |
CMS (Concurrent Mark-Sweep) |
Parallel Copy Algorithm |
Concurrnet Mark-and-Sweep Algorithm |
1) Initial Mark Root Object에 의해 직접 참조되는 객체들을 Marking 2) Concurrent Mark Application 동작 중 작업 새로운 Allocation 가능 3) Remark Concurrent Mark 단계에서 새로추가 참조가 끊긴 객체를 확인 4) Concurrent Sweep Dead Object Reclaim
Compaction 작업 없음 |
-응답시간 개선에 집중 -Old Gen 정리시 최대한 중단시간을 줄이는데 노력 -시간 절약 효과 -연속된 Free Space 감소 -Fast Allocation 이점 사라짐 (단편화↑) |
G1 GC |
Evacution Pause |
Concurrunt Marking |
1) Concurrent Marker가 각 힙 region 내의 살아있는 object 양 계산 (Gabage가 많은 region 선택) 2) Young GC 살아있는 object는 Suvivor region과 Old region으로 이동(Stop-the-copy) 3) Old Gen GC Concurrent Marking Mark : Initial Mark 살아 남은 객체 계산, Old gen 영역 포함 Remark : region당 살아있는 object 정보를 계산 empty region은 바로 reclaim (stop-the-world) 4) Reclaim Old Region 살아 있는 object가 적은 Region 골라냄, 몇개의 old region만 collect 5) Compaction Large Chunk로 Free space 병합 Fragmentation 방지 Fast Allocation Free List를 사용하지 않음, Linear 방식, TLAB 사용 |
-Gen 물리적 구분 사라짐 -힙을 region으로 나눠 쪼개짐 -Gabage Object로 가득 찬 Region 부터 Collection 수행 -copy작업은 pause Time의 가장 큰 요인 |