Programming/Java
JAVA Garbage Collection(GC) 성능 최적화
d-e-v-j
2024. 10. 8. 02:00
반응형
1. Garbage Collection(GC) 란?
Garbage Collection(GC)은 Java에서 메모리 관리를 자동으로 처리하는 메커니즘입니다. 애플리케이션이 더 이상 사용하지 않는 객체를 찾아 메모리에서 제거하고, 그 메모리를 다시 사용할 수 있도록 해주는 중요한 역할을 합니다. 이를 통해 개발자는 직접 메모리 관리를 할 필요 없이 안전하고 효율적으로 애플리케이션을 개발할 수 있습니다.
2. GC가 필요한 이유
- 메모리 누수 방지: 더 이상 사용하지 않는 객체가 메모리에 남아 있는 경우 메모리 누수가 발생할 수 있습니다. GC는 이를 방지하고 메모리를 자동으로 해제한다.
- 효율적인 메모리 관리: 불필요한 객체를 주기적으로 제거하여 메모리를 최적화하고, 시스템 성능을 유지합니다.
3. GC 의 동작 원리
GC 는 JVM Heap 메모리 영역에서 동작합니다.
- Young Generation: 새롭게 생성된 객체들이 저장되는 공간. Young Generation에서 일정 시간이 지나면 Minor GC가 발생하여 불필요한 객체를 제거합니다.
- Old Generation: 오랫동안 참조되는 객체들이 저장되는 공간. 주기적으로 Major GC 또는 Full GC가 발생하여 이 영역의 메모리를 회수합니다.
- Metaspace: 클래스 메타데이터와 같은 구조적 정보를 저장하는 공간. Java 8 이후 PermGen 대신 Metaspace가 도입되었습니다.
4. GC의 종류
JVM에는 다양한 GC 알고리즘이 있으며, 각각의 성능 특성이 다릅니다.
- Serial GC: 단일 스레드를 사용항 GC 작업을 처리. 작은 애플리케이션에 적합
- Parallel GC: 여러 스레드를 사용하여 병렬로 GC작업을 처리. CPU 코어가 많은 환경에서 적합합니다.
- CMS(Concurrent Mark-Sweep) GC: 애플리케이션읭 응답 시간을 최적화하여 GC 작업중에도 애플리케이션의 중단을 최소화합니다.
- G1 GC: 대규모 힙 메모리를 효율적으로 관리하는 최신 GC 알고리즘. Full GC발생을 최소화하고 예측 가능한 성능을 제공합니다.
5. GC 튜닝 방법
성능 최적화를 위해 JVM 옵션을 통해 GC 설정을 변경할 수 있습니다.
- Heap 크기조정
-Xms512m -Xmx1024m
- GC 알고리즘 선택
-XX:+UseG1GC # G1 GC 사용
- Young/Old Generation 비율 조정: -XX:newRatio , -XX:SurvivorRatio 비율 조절
6. GC의 장단점
- 장점: 자동 메모리 관리로 메모리 누수를 방지하며, 개발자가 메모리 할당과 해제를 직접 관리할 필요가 없습니다.
- 단점: GC가 발생할 때 애플리케이션이 잠시 멈추는 Stop-The-World 시간이 생길 수 있으며, Major GC나 Full GC가 발생하면 성능 저하가 발생할 수 있습니다.
7. GC 로그 분석
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log
Java의 Garbage Collection(GC)은 메모리 누수를 방지하고 애플리케이션의 메모리 관리 작업을 자동화해주는 강력한 기능입니다. 다양한 GC 알고리즘과 JVM 옵션을 활용해 성능을 최적화 할 수 있으며, 애플리케이션의 특성에 맞는 GC 전략을 선택하는 것이 중요합니다. GC 튜닝과 로그 분석을 통해 시스템 성능을 지속적으로 개선할 수 있습니다.
728x90
반응형
LIST