Hotspot JVM GC 방식

    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의 가장 큰 요인

     

    댓글

    Designed by JB FACTORY