[CS] Garbage Collection

박원준·2025년 9월 22일

🗑️ Garbage Collection (GC)

Garbage Collection (GC) 은 프로그래밍 언어에서 사용하지 않는 객체를 자동으로 정리하여 메모리를 최적화하는 기능입니다.
C/C++에서는 개발자가 직접 malloc/free, new/delete 로 메모리를 해제해야 하지만, Java, Python, C# 같은 언어에서는 GC가 자동으로 동작합니다.


✅ GC란?

  • 정의: 더 이상 접근할 수 없는 객체를 찾아 메모리에서 제거하여 메모리 누수 방지 + 안정적 실행 보장.
  • 장점: 메모리 해제를 자동화 → 생산성 ↑, 안정성 ↑.
  • 단점: GC 수행 시 Stop-the-World(STW) 현상 발생 → 성능 저하 가능.

🔹 GC 기본 원리

  • 객체 참조 여부를 추적하여 더 이상 사용되지 않는 객체를 제거
  • 대표 기법:
    1. Reference Counting
      • 객체마다 참조 카운트를 유지. 0이 되면 제거.
      • 단점: 순환 참조(circular reference) 문제 해결 불가.
    2. Tracing GC (Reachability Analysis)
      • 루트 객체(스택, 정적 변수 등)에서 도달 가능한 객체만 살려두고 나머지를 수거.

🔹 JVM의 Generational GC

Java에서는 객체의 생명 주기 특성을 이용해 세대별로 나누어 관리합니다.

  • Young Generation
    • 새로 생성된 객체가 위치
    • Minor GC 수행 (자주 발생, 짧고 빠름)
  • Old Generation
    • 오래 살아남은 객체가 승격되어 위치
    • Major GC 수행 (비교적 느리고 무거움)
  • Permanent Generation / Metaspace
    • 클래스 메타데이터 저장 공간 (Java 8부터 Metaspace로 교체)

📌 동작 원리

  • 대부분의 객체는 금방 사라진다 → Young Gen에서 바로 수거
  • 자주 살아남는 객체는 Old Gen으로 승격 → 관리 효율 ↑

🔹 다양한 GC 알고리즘

알고리즘특징장점단점
Serial GC단일 스레드단순, 작은 메모리에서 효율큰 메모리에서 STW ↑
Parallel GC멀티스레드Throughput ↑STW 길어질 수 있음
CMS (Concurrent Mark-Sweep)마크와 스윕을 병렬 수행STW ↓메모리 단편화 발생
G1 GC (Garbage First)영역을 나눠 수거예측 가능한 STW, 대용량 힙 적합상대적으로 복잡
ZGC, Shenandoah최신 저지연 GC매우 짧은 STW상대적으로 메모리 오버헤드 ↑

🔹 GC 관련 주요 용어

  • Stop-the-World(STW): GC가 실행될 때 모든 애플리케이션 스레드가 멈추는 현상
  • Minor GC: Young Generation에서의 수거
  • Major/Full GC: Old Generation 포함 전체 수거
  • Compaction: 단편화된 메모리를 연속되게 재배치
  • Promotion: Young → Old 세대로 객체 이동

🔹 성능 최적화 포인트

  • 객체 생성 최소화: 불필요한 객체를 만들지 않는다.
  • StringBuilder 사용: 불변 객체(String) 대신 가변 객체 활용.
  • 캐시 활용: 재사용 가능한 객체는 재활용.
  • GC 튜닝: 애플리케이션 성격에 맞는 GC 알고리즘 선택 (Throughput vs Low Latency).

🚀 GC는 자동 메모리 관리의 핵심이지만, 성능과 직결되므로 언어별 동작 방식, 알고리즘 차이, 튜닝 방법을 구체적으로 알면 더 좋습니다.

0개의 댓글