SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
About Garbage Collection

Rendered : October 25, 2012

gmind7
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
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의 횟수에 포함
How Garbage Collection works in Java
ㅁ JVM

Generational GC

Minor Collections (Young)
생긴 지 얼마 안된 객체는 대부분이 얼마 지나지 않아 필요 없으므로 자주 GC를 수행 하여 수행시간을 단축 함

Major Collections (Old, Perm) – Full GC
4

오랫동안 살아남은 객체는 그 수가 적고 자주 사용 했던 객체로 GC 수행이 잦지 않지만 수행시간이 길어 이를
해결하기 위해 GC Algorithm을 적용하여 최적화 함
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
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
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
How Garbage Collection works in Java
ㅁ Parallel

GC

(-XX:+UseParallelGC)

ㅁ Parallel

Old GC

(-XX:+UseParallelOldGC)

Mark

Sumary
Compact
삭제할 대상 객체를 Mark
객체 삭제
앞선 GC에서 살아 있는 객체를 식별

single
8

multi

Sliding
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 이 더 길게 진행 되어 질 수 있음
How Garbage Collection works in Java
ㅁ G1

GC (JDK7 정식지원)
말도 많고 탈도 많은 CMS GC
대체하기 위해 만들어짐

10
How Garbage Collection works in Java
ㅁ JVM

11

Command line Options
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)
How Garbage Collection Monitoring
ㅁ 얼마

13

전 대화서비스에서의 PermGen Out of memory
How Garbage Collection Monitoring
ㅁ GUI

GC Tool Demo

excellect. VIsualVM & VisualGC & HPJMeter
together. Eclipse MAT(Memory Analyzer Tool)

14
How Garbage Collection Tunning
ㅁ GC

Tunning을 하는 이유가 무엇인지 근본적인 원인 은 ?
무분별한 객체 생성

과도한 임시 메모리 사용

15
How Garbage Collection Tunning
ㅁ GC

Tunning을 하는 Target은 어디 ?

• old 영역으로 넘어가는 객체 수 최소화 히기 (손쉬운 방법 : New 영역의 크기를 조절)
• Full GC 시간 줄이기 (요건 뒷에서…..계속)
ㅁ GC

16

성능을 결정하는 옵션은 ?
How Garbage Collection Tunning
ㅁ GC

Tunning

• GC 상황 모니터링

17

GC 수행시간 1초~3초, 그 이상
Batch도 아닌데…
서비스 상황별로 GC 수행 기준
시간 목표와 발생빈도를 정해야 하
며 그 기준은 서비스 별로 틀릴 수 있
다.
How Garbage Collection Tunning
ㅁ GC를

이해한 개발하기 (profiler, mat를 이용한 패턴 체크)
무분별한 객체 생성 삭제 수정
- aop, interceptor... 개발 로직….thread
무분별한 루프와 변수 사용,
대량 String Parsing 으로
인한 임시 메모리 사용 억제

18
How Garbage Collection Tunning
ㅁ GC

Case By Case 결과 분석 (서버별로 하루 정도 gc log를 쌓기)

이번 case에서 X번이 가장 최적화
되었다고 해서 다른 서비스에서도
최적화 될 수 는 없다.
19
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
Garbage Collection

gmind7

Mais conteúdo relacionado

Destaque

Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSanghyuk Jung
 
데이타 플로우 다이어그램
데이타 플로우 다이어그램데이타 플로우 다이어그램
데이타 플로우 다이어그램uhahazza
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)Sang Don Kim
 
Github를 이용한 협동개발 20141001
Github를 이용한 협동개발 20141001Github를 이용한 협동개발 20141001
Github를 이용한 협동개발 20141001BJ Jang
 
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유knight1128
 
팀 생산성 향상을 위한 Redmine 도입
팀 생산성 향상을 위한 Redmine 도입팀 생산성 향상을 위한 Redmine 도입
팀 생산성 향상을 위한 Redmine 도입Seungyoon Lee
 
[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견NAVER D2
 
Ppt Shape Series 1 Diagrams
Ppt Shape Series 1 DiagramsPpt Shape Series 1 Diagrams
Ppt Shape Series 1 Diagramssumanthr
 
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기Lee Ji Eun
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기Jaewoo Ahn
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)Amazon Web Services Korea
 

Destaque (11)

Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDD
 
데이타 플로우 다이어그램
데이타 플로우 다이어그램데이타 플로우 다이어그램
데이타 플로우 다이어그램
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
 
Github를 이용한 협동개발 20141001
Github를 이용한 협동개발 20141001Github를 이용한 협동개발 20141001
Github를 이용한 협동개발 20141001
 
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유
 
팀 생산성 향상을 위한 Redmine 도입
팀 생산성 향상을 위한 Redmine 도입팀 생산성 향상을 위한 Redmine 도입
팀 생산성 향상을 위한 Redmine 도입
 
[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견
 
Ppt Shape Series 1 Diagrams
Ppt Shape Series 1 DiagramsPpt Shape Series 1 Diagrams
Ppt Shape Series 1 Diagrams
 
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기SK플래닛_README_마이크로서비스 아키텍처로 개발하기
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
 
기술적 변화를 이끌어가기
기술적 변화를 이끌어가기기술적 변화를 이끌어가기
기술적 변화를 이끌어가기
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
 

Semelhante a About garbage collection

Java performance and trouble shooting
Java performance and trouble shootingJava performance and trouble shooting
Java performance and trouble shootingAnna Choi
 
Hotspot JVM GC_Wh apm
Hotspot JVM GC_Wh apmHotspot JVM GC_Wh apm
Hotspot JVM GC_Wh apm엑셈
 
JVM Memory And GC Tuning Workflow
JVM Memory And GC Tuning WorkflowJVM Memory And GC Tuning Workflow
JVM Memory And GC Tuning Workflow승린 이
 
IBM JVM GC_Wh apm
IBM JVM GC_Wh apmIBM JVM GC_Wh apm
IBM JVM GC_Wh apm엑셈
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법YoungSu Son
 
JVM Memory And GC Tuning Test
JVM Memory And GC Tuning Test JVM Memory And GC Tuning Test
JVM Memory And GC Tuning Test 승린 이
 
JVM과 톰캣 튜닝
JVM과 톰캣 튜닝JVM과 톰캣 튜닝
JVM과 톰캣 튜닝Mungyu Choi
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항 YoungSu Son
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteSeok-yong Kim
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 YoungSu Son
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
 
[NEXT] Android Profiler
[NEXT] Android Profiler[NEXT] Android Profiler
[NEXT] Android ProfilerYoungSu Son
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화NAVER D2
 
Introduce Guetzli
Introduce GuetzliIntroduce Guetzli
Introduce Guetzli우영 주
 
[컴퓨터비전과 인공지능] 8. 합성곱 신경망 아키텍처 3 - GoogLeNet
[컴퓨터비전과 인공지능] 8. 합성곱 신경망 아키텍처 3 - GoogLeNet[컴퓨터비전과 인공지능] 8. 합성곱 신경망 아키텍처 3 - GoogLeNet
[컴퓨터비전과 인공지능] 8. 합성곱 신경망 아키텍처 3 - GoogLeNetjdo
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_ozlael ozlael
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습smartstudy_official
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습Hyun-woo Park
 

Semelhante a About garbage collection (20)

About gc
About gcAbout gc
About gc
 
Java performance and trouble shooting
Java performance and trouble shootingJava performance and trouble shooting
Java performance and trouble shooting
 
Hotspot JVM GC_Wh apm
Hotspot JVM GC_Wh apmHotspot JVM GC_Wh apm
Hotspot JVM GC_Wh apm
 
JVM Memory And GC Tuning Workflow
JVM Memory And GC Tuning WorkflowJVM Memory And GC Tuning Workflow
JVM Memory And GC Tuning Workflow
 
IBM JVM GC_Wh apm
IBM JVM GC_Wh apmIBM JVM GC_Wh apm
IBM JVM GC_Wh apm
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
 
JVM Memory And GC Tuning Test
JVM Memory And GC Tuning Test JVM Memory And GC Tuning Test
JVM Memory And GC Tuning Test
 
JVM과 톰캣 튜닝
JVM과 톰캣 튜닝JVM과 톰캣 튜닝
JVM과 톰캣 튜닝
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's Note
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
 
[NEXT] Android Profiler
[NEXT] Android Profiler[NEXT] Android Profiler
[NEXT] Android Profiler
 
웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화웨일브라우저 성능 및 메모리 최적화
웨일브라우저 성능 및 메모리 최적화
 
Introduce Guetzli
Introduce GuetzliIntroduce Guetzli
Introduce Guetzli
 
[컴퓨터비전과 인공지능] 8. 합성곱 신경망 아키텍처 3 - GoogLeNet
[컴퓨터비전과 인공지능] 8. 합성곱 신경망 아키텍처 3 - GoogLeNet[컴퓨터비전과 인공지능] 8. 합성곱 신경망 아키텍처 3 - GoogLeNet
[컴퓨터비전과 인공지능] 8. 합성곱 신경망 아키텍처 3 - GoogLeNet
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습
 

About garbage collection

  • 1. About Garbage Collection Rendered : October 25, 2012 gmind7
  • 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
  • 11. How Garbage Collection works in Java ㅁ JVM 11 Command line Options
  • 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. How Garbage Collection Monitoring ㅁ 얼마 13 전 대화서비스에서의 PermGen Out of memory
  • 14. How Garbage Collection Monitoring ㅁ GUI GC Tool Demo excellect. VIsualVM & VisualGC & HPJMeter together. Eclipse MAT(Memory Analyzer Tool) 14
  • 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