2 분 소요


참고 내용 출처 : https://steady-coding.tistory.com/590

G1 GC

G1(Garbage First) GC는 CMS GC를 대체하기 위해 새롭게 등장하였으며, 대용량의 메모리가 있는 멀티 프로세서 시스템을 위해 제작되었다. 빠른 처리 속도를 지원하면서 STW를 최소화 한다.
CMS GC보다 효율적으로 동시에 Application과 GC를 진행할 수 있고, 메모리 Compaction 과정까지 지원하고 있다.
Java9 부터 기본 GC방식으로 채택되었다.

Compaction은 퍼포먼스 향상을 위해 참조되지 않은 객체를 제거하고 남은 객체를 묶는 작업이다.
묶음으로서 공간이 생기므로 새로운 메모리 할당 시 더 쉽고 빠르게 진행할 수 있다.

CMS GC

Concurrent Mark-Sweep(CMS) GC는 Application의 Thread와 GC Thread가 동시에 실행되어 STW를 최소화 하는 GC이다.
CMS GC는 Compaction을 지원하지 않는다.

이름이 G1?

G1은 Garbage First의 약어로 Garbage만 있는 Region을 먼저 회수한다고 해서 붙여진 이름이다.
빈 공간 확보를 더 빨리 한다는 것은 급격히 할당률이 늘어나는 것을 방지하여 Old Generation을 비교적 한가하게 만들 수 있다.

장단점

  • 장점
    • 별도의 STW 없이도 여유 메모리 공간을 압축하는 기능을 제공한다.
    • 전체 Old Generation 혹은 Young Generation을 Compaction할 필요 없고, 해당 Generation의 일부분 Region에 대해서만 Compaction을 하면 된다.
    • Heap 크기가 클수록 잘 동작한다.
    • CMS에 비해 개선된 알고리즘을 사용하고, 처리 속도가 더 빠르다.
    • Garbage로 가득찬 영역을 빠르게 회수하여 빈 공간을 확보하므로 GC 빈도가 줄어든다.
  • 단점
    • 공간 부족 상태를 조심해야 한다.(Minor GC, Major GC를 수행하고 나서도 여유 공간이 부족한 경우)
      • 이때는 Full GC가 발생하는데, 이 GC는 Single Thread로 동작한다.
      • Full GC는 Heap 전반적으로 GC가 발생하는 것을 뜻한다.
    • 작은 Heap 공간을 가지는 Application에서는 제 성능을 발휘하지 못하고 Full GC가 발생한다.

구조

G1GC

전통적인 Heap 구조는 Young, Old 영역을 명확하게 구분하였지만, G1 GC는 그들이 존재하나 일정 크기의 논리적 단위인 region으로 구분한다.

  • Humonogous: Region 크기의 50%를 초과하는 큰 객체를 저장하기 위한 공간
  • Available/Unused: 아직 사용되지 않은 Region

동작 과정

G1GC_cycle

기본적으로 G1 Gc는 Young-Only 단계와 Space Reclamation 단계를 반복하면서 수행하는 Cycle 구조로 진행된다.
Young Only 단계는 Minor GC만 수행하다가 한정된 Old Generation 비율이 넘으면 Major GC가 수행되며, Young Only 단계가 끝날 때 까지 두 GC가 혼용된다.
Space Reclamation(공간 회수) 단계는 Old 영역의 Garbage까지 수집하는 Minor GC 방식의 Mixed GC 방식이 수행된다.

Mixed GC
Mixed GC는 Young 영역과 Old 영역의 Garbage를 수집한다. 한 번에 Old 영역의 Garbage를 수집하는 것은 비용이 크므로 Mixed GC는 기본적으로 8회 수행된다.
Mixed GC는 Minor GC에서 수행하는 단계와 동일하지만, 추가로 Old 영역의 Garbage를 수집한다.
즉, Mixed GC는 Minor GC와 Old 영역의 GC를 혼합한 과정이라고 할 수 있다.

G1 GC에서 Minor GC 동작

Young Generation에 있는 live object를 Survivor영역이나 Old Generation으로 이동시킨다.
이 단계에서 STW가 발생하며, 모든 과정은 멀티 스레드로 동작한다.

G1 GC에서 Major GC 동작

중간 중간 마킹을 수행하면서 Garbage만 존재하는 영역 및 live object가 적은 순으로 영역을 정리하여 가용 공간을 만들어내는 것이 특징이다.

G1 GC에서 Mixed GC 동작

Mixed GC는 Minor GC와 비슷한 방식으로 동작하지만, 추가로 Old 영역의 Garbage도 정리하는 방식으로 동작한다.

댓글남기기