자바의 가비지 컬렉션(Garbage Collection)
기본 이해
- 개념: 자바의 자동 메모리 관리 시스템으로, 더 이상 사용되지 않는 객체를 자동으로 감지하고 제거하는 프로세스
- 비유: 집안 정리와 비슷함. 더 이상 필요 없는 물건(미참조 객체)을 정기적으로 치우는 청소부
- 작동방식:
- Mark: 사용중인 객체 식별
- Sweep: 미사용 객체 제거
- Compact: 남은 메모리 조각 정리
핵심 구성요소
- Young Generation
- Eden Space
- Survivor Space (S0, S1)
- Old Generation
- Metaspace (Java 8 이후)
- GC 알고리즘
- Serial GC
- Parallel GC
- CMS GC
- G1 GC
존재 이유와 목적
- 메모리 누수 방지
- 개발자의 메모리 관리 부담 감소
- 안정적인 장기 실행 보장
- 자동화된 메모리 최적화
주의사항과 일반적 오류
- 과도한 객체 생성
- 메모리 누수 가능성 있는 코드 작성
- static 컬렉션 무분별 사용
- 리소스 미해제
- GC 튜닝 오버엔지니어링
비교 분석
특성 | 수동 메모리 관리 | GC |
---|---|---|
제어력 | 높음 | 낮음 |
개발 생산성 | 낮음 | 높음 |
버그 발생 가능성 | 높음 | 낮음 |
성능 | 최적화 가능 | 예측 어려움 |
학습 곡선 | 가파름 | 완만함 |
실무 활용
// 메모리 누수 가능성 있는 코드
public class MemoryLeakExample {
private static final List<Object> list = new ArrayList<>();
public void addObject(Object obj) {
list.add(obj); // static 리스트에 계속 추가
}
}
// 개선된 코드
public class ImprovedExample {
private final List<Object> list = new ArrayList<>();
public void addObject(Object obj) {
list.add(obj);
// 필요없는 객체는 제거
if (list.size() > MAX_SIZE) {
list.remove(0);
}
}
}
이전 개념: 메모리 구조, JVM 아키텍처
후속 개념: GC 튜닝, JVM 튜닝, 성능 최적화
베스트 프랙티스:
- 불필요한 객체 생성 최소화
- try-with-resources 사용
- 적절한 GC 알고리즘 선택
- 메모리 사용량 모니터링
- 주기적인 성능 프로파일링
'Java > 자바 학습' 카테고리의 다른 글
명시적 형변환 vs 암시적 형변환 (2) | 2025.05.18 |
---|---|
지역변수와 멤버변수 (0) | 2025.05.17 |
2. 메모리 - 2. 메서드 영역(Method Area) (0) | 2025.05.12 |
2. 메모리 - 1. 스택(Stack)과 힙(Heap) (0) | 2025.05.12 |
1. 자바 플랫폼 - 3. 바이트코드의 개념 (0) | 2025.05.12 |