728x90
반응형
자바 개발자라면 꼭 알고 있어야 하는 GC(Garbage Collector)!
객체는 언제 메모리에서 사라지고, 애플리케이션이 왜 가끔씩 멈추는지 궁금하셨나요?
아래 이미지와 함께 GC의 작동 구조를 쉽게 설명해드립니다.
🔍 GC 개념 요약
**Garbage Collector(GC)**는 사용하지 않는 객체를 힙 메모리에서 자동으로 제거하는 JVM의 기능입니다.
메모리 누수를 방지하고 개발자가 직접 메모리를 관리하지 않아도 되게 해주는 아주 고마운 기능이죠.
🧠 Java 힙 메모리 구조
아래 이미지는 자바 힙(Heap) 메모리의 구성과 객체 이동 과정을 시각적으로 표현한 구조입니다.
✅ 설명:
- 객체는 먼저 Eden 영역에 생성됩니다.
- GC(Minor GC)가 발생하면 Eden → Survivor1 → Survivor2를 오가며 살아남습니다.
- 여러 번 살아남으면 Old 영역으로 이동합니다.
- Old가 꽉 차면 **Major GC (또는 Full GC)**가 발생합니다.
- Permanent(또는 Java 8 이후 MetaSpace)는 클래스 정보 등 JVM 메타데이터를 저장하는 공간입니다.
💥 GC의 종류
GC 종류대상 영역특징
| 🧹 Minor GC | Young Generation (Eden + Survivor) | 빠르고 자주 발생함 |
| 🧹 Major GC | Old Generation | 느리고 멈춤(STW)이 발생함 |
| 🧹 Full GC | 전체 힙 영역 | Major GC 포함 + 기타 리소스 정리 |
🛑 STW(Stop The World)란?
GC를 수행하는 동안 JVM의 모든 스레드가 멈추는 현상입니다.
특히 Major GC나 Full GC 시 STW가 발생하며 사용자 체감 지연이 생길 수 있습니다.
📌 GC 튜닝의 핵심: STW 시간을 최소화하는 것!
⚙ 대표적인 GC 알고리즘
GC 종류특징적합 환경
| Serial GC | 단일 스레드, 기본 구조 | 저사양/테스트용 |
| Parallel GC | 멀티스레드 병렬 처리 | 일반 서버, 병렬 CPU |
| Parallel Old GC | Old까지 병렬 처리 | 고사양 서버 |
| G1 GC | Region 단위 처리, STW 최소화 | Java 9 이상 대규모 앱 |
| ZGC/Shenandoah | 실시간 GC, STW 거의 없음 | 실시간 처리 시스템 |
🧰 개발 팁 요약
- 객체는 가능한 빨리 Eden에서 제거되도록 설계하자
- Old로 가는 객체는 재사용하거나 Pool 처리가 바람직
- GC 튜닝 시에는 G1 GC, ZGC 등 최신 GC 전략 고려
✅ 마무리
GC는 Java의 강력한 장점 중 하나지만,
그 내부 동작을 모르면 애플리케이션 지연이나 STW 문제를 겪기 쉽습니다.
이제 GC 동작 구조를 알았으니, 메모리 튜닝과 성능 최적화에 자신감이 붙으실 겁니다!
728x90
반응형
'Programming > JAVA' 카테고리의 다른 글
| 🏷️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 |