About garbage collection

1,051 views
872 views

Published on

0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,051
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
41
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

About garbage collection

  1. 1. About Garbage Collection Rendered : October 25, 2012 gmind7
  2. 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. 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. 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. 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. 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. 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. 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. 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. 10. How Garbage Collection works in Java ㅁ G1 GC (JDK7 정식지원) 말도 많고 탈도 많은 CMS GC 대체하기 위해 만들어짐 10
  11. 11. How Garbage Collection works in Java ㅁ JVM 11 Command line Options
  12. 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)
  13. 13. How Garbage Collection Monitoring ㅁ 얼마 13 전 대화서비스에서의 PermGen Out of memory
  14. 14. How Garbage Collection Monitoring ㅁ GUI GC Tool Demo excellect. VIsualVM & VisualGC & HPJMeter together. Eclipse MAT(Memory Analyzer Tool) 14
  15. 15. How Garbage Collection Tunning ㅁ GC Tunning을 하는 이유가 무엇인지 근본적인 원인 은 ? 무분별한 객체 생성 과도한 임시 메모리 사용 15
  16. 16. How Garbage Collection Tunning ㅁ GC Tunning을 하는 Target은 어디 ? • old 영역으로 넘어가는 객체 수 최소화 히기 (손쉬운 방법 : New 영역의 크기를 조절) • Full GC 시간 줄이기 (요건 뒷에서…..계속) ㅁ GC 16 성능을 결정하는 옵션은 ?
  17. 17. How Garbage Collection Tunning ㅁ GC Tunning • GC 상황 모니터링 17 GC 수행시간 1초~3초, 그 이상 Batch도 아닌데… 서비스 상황별로 GC 수행 기준 시간 목표와 발생빈도를 정해야 하 며 그 기준은 서비스 별로 틀릴 수 있 다.
  18. 18. How Garbage Collection Tunning ㅁ GC를 이해한 개발하기 (profiler, mat를 이용한 패턴 체크) 무분별한 객체 생성 삭제 수정 - aop, interceptor... 개발 로직….thread 무분별한 루프와 변수 사용, 대량 String Parsing 으로 인한 임시 메모리 사용 억제 18
  19. 19. How Garbage Collection Tunning ㅁ GC Case By Case 결과 분석 (서버별로 하루 정도 gc log를 쌓기) 이번 case에서 X번이 가장 최적화 되었다고 해서 다른 서비스에서도 최적화 될 수 는 없다. 19
  20. 20. Garbage Collection Reference http://helloworld.naver.com/helloworld/helloworld/1329 http://helloworld.naver.com/helloworld/helloworld/6043 http://helloworld.naver.com/helloworld/helloworld/1329 http://ryudaewan.springnote.com/pages/145343 http://knight76.tistory.com/entry/JAXB-%EC%9E%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
  21. 21. Garbage Collection gmind7

×