본문 바로가기
Language/자바

JVM G1 GC 방식에 대해..

by 띵커베르 2023. 2. 12.
728x90
  • GC 방식중 한가지로써 자바 9버전부터 default 방식인 Garbage First Collector (G1 콜렉터) 에 대해 간략히 알아본다.
  • G1 방식 외: Serial(시리얼), Parallel(병렬), Parallel Compacting(병렬 콤팩팅), Concurrent Mark-Sweep(CMS) 등이 있다.
  • 위에 적힌 방식은 G1 GC 를 제외하고 모두 Eden과 Survivor 영역으로 나뉘는 Young 영역과 Old 영역으로 구성되어 있다.
  • 하지만 G1은 다른 영역으로 구성되어있다.
    • 바둑판같은 형식으로 일명 region 이라는 영역을 사용한다.하나의 구역이라 생각하면 될듯 하다.
      • 해당 구역의 기본 크기는 1MB이며 최댜 32MB까지 지정 가능하다.
    • Young 영역과 Old 영역이 물리적으로 나뉘어 있지 않고, 각 구역 모두 크기가 동일하다.
    • G1을 제외하고 나머지 콜렉터들은 Young 영역과 Old 영역의 주소가 물리적으로 Linear 하게 나열되지만 G1은 그렇지 않다.
      • Linear하게 나열된다: Linear(선형) 은 순차적, 연속적 이라는 뜻으로 Young 영역과 Old 영역을 따라 한 줄로 나열한 것을 의미한다.
      • 즉 Young 영역이 첫번째, 그 다음 Old 영역이 나온 상태를 뜻한다. 두 영역이 한 줄로 이어져 있다고 보면 된다.
    • 이 region 구역은 각각 Eden, Survivor, Old 영역의 역할을 변경해 가면서 하고, Humongous라는 영역도 포함된다.
  • G1이 Young GC 를 하는 방법
    1. 몇 개의 구역을 선정하여 Young 영역으로 지정한다.
    2. 이 Linear하지 않은 구역에 객체가 생성되면서 데이터가 쌓인다.
    3. Young 영역으로 할당된 구역에 데이터가 꽉 차면, GC를 수행한다.
    4. GC를 수행하면서 살아있는 객체들만 Survivor 구역으로 이동시킨다.
  • 이렇게 살아 남은 객체들이 이동된 구역은 새로운 Survivor 영역이 된다.
  • 그 다음에 Yuong GC가 발생하면 Survivor 영역에 계속 쌓는다.
  • 몇번의 aging 작업을 통해서(Survivor 영역에 있는 객체가 몇 번의 Young GC 후에도 살아 있으면) Old 영역으로 승격된다.
  • G1의 Old 영역 GC는 CMS GC 방식과 비슷하며 아래 여섯 단계로 나뉜다.(참고: STW: Stop-The-World)
    1. 초기 표시(Inital Mark) 단계(STW): Old 영역에 있는 객체에서 Survivor 영역의 객체를 참조하고 있는 객체들을 표시한다.
    2. 기본 구역 스캔 단계: Old 영역 참조를 위해서 Survivor 영역을 훑는다.참고로 이 작업은 Young GC가 발생하기 전에 수행된다.
    3. 컨터런트 표시 단계: 전체 힙 영역에 살아있는 객체를 찾는다. 만약 이때 Young GC가 발생하면 멈춘다.
    4. 재 표시(Remark) 단계: 힙에 있는 살아있는 객체들의 표시 작업을 완료 한다. 이 떄 snapshot-at-the-beginning(SATB) 라는 알고리즘을 사용하며, 이는 CMS GC에서 사용하는 방식보다 빠르다.
    5. 청소 단계: 살아있는 객체와 비어 있는 구역을 식별하고, 필요 없는 개체들을 지운다. 그리고 나서 비어 있는 구역을 초기화 한다.
    6. 복사 단계: 살아있는 객체들을 비어 있는 구역으로 모은다.
  • G1 GC 에서 age-bit 가 없는 이유
    • G1 GC 는 age-bit를 사용하지 않는 이유는 그 자체로 공간 복잡성을 높이는 요소이기 때문입니다. G1 GC 는 eden 영역과 survivor 영역 대신에 heap을 분할한 region으로 구성되어 있기 때문에, 각 region 마다 garbage collection 여부를 판단하는 방법이 필요합니다. G1 GC 는 region 마다의 힙 사용량을 기반으로 garbage collection의 대상을 결정하며, age-bit 없이도 효율적으로 작업을 수행할 수 있습니다.
728x90

댓글