Garbage Collection (GC)

프로그램이 동적으로 할당한 메모리 중에서 더 이상 사용되지 않는 불필요한 객체를 자동으로 회수하여 메모리를 재사용할 수 있도록 하는 프로세스입니다. 이를 통해 메모리 관리의 복잡성을 줄이고, 메모리 누수를 방지할 수 있습니다.

GC의 주요 단계:

  1. Marking (마킹):
    • 살아있는 객체를 식별하여 마킹합니다. 객체 그래프를 따라가며 루트 객체부터 시작해 살아있는 객체들을 추적합니다.
  2. Sweeping (스윕):
    • 마킹되지 않은 죽은 객체들을 메모리에서 제거하고, 빈 공간을 확보합니다.
  3. Compacting (컴팩팅):
    • 살아있는 객체들을 연속된 메모리 공간으로 압축하여 메모리 단편화를 해결합니다.

1.1 Serial GC

특징:

  • 단일 스레드로 GC를 수행합니다.
  • Minor GC와 Major GC 모두 순차적으로 한 번에 하나씩 처리합니다.
  • 작은 메모리와 단일 코어 환경에 적합하며, 구현이 단순합니다.
  • STW(Stop-The-World)가 발생하며 애플리케이션이 일시적으로 멈춥니다.

Minor GC 처리 방식:

  1. Young Generation(Eden + Survivor 영역)을 단일 스레드로 스캔합니다.
  2. 참조되지 않은(dead) 객체는 해제합니다.
  3. 살아남은 객체는 Survivor 영역으로 이동하며, 필요하면 Old Generation으로 승격됩니다.

Major GC 처리 방식:

  1. Old Generation을 단일 스레드로 스캔합니다.
  2. 참조되지 않은 객체를 해제하고, 필요시 메모리 압축(Compaction)을 수행합니다.

1.2 Parallel GC

특징:

  • 여러 스레드를 사용해 GC 작업을 병렬로 처리합니다.
  • Throughput(처리량) 최적화에 초점을 맞추어 멀티코어 환경에서 유리합니다.
  • STW 시간은 Serial GC보다 짧지만 여전히 STW가 발생합니다.
  • mark-and-sweeping, compacting 단계가 진행됩니다.

Minor GC 처리 방식:

  • 여러 스레드가 Young Generation의 Eden과 Survivor 영역을 병렬로 스캔하여 정리합니다.
  • 살아남은 객체는 Survivor 영역 또는 Old Generation으로 이동합니다.

Major GC 처리 방식:

  • Old Generation의 객체를 여러 스레드가 병렬로 처리합니다.

1.3 CMS GC (Concurrent Mark-Sweep)

특징:

  • Old Generation에서 STW 시간을 줄이기 위해 동시(Concurrent) 작업을 도입했습니다.
  • Mark-and-Sweep 알고리즘을 기반으로 작동하며, 메모리를 정리하면서도 애플리케이션의 실행을 병행합니다.
  • Minor GC는 Parallel GC와 유사하게 처리됩니다.
  • Compacting 단계를 수행하지 않으며, 대신 메모리 단편화가 발생할 수 있습니다.

Minor GC 처리 방식:

  • Young Generation의 Eden과 Survivor 영역을 병렬로 처리하여 STW 시간을 최소화합니다.

Major GC 처리 방식:

  1. Initial Mark: STW 상태에서 참조된 객체를 식별합니다.
  2. Concurrent Mark: 애플리케이션 실행과 병행하여 추가 참조를 식별합니다.
  3. Remark: STW 상태에서 누락된 참조를 확인합니다.
  4. Concurrent Sweep: 사용되지 않는(dead) 객체를 정리합니다.

1.4 G1 GC (Garbage-First GC)

특징:

  • 메모리를 고정 크기의 Region으로 나누어 관리합니다.
  • Young과 Old Generation은 Region 단위로 관리됩니다.
  • Mixed GC를 도입하여 Young과 Old를 동시에 정리하며, Pause Time(응답 시간)을 예측 가능하게 만듭니다.

Minor GC 처리 방식:

  • 특정 Region에 대해 Minor GC를 수행하며, 참조되지 않은 객체를 제거하고 살아남은 객체는 Old Region으로 이동합니다.

Major GC 처리 방식:

  • Young과 Old Region을 병합하여 Mixed GC를 실행합니다.
  • STW 시간을 줄이고 메모리 단편화를 줄이기 위해 일부 Region만 선택적으로 정리합니다.

GC 방식과 세대 동작의 관계 요약


GC 방식 Minor GC 방식 Major GC 방식 특징
Serial 단일 스레드 단일 스레드 단순하고 작은 애플리케이션에 적합
Parallel 다중 스레드 다중 스레드 Throughput 중심, 멀티코어 환경에서 적합
CMS 병렬 스레드 동시 마킹 + 제거 Old Generation의 STW 시간 최소화
G1 Region 기반 병렬 처리 Mixed GC Predictable Pause Time, Region 단위 최적화

'IT > 백엔드' 카테고리의 다른 글

[ node.js ] - 메모리 관리법  (0) 2025.02.04
객체지향원칙의 책임 중심 설계  (0) 2025.01.21
객체지향 프로그래밍의 개념  (0) 2025.01.09
[JAVA] - 메모리 관리법  (2) 2024.12.11
[Python] - 메모리 관리법  (2) 2024.12.09

+ Recent posts