Garbage Collector 종류

hjoon·2021년 4월 25일
0

자바 스터디

목록 보기
10/15
post-thumbnail
  • gc의 종류별 차이에 대해 설명하기. (Serial, Parallel, CMS, G1, Z)

GC(Garbage Collector) 종류

  • GC는 크게 마이너 GC메이저 GC 두가지 타입으로 나뉜다.

    • 두 가지 GC가 어떻게 상호 작용하는지에 따라 GC 방식에 차이가 나며,
      성능에 영향을 준다

      마이너 GC : Young 영역에서 발생하는 GC
      메이저 GC : Old 영역이나 Perm 영역에서 발생하는 GC

    • TLABs (Thread-Local Allocation Buffers : 스레드 로컬 할당 버퍼)

      • Hot Spot JVM에서 보다 빠른 메모리 할당을 위해 사용하는 기술이다.
      • 각 스레드별 메모리 버퍼를 사용하여 메모리 할당 작업을 수행할 때,
        다른 스레드에 영향을 주지 않게 된다.
      • 생긴 이유
        • GC가 발생하거나
          JVM 메모리에서 객체가 다른 영역으로 이동할때,
          어플리케이션 병목이 발생하면서 성능에 영향을 주게 되기 때문이다.
  • JDK 5.0 이상에서 지원하는 GC에는 5가지 방식이 존재한다.

    • WAS나 자바 어플리케이션 수행시 옵션을 지정하여 GC를 선택할 수 있다.
      1. Serial Collector
      2. Parallel Collector (Throughput Collector)
      3. CMS Collector (Concurrent Mark-Sweep Collector)
      4. G1 Collector (Garbage First Collector)
      5. Z Garbage Collector

GC 종류별 차이

✋Serial Collector

  • Young 영역과 Old 영역이 연속적(serial)으로 처리되며 하나의 CPU를 사용한다.

  • 메모리가 적고, CPU 코어 개수가 적을 때 적합한 GC 방식이다.

  • Minor GC 뿐 아니라 Major GC인 경우도 올스탑(stop-the-world)한다.

    • 어플리케이션 수행이 정지되는 방식 (운영 서버에서 절대 사용하면 안되는 방식)이다.
    • 클라이언트 종류의 장비에서 많이 사용되는 방식이다.
  • Old 영역의 GC는 mark-sweep-compact 알고리즘을 사용한다

    1. mark : Old 영역에 살아 있는 객체를 식별하여 표시해 놓는다
    2. sweep : heap의 앞부분 부터 확인하여 살아있는 객체만 남긴다
    3. compact : 각 객체들이 연속되게 쌓이도록 가장 앞 부분부터 채워서 객제가 존재하는 부분과 없는 부분으로 나눈다

✋Parallel Collector (Throughput Collector)

  • Serial GC와 기본적인 알고리즘은 같으나, Parallel GC는 GC를 처리하는 쓰레드가 여러 개다.

  • 메모리가 충분하고 코어의 개수가 많을 때 적합한 GC 방식이다.

  • MinorGC 뿐 아니라 Major GC인 경우도 올스탑(stop-the-world)한다.

  • Old 영역의 GC는 mark-sweep-compact 알고리즘을 사용한다

✋Concurrent Mark-Sweep Collector

  • 2개 이상의 CPU를 사용하는 서버에 적합한 GC 방식이다.

    • 장점
      • stop-the-world 시간이 짧다
    • 단점
      • 다른 GC 방식보다 CPU 리소스를 많이 사용한다
      • Compaction 단계가 기본적으로 제공되지 않는다.
        • 메모리 파편화로 인해, Compaction 수행 시 다른 GC 방식보다 stop-the-world 시간이 더 길어진다.
  • 4단계를 따른다

    1. Initial Mark 단계 : class loader에서 가장 가까운 객체 중 살아 있는 객체만 찾는다 (mark)
    2. Concurrent Mark 단계 : 올스탑(stop-the-world)없이 살아있다고 확인한 객체에서 참조하고 있는 객체를 확인한다
    3. Remark 단계 : Concurrent Mark 단계에서 새로 추가되거나 참조가 끊긴 객체를 확인한다
    4. Concurrent Sweep 단계 : 올스탑(stop-the-world)없이 참조 되지 않는 객체를 정리한다

✋G1 Collector (Garbage First)

  • 바둑판의 각 region(영역)에 객체를 할당하고 GC를 실행한다. 해당 영역이 꽉 차면 다른 영역에서 객체를 할당하고 GC를 실행한다.

    • CMS Collector의 CPU리소스 및 메모리 파편화의 단점을 해결하기 위해 만들어진 방식이다.

      • 가장 많은 공간이 있는 곳 부터 메모리 회수 진행하기 때문에 Garbage First 라는 이름이 붙었다
    • G1 Collector의 가장 큰 장점은 어떤 GC 방식보다도 빠르다는 점이다.

    • Young의 세가지 영역 (Eden 영역, 2개의 Survivor 영역)에서 데이터가 Old 영역으로 이동하는 단계가 사라진 GC 방식이다.

    • JDK 6에서는 early access라고 부르며 시험삼아 사용할 수 있고, JDK 7에서 정식으로 사용 가능한 방식이다.

✋Z Garbage Collector

  • ZGC는 확장 가능한 낮은 레이턴시의 GC으로 다음과 같은 목표를 가진다.
    • GC 일시 정지를 최소화 해야한다.
      • GC stop the world 시간이 10ms를 초과하지 않아야 하고
    • 대량의 메모리를 최대한 효율적으로 사용해야한다
      • 수백 MB ~ 수 TB 사이즈의 heap을 다룰 수 있어야 한다.
    • G1보다 더 짧은 latency를 가지면서 G1보다 크게 뒤쳐지지 않는 처리량을 갖아야 한다.
  • Z gc는 g1 gc에서 region(영역)과 비슷한 개념인 ZPages를 사용한다.

GC 방식 비교

  • 기능

  • 성능


0개의 댓글