자바 개발자라면 꼭 알고 있어야 하는 GC(Garbage Collector)!
객체는 언제 메모리에서 사라지고, 애플리케이션이 왜 가끔씩 멈추는지 궁금하셨나요?
아래 이미지와 함께 GC의 작동 구조를 쉽게 설명해드립니다.
**Garbage Collector(GC)**는 사용하지 않는 객체를 힙 메모리에서 자동으로 제거하는 JVM의 기능입니다.
메모리 누수를 방지하고 개발자가 직접 메모리를 관리하지 않아도 되게 해주는 아주 고마운 기능이죠.
아래 이미지는 자바 힙(Heap) 메모리의 구성과 객체 이동 과정을 시각적으로 표현한 구조입니다.
| 🧹 Minor GC | Young Generation (Eden + Survivor) | 빠르고 자주 발생함 |
| 🧹 Major GC | Old Generation | 느리고 멈춤(STW)이 발생함 |
| 🧹 Full GC | 전체 힙 영역 | Major GC 포함 + 기타 리소스 정리 |
GC를 수행하는 동안 JVM의 모든 스레드가 멈추는 현상입니다.
특히 Major GC나 Full GC 시 STW가 발생하며 사용자 체감 지연이 생길 수 있습니다.
📌 GC 튜닝의 핵심: STW 시간을 최소화하는 것!
| Serial GC | 단일 스레드, 기본 구조 | 저사양/테스트용 |
| Parallel GC | 멀티스레드 병렬 처리 | 일반 서버, 병렬 CPU |
| Parallel Old GC | Old까지 병렬 처리 | 고사양 서버 |
| G1 GC | Region 단위 처리, STW 최소화 | Java 9 이상 대규모 앱 |
| ZGC/Shenandoah | 실시간 GC, STW 거의 없음 | 실시간 처리 시스템 |
GC는 Java의 강력한 장점 중 하나지만,
그 내부 동작을 모르면 애플리케이션 지연이나 STW 문제를 겪기 쉽습니다.
이제 GC 동작 구조를 알았으니, 메모리 튜닝과 성능 최적화에 자신감이 붙으실 겁니다!
| 🏷️JVM이란? 자바의 핵심 실행 엔진 구조 완벽 정리 (2) | 2025.07.30 |
|---|---|
| JDK vs JRE vs JVM 차이점 총정리 (0) | 2025.07.30 |
| 📌접근자란? Getter와 Setter 개념과 Java 예제로 쉽게 이해하기 (0) | 2022.10.31 |
| 📌Java static 키워드 완벽 정리: 메모리 구조부터 예제까지 한눈에! (0) | 2022.10.30 |
| 💡 프로그램 vs 프로세스 vs 스레드 완전 정리 (자바 스레드 포함) (0) | 2022.10.29 |