2. Garbage Collection(GC)
지극히 개인적이고 주관적인 판단 기준을 먼저 밝힌다면, 가비지
컬렉션(Garbage Collection, 이하 GC)에 대해 잘 알고 있을수록 실
력이 좋은 Java 개발자라고 생각합니다. GC 과정에 관심을 가질 정
도라면 규모가 일정 이상인 애플리케이션을 제작해 본 경험이 있을
것입니다. 또, 어떤 GC 알고리즘을 선택할 것인지 고민할 정도면
스스로 제작한 애플리케이션의 특징을 정확히 이해하고 있다고 볼
수 있습니다. 이러한 판단 기준이 보편적이지는 않지만, GC에 대한
이해는 훌륭한 Java 개발자가 되기 위한 필수 조건이라는 데에는
별다른 이견이 없을 것입니다
ㅁ GC
란? (쓰레기 정리)
program(객체)이 점유하여 쓰고 있는 memory 공간 중 더 이상 쓰지 않는
memory 영역을 Garbage라고 하며 이를 정리하는 과정을 Garbage Collection
이라 함.
ㅁ stop-the-world
start
GC
stop
start
GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 행위
2
3. How Garbage Collection works in Java
ㅁ JVM
Young :
Old :
Prem :
3
memory Area
새롭게 생성한 객체의 대부분이 여기에 위치한다. 이 영역에서 객체가 사라질때 Minor GC가 발생
Young 영역에서 살아남은 객체가 여기로 복사. 이 영역에서 객체가 사라질 때 Major GC(혹은 Full GC)가 발생
객체나 억류(intern)된 문자열 정보를 저장하는 곳. Static 변수, 여기서 GC가 발생해도 Major GC의 횟수에 포함
4. How Garbage Collection works in Java
ㅁ JVM
Generational GC
Minor Collections (Young)
생긴 지 얼마 안된 객체는 대부분이 얼마 지나지 않아 필요 없으므로 자주 GC를 수행 하여 수행시간을 단축 함
Major Collections (Old, Perm) – Full GC
4
오랫동안 살아남은 객체는 그 수가 적고 자주 사용 했던 객체로 GC 수행이 잦지 않지만 수행시간이 길어 이를
해결하기 위해 GC Algorithm을 적용하여 최적화 함
5. How Garbage Collection works in Java
ㅁ JVM
GC Algorithm
Serial/Paraller : 모든 Garbage를 차례대로 혼자 치우느냐 / 같이 치우느냐….
Stop-the-World / Concurrent
GC 수행시 Program을 Stop 시키느냐 / GC와 Program을 같이 실행 하느냐
Compacting / Non-compacting / Copying
GC 수행시 남은 메모리공간조각모음 / NON-조각모음 / 특정영역복사 추후해제
5
6. How Garbage Collection works in Java
ㅁ Young
Generation GC Cycle
Eden
Eden
Eden
clear
Allocation(할당)
clear
S0
S1
Eden
S0
S1
Eden
Old Generation
clear
S1
S0
S1
Promotion(승진)
clear
S0
S0
S1
Stop-the-world, copying
6
메모리 할당 방법 추가 참조 : bump-the-pointer, TLABs
7. How Garbage Collection works in Java
ㅁ JVM
Garbage Collector (old Generation GC)
ㅁ Serial
GC
ㅁ Refer
(-XX:+UseSerialGC)
Mark
Sweep
Compact
Sliding
적은 메모리와 Cpu 코어수가 적을 때만 사용
7
to the Young
8. How Garbage Collection works in Java
ㅁ Parallel
GC
(-XX:+UseParallelGC)
ㅁ Parallel
Old GC
(-XX:+UseParallelOldGC)
Mark
Sumary
Compact
삭제할 대상 객체를 Mark
객체 삭제
앞선 GC에서 살아 있는 객체를 식별
single
8
multi
Sliding
9. How Garbage Collection works in Java
ㅁ CMS
GC
(-XX:+UseConcMarkSweepGC)
클래스 로더에서 가장 가까운 객체 중 살아 있는
객체 찾기, 멈추는 시간은 매우 짧다
방금 살아있다고 확인한 객체에서 참조하고 있는 객체
들을 따라가면서 확인, 다른 스레드와 동시 진행
Concurrent Mark 단계에서 새로 추가되거나
참조가 끊긴 객체를 확인
쓰레기를 정리하는 작업, 다른 스레드와 동시 진행
9
장점 :
단점 :
stop-the-world 시간이 매우 짧다. 모든 애플리케이션의 응답 속도가 매우 중요할 때 CMS GC를
사용하며, Low Latency GC라고도 부른다
다른 GC 방식보다 메모리와 CPU를 더 많이 사용한다. Compaction 단계가 기본적으로 제공되지 않아
조각난 메모리 공간 때문에 Compaction 작업을 실행하면 stop-the-world 이 더 길게 진행 되어 질 수 있음
10. How Garbage Collection works in Java
ㅁ G1
GC (JDK7 정식지원)
말도 많고 탈도 많은 CMS GC
대체하기 위해 만들어짐
10
12. How Garbage Collection Monitoring
ㅁ GC
Monitoring
CUI GC
GUI GC
CUI GC 모니터링 방법에는 'jstat'이라는 CUI 애플리케이션을 이용하는 방법과 JVM
을 가동할 때 '-verbosegc'라는 JVM 옵션을 이용
GUI GC 모니터링 방법은 별도의 GUI 애플리케이션을 이용한다. 대표적인 GUI 애플
리케이션 세 가지를 꼽으라면 'jconsole', ‘VisualVM', 'VisualGC'를 들 수 있음
12
excellect. VIsualVM & VisualGC & HPJMeter
together. Eclipse MAT(Memory Analyzer Tool)
15. How Garbage Collection Tunning
ㅁ GC
Tunning을 하는 이유가 무엇인지 근본적인 원인 은 ?
무분별한 객체 생성
과도한 임시 메모리 사용
15
16. How Garbage Collection Tunning
ㅁ GC
Tunning을 하는 Target은 어디 ?
• old 영역으로 넘어가는 객체 수 최소화 히기 (손쉬운 방법 : New 영역의 크기를 조절)
• Full GC 시간 줄이기 (요건 뒷에서…..계속)
ㅁ GC
16
성능을 결정하는 옵션은 ?
17. How Garbage Collection Tunning
ㅁ GC
Tunning
• GC 상황 모니터링
17
GC 수행시간 1초~3초, 그 이상
Batch도 아닌데…
서비스 상황별로 GC 수행 기준
시간 목표와 발생빈도를 정해야 하
며 그 기준은 서비스 별로 틀릴 수 있
다.
18. How Garbage Collection Tunning
ㅁ GC를
이해한 개발하기 (profiler, mat를 이용한 패턴 체크)
무분별한 객체 생성 삭제 수정
- aop, interceptor... 개발 로직….thread
무분별한 루프와 변수 사용,
대량 String Parsing 으로
인한 임시 메모리 사용 억제
18
19. How Garbage Collection Tunning
ㅁ GC
Case By Case 결과 분석 (서버별로 하루 정도 gc log를 쌓기)
이번 case에서 X번이 가장 최적화
되었다고 해서 다른 서비스에서도
최적화 될 수 는 없다.
19