문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. [[분류: Garbage collection]] == 개요 == G1GC(Garbage-First Garbage Collector)는 자바 가상 머신(JVM)의 가비지 컬렉션 알고리즘 중 하나이다. 대규모 힙 메모리를 효율적으로 관리하고 가비지 컬렉션으로 인한 지연 시간을 최소화하기 위해 설계되었다. G1GC는 힙 메모리를 여러 리전(region)으로 나누어 관리하며, 가비지가 많은 리전을 우선적으로 수집하는 방식으로 동작한다. == 주요 특징 == ;메모리 분할 :G1GC는 힙 메모리를 동일한 크기의 리전으로 나누어 관리한다. 각 리전은 독립적으로 수집되며, 전체 힙을 한 번에 처리하는 방식보다 효율적이다. ;우선 수집 :G1GC는 가비지가 많을 것으로 예상되는 리전을 우선적으로 수집한다. 이를 통해 가비지 컬렉션의 효율성을 높이고 애플리케이션의 일시 정지 시간을 줄인다. ;병렬 및 동시 처리 :G1GC는 여러 스레드를 사용하여 가비지 컬렉션 작업을 병렬로 수행한다. 일부 작업은 애플리케이션 스레드와 동시에 진행된다. == G1GC의 설계 이유 == #메모리 단편화 감소: 고정 크기의 리전으로 힙을 나누어 관리함으로써 단편화를 줄인다. #수집 우선순위 설정: 리전별로 살아있는 데이터의 양을 기준으로 우선순위를 설정하여 가장 효과적인 리전부터 수집한다. #부분적인 힙 정리 가능: 전체 힙 대신 일부 리전만 선택적으로 수집하여 일시 정지 시간을 제어한다. == G1GC의 목표 == G1GC의 핵심 목표는 예측 가능한 짧은 일시 정지 시간을 유지하는 것이다. 이를 위해 모든 단계는 설정된 목표 일시 정지 시간을 초과하지 않도록 설계되었다. 이는 대규모 애플리케이션에서 응답성과 성능의 균형을 유지하는 데 기여한다. == G1GC의 단계 == === Initial Mark === Initial Mark 단계는 Old 영역의 객체 중 GC 루트와 연결된 객체를 마킹하는 과정이다. 이 단계는 Stop-the-World(STW) 상태에서 수행된다. Eden 영역의 객체가 Young GC를 통해 이동할 때 함께 처리된다. ; 이유 : 초기 참조 그래프를 설정하여 이후 단계에서 마킹 작업을 이어가기 위한 기반을 마련하기 위함이다. 빠른 처리를 통해 일시 정지 시간을 최소화한다. === Concurrent Mark === Concurrent Mark 단계는 애플리케이션이 실행 중일 때 Old 영역의 객체를 스캔하여 살아있는 객체를 식별한다. 각 리전의 살아있는 데이터 양을 계산한다. ;이유 :애플리케이션 실행을 방해하지 않고 대부분의 마킹 작업을 처리하기 위함이다. 이 정보를 활용하여 우선적으로 수집할 리전을 결정한다. === Remark === Remark 단계는 Concurrent Mark 이후 참조 그래프의 업데이트를 반영하여 최종적으로 살아있는 객체를 확인하는 과정이다. 이 단계는 STW 상태에서 수행된다. ; 이유 : 정확한 데이터를 확보하여 효율적인 가비지 수집을 수행하기 위함이다. === Cleanup === Cleanup 단계는 가비지로 식별된 리전을 정리하고 수집 우선순위를 계산하는 단계이다. 이 정보는 Mixed GC 단계에서 활용된다. ; 이유 : 메모리 단편화를 줄이고 가장 효과적인 리전부터 수집하기 위한 준비를 하기 위함이다. === Young GC === Young GC는 Eden 영역이 가득 차면 트리거된다. 살아남은 객체는 Survivor 영역 또는 Old 영역으로 이동한다. 이 단계는 STW 상태에서 수행된다. ; 이유 : Eden 영역은 주로 단명 객체가 위치하는 공간으로, 주기적으로 비워야 메모리 부족을 방지할 수 있다. === Mixed GC === Mixed GC는 Young 영역과 일부 Old 영역을 함께 수집하는 과정이다. 가비지가 많은 리전을 우선적으로 수집하며 병렬로 진행된다. ; 이유 : Old 영역의 가비지를 주기적으로 정리하여 메모리 사용량을 줄이고 성능을 유지하기 위함이다. G1GC 문서로 돌아갑니다.