자바 고급(JAVA)

객체지향 프로그래밍의 이해 - Garbage Collection(GC)

beginner-development 2026. 5. 6. 21:15

GC는 중요한 개념이기에 따로 기록하고자 JVM에서 GC에 대해 개념만 알아보았다. 이번에는 GC에 대해 구체적으로 알아보자.

GC의 개념은 이전 글에서 설명했으니 GC의 개념에 대해서는 넘어가자.

1. GC의 동작 조건 및 특징

  - 실행 시점

     GC는 정해진 주기 없이, JVM이 판단하여 실행한다.

     메모리 부족, 시스템 idle, 객체 수 급증 등 조건에 따라 동작한다.

 

  - 참조 해제 조건

     명시적으로 null을 대입한다.

     참조 변수 스코프를 벗어난다.

Student s = new Student();
s = null; // s는 이제 더 이상 참조되지 않음 → GC 대상

 

GC의 본질은 "누가 살아 있고, 누가 죽었는가"를 판단하고 치우는 일이다.

2. GC의 주요 실행 단계

  - Stop The World

    GC를 실행하기 위해 JVM이 애플리케이션의 모든 스레드를 일시 정지 시키는 작업을 말한다.

  • GC 전용 스레드만 남기고 전체 애플리케이션은 동작을 중지한다.
  • 처리 완료 후 다시 실행한다.

  - Mark and Sweep

  • Mark 단계 : GC가 사용 중인 객체를 식별한다. (참조 여부 확인)
  • Sweep 단계 : 참조되지 않은 객체를 제거하고 메모리를 회수한다.

3. GC의 세대별(Generational) 구조

JVM의 Heap은 객체의 생존 기간에 따라 메모리 영역을 분리한다.

  - Young Generation (영 세대)

  • 새로운 객체가 생성되는 공간이다.
  • 대부분 금방 사라지므로, 자주 GC가 발생한다. -> Minor GC
  • 세부적으로 Eden, Survivor 영역으로 나뉜다.

  - Old Generation (올드 세대)

  • Young에서 오래 살아남은 객체가 승격된다.
  • GC발생 빈도가 낮지만, 실행 시 성능 부담이 크다 -> Major GC

※ 객체 대부분은 Young 영역에서 생성되고 사라지며, 일부만 Old로 승격된다.

 

4. 다양한 GC 알고리즘

GC 종류 설명
Serial GC 단일 스레드, 소규모 애플리케이션에 적합하다.
Parallel GC 멀티스레드 기반, Throughput 우선
CMS GC 애플리케이션 정지를 최소화, Mark/Sweep 병렬로 수행
G1 GC Java 11 이상에서 기본, Young/Old를 세분화하여 병렬 처리 및 예측 가능

※ G1 GC는 Full GC 시 전체 힙을 스캔하지 않고, 최적의 지역만 수집하여 성능 향상을 도모한다.

 

 

※핵심 요약

항목 내용
가비지 컬렉션이란 더 이상 참조되지 않는 객체 제거 시스템
실행 방식 Mark (식별) -> Sweep (제거)
세대 구분 Young (Minor GC) / Old (Major GC)
실행 조건 JVM이 자동 판단, System.gc()로 요청 가능
GC 중지 현상 Stop The World 발생 시 애플리케이션 일시 정지

 

★ GC는 자바의 안정성과 생산성을 높이는 핵심 기술 중 하나이다. Heap 구조와 GC 동작 원리를 이해하면 성능 튜닝 시 큰 도움이 된다.