Garbage Collection (GC)
프로그램이 동적으로 할당한 메모리 중에서 더 이상 사용되지 않는 불필요한 객체를 자동으로 회수하여 메모리를 재사용할 수 있도록 하는 프로세스입니다. 이를 통해 메모리 관리의 복잡성을 줄이고, 메모리 누수를 방지할 수 있습니다.
GC의 주요 단계:
- Marking (마킹):
- 살아있는 객체를 식별하여 마킹합니다. 객체 그래프를 따라가며 루트 객체부터 시작해 살아있는 객체들을 추적합니다.
- Sweeping (스윕):
- 마킹되지 않은 죽은 객체들을 메모리에서 제거하고, 빈 공간을 확보합니다.
- Compacting (컴팩팅):
- 살아있는 객체들을 연속된 메모리 공간으로 압축하여 메모리 단편화를 해결합니다.

1.1 Serial GC
특징:
- 단일 스레드로 GC를 수행합니다.
- Minor GC와 Major GC 모두 순차적으로 한 번에 하나씩 처리합니다.
- 작은 메모리와 단일 코어 환경에 적합하며, 구현이 단순합니다.
- STW(Stop-The-World)가 발생하며 애플리케이션이 일시적으로 멈춥니다.
Minor GC 처리 방식:
- Young Generation(Eden + Survivor 영역)을 단일 스레드로 스캔합니다.
- 참조되지 않은(dead) 객체는 해제합니다.
- 살아남은 객체는 Survivor 영역으로 이동하며, 필요하면 Old Generation으로 승격됩니다.
Major GC 처리 방식:
- Old Generation을 단일 스레드로 스캔합니다.
- 참조되지 않은 객체를 해제하고, 필요시 메모리 압축(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 처리 방식:
- Initial Mark: STW 상태에서 참조된 객체를 식별합니다.
- Concurrent Mark: 애플리케이션 실행과 병행하여 추가 참조를 식별합니다.
- Remark: STW 상태에서 누락된 참조를 확인합니다.
- 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 |