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) 구조

- 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 동작 원리를 이해하면 성능 튜닝 시 큰 도움이 된다.
'자바 고급(JAVA)' 카테고리의 다른 글
| 객체지향 프로그래밍의 4가지 핵심 개념 - 캡슐화(Encapsulation) (0) | 2026.05.12 |
|---|---|
| 객체지향 프로그래밍의 4가지 핵심 개념 - 상속(Inheritance) (0) | 2026.05.12 |
| 객체지향 프로그래밍의 이해 - 자바 가상 머신(JVM) (0) | 2026.05.06 |
| 객체지향 프로그래밍의 이해 - 클래스와 객체 (0) | 2026.05.06 |
| 객체지향 프로그래밍의 이해 - 객체지향 프로그래밍이란? (0) | 2026.05.06 |