garbage collection

72
Garbage Collection 2015.02.13 이소은

Upload: -

Post on 17-Jul-2015

599 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Garbage collection

Garbage Collection2015.02.13

이소은

Page 2: Garbage collection

목차

0.Garbage Collection을 공부한 이유

1.Garbage Collection

2.Hotspot JVM의 Garbage Collection

3.Hotspot JVM의 Garbage Collector의 종류

2

Page 3: Garbage collection

0. Garbage Collection을 공부한이유

Page 4: Garbage collection
Page 5: Garbage collection

1. Garbage Collection

1.1 Garbage Collection이란?

1.2 Garbage Collection의 대상

1.3 Garbage Collection과 Fragmentation

Page 6: Garbage collection

1. Garbage Collection

1.1 Garbage Collection이란?

1.2 Garbage Collection의 대상

1.3 Garbage Collection과 Fragmentation

Page 7: Garbage collection

1.1 Garbage Collection이란?

• Java에서 할당 받은 메모리를 해제 하는 것은 개발자의 영역이 아님

• System.gc()나 close()와 같은 함수도 있잖아?

Garbage Collection을 명시적으로 수행하거나 해당 객체의 사용을 중지하겠다는 의사 표현일 뿐 제거하고자 하는 객체를 메모리에서 삭제하겠다는 것은 아님.

7

1. Garbage Collection

Page 8: Garbage collection

“Heap storage for objects is reclaimed by an automatic

storage management system(typically a garbage collector);

objects are never explicitly deallocated.”

--Java Virtual Machine Speculation, Section 3.5.3[JVMS2 1999]

8

1.1 Garbage Collection이란

1. Garbage Collection

Page 9: Garbage collection

1. Garbage Collection

1.1 Garbage Collection이란?

1.2 Garbage Collection의 대상

1.3 Garbage Collection과 Fragmentation

Page 10: Garbage collection

Garbage Collection Garbage를 모으는 작업.

그럼 Garbage를 정의하고 넘어가면,

Heap과 Method Area에서 사용되지 않는 Object를 의미.

사용되지 않는 다는 의미를 어디까지 볼 것이냐는 문제

10

1.1 Garbage Collection의 대상

1. Garbage Collection

PC RegistersJava VirtualMachineStacks

MethodArea

HeapNativeMethodStacks

JVM의 Runtime Data Areas

Page 11: Garbage collection

•현재 사용 여부는 Root Set과의 관계로 판단

•Root Set에서 어떤 식으로든 Reference관계가 있다면 Reachable Object.

즉 현재 사용하고 있는 Object로 간주.

•이렇게 판단해서 Reachable Object가 아니면 Garbage Collection의 대상이 됨.

11

1.2 Garbage Collection의 대상

1. Garbage Collection

Unreachable

Reachable

Root Set

Page 12: Garbage collection

•현재 사용 여부는 Root Set과의 관계로 판단

•Root Set에서 어떤 식으로든 Reference관계가 있다면 Reachable Object.

즉 현재 사용하고 있는 Object로 간주.

•이렇게 판단해서 Reachable Object가 아니면 Garbage Collection의 대상이 됨.

12

1.2 Garbage Collection의 대상

1. Garbage Collection

Unreachable

Reachable

Root Set

한 객체는여러다른 객체를참조하고, 참조된다른객체들도마찬가지로또 다른 객체들을참조할수 있으므로객체들은참조사슬을이룬다. 이런 상황에서유효한참조여부를파악하려면항상 유효한최초의참조가있어야하는데이를객체 참조의 root set이라고한다.

Page 13: Garbage collection

•현재 사용 여부는 Root Set과의 관계로 판단

•Root Set에서 어떤 식으로든 Reference관계가 있다면 Reachable Object.

즉 현재 사용하고 있는 Object로 간주.

•이렇게 판단해서 Reachable Object가 아니면 Garbage Collection의 대상이 됨.

13

1.2 Garbage Collection의 대상

1. Garbage Collection

Unreachable

Reachable

Root Set

Page 14: Garbage collection

1. Garbage Collection

1.1 Garbage Collection이란?

1.2 Garbage Collection의 대상

1.3 Garbage Collection과 Fragmentation

Page 15: Garbage collection

•새로운 Object의 할당을 위해 한정된 Heap공간을

재활용하려는 목적으로 수행

•재활용을 위해 수행된 메모리의 해지는 할당한 그 자리에서 이루어지기 때문에

Garbage가 빠져 나간 자리는 듬성듬성

•Heap의 단편화(Fragmentation)발생

•이러한 현상을 방지하기 위해 Compaction과 같은Algorithm을 사용

15

1.3 Garbage Collection과 Fragmentation

1. Garbage Collection

Live

Garbage

Live

Live

Garbage

Live

Garbage

Live

Live

Free(1K)

Live

Live

Free(3K)

Live

Free(2K)

Live

GarbageCollection

Page 16: Garbage collection

다시 한번 정리하면 Garbage Collection이란

Heap을재활용하기위해 Root Set에서참조되지않는 Object를없애가용한공간을만드는작업

Page 17: Garbage collection

2. Hotspot JVM의 Garbage Collection

2.1 Hotspot JVM의 Garbage Collection 소개

Page 18: Garbage collection

18

Garbage Collector는 두 가지 가설 하에 만들어짐.

대부분의 객체는 금방 접근 불가능 상태가 된다. – high infant mortality

오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.

이러한 가설을 ‘weak generational Hypothesis’

이러한 가설의 장점을 최대한 살리기 위해 Hotspot JVM에서는 크게 2개로 물리적 공간을 나눔.

2.1 Hotspot JVM의 Garbage Collection 소개

2. Hotspot JVM의 Garbage Collection

Page 19: Garbage collection

19

• Young 영역(Yong Generation 영역):

새롭게 생성한 객체의 대부분이 여기에 위치.대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 매우 많은 객체가 Young 영역에 생성되었다가 사라짐.이 영역에서 객체가 사라질때 Minor GC가 발생한다고 말함.

• Old 영역(Old Generation 영역):

접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 여기로 복사됨. 대부분Young 영역보다 크게 할당하며, 크기가 큰 만큼 Young 영역보다 GC는 적게 발생. 이 영역에서 객체가 사라질 때 Major GC(혹은 Full GC)가 발생한다고 말함.

2.1 Hotspot JVM의 Garbage Collection 소개

2. Hotspot JVM의 Garbage Collection

Page 20: Garbage collection

20

Eden Tenured Permanent

Young Generation Old Generation Method Area

Su

rviv

or

1

Su

rviv

or

2

2.1 Hotspot JVM의 Garbage Collection 소개

2. Hotspot JVM의 Garbage Collection

Page 21: Garbage collection

21

Eden Tenured Permanent

Young Generation Old Generation Method Area

Su

rviv

or

1

Su

rviv

or

2

2.1 Hotspot JVM의 Garbage Collection 소개

2. Hotspot JVM의 Garbage Collection

Page 22: Garbage collection

22

Eden Tenured Permanent

Young Generation Old Generation Method Area

Su

rviv

or

1

Su

rviv

or

2

2.1 Hotspot JVM의 Garbage Collection 소개

2. Hotspot JVM의 Garbage Collection

Page 23: Garbage collection
Page 24: Garbage collection
Page 25: Garbage collection

25

여기서 잠깐 !

Old 영역에 있는 객체가 Young 영역의 객체를 참조하는 경우가 있을 때에는 어떻게 처리될까?

Card Table이라는 장치를 마련Card Table Old Generation의 메모리를 대표하는 별도의 메모리 구조를 의미만약 Young Object를 참조한 Old Object가 있다면 그 Old Object 시작주소에 해당하는 카드를 Dirty로표시. 만약 이 Reference가 해제되면 Dirty 표시가 사라짐.Card Table에 Card들을 늘어 놓고 뒤집어 가며 Reference의 존재 여부를 한 눈에 파악할 수 있게해줌.

Page 26: Garbage collection

3. Hotspot JVM의 Garbage Collector의 종류

3.1 Serial Collector

3.2 Parallel Collector

3.3 Parallel Compaction Collector

3.4 CMS Collector

3.5 Garbage First Collector

Page 27: Garbage collection

3. Hotspot JVM의 Garbage Collector의 종류

3.1 Serial Collector

3.2 Parallel Collector

3.3 Parallel Compaction Collector

3.4 CMS Collector

3.5 Garbage First Collector

Page 28: Garbage collection

• Young Generation과 Old Generation의 Garbage Collection 모두를 Serial로 처리하는 방식

• 1개의 Thread를 가지고 GC수행

• Hotspot JVM의 가장 기본적인 collector

28

3.1 Serial Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 29: Garbage collection

Young Generation – Generational Algorithm

29

Eden

A

Survivor1 - From

B

Survivor2 - To

EmptyC

3.1 Serial Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 30: Garbage collection

Young Generation – Generational Algorithm

30

Eden

A

Survivor1 - From

B

Survivor2 - To

C

Minor GC 발생 하면

A’ B’ C’

3.1 Serial Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 31: Garbage collection

Young Generation – Generational Algorithm

31

Empty

Eden

Survivor1 - From

Empty

Survivor2 - To

Minor GC 발생 후 결과

A’ B’ C’

3.1 Serial Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 32: Garbage collection

Young Generation – Generational Algorithm

32

Eden

A

Survivor1 - To

Empty B

Survivor2 - From

M

Young

Old

3.1 Serial Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 33: Garbage collection

Young Generation – Generational Algorithm-Minor GC발생 후

33

Empty

Eden

Survivor1 - From Survivor2 - To

Empty

Young

Old M

A’ B’

3.1 Serial Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 34: Garbage collection

34

Old Generation –Mark-and-Compacting

Old

Old

Old

Old

Mark

Sweep

SlidingCompaction

3.1 Serial Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 35: Garbage collection

35

Old Generation –Mark-and-Compacting

Old

Old

Old

Old

Mark

Sweep

SlidingCompaction

• Serial Collector가 나온이후 IT환경이급변하여, heap의크기를점점 크게 설정해야하는 상황이 도래함에따라 Serial Collector의 한계가드러나기 시작.

• 가장 큰 문제는 GC를 수행 하는 중에 나타나는 suspend현상

• heap이커짐에따라 suspend현상은두드러졌고 application은점점실시간에가까운성능을요구하고있음.

그런데

3.1 Serial Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 36: Garbage collection

36

1.Throughput Collector

모든 리소스를 투입하여 garbage collector를 빨리 끝내자는 전략.

이는 대용량의 heap에 적합하며,

이 전략을 채택한 garbage collector는 병렬 처리를 수행하는 방법으로 채택.

2. Low Pause Collector

Suspend를 분산시켜 체감 pause time을 줄이자는 전략.

실시간을 요구하는 application에 적합. 이 전략을 채택한 Garbage Collector는 GC를 수행하는

동시에 application의 작업도 수행(concurrent)하는 방식을 사용하고 있음.

그래서!

Page 37: Garbage collection

3. Hotspot JVM의 Garbage Collector의 종류

3.1 Serial Collector

3.2 Parallel Collector

3.3 Parallel Compaction Collector

3.4 CMS Collector

3.5 Garbage First Collector

Page 38: Garbage collection

• Throughput Collector중 하나.

• 많은 CPU를 동원하여 Garbage Collection시간을 단축 시키자는 아이디어가 parallel collector로 구체화 됨.

• Multi-Thread가 동시에 Garbage Collection을 수행. 단 young generation에만 국한

38

3.2 Parallel Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 39: Garbage collection

39

Eden

A

B A’ B’

Survivor1 - From Survivor1 - To

Stop & Copy

Serial Collector Parallel Collector

3.2 Parallel Collector

3. Hotspot JVM의 Garbage Collector의 종류

Young Generation – Parallel Copy Algorithm

Page 40: Garbage collection

40

여기서 잠깐 !

메모리의 특성상 같은 메모리 공간을 두 Thread혹은 Process가 접근하게 되면 Corruption이 발생!이러한 Corruption을 회피하기 위해 동기화 작업이 수반되어야 하는데 이 경우 promotion의 성능이 떨어짐

Hotspot은 이를 위해 PLAB(Parallel Local Allocation Buffer)이라는 Promotion Buffer를 마련.Promotion Buffer란 Garbage Collection Thread가 Promotion시 배타적으로 사용하기 위해 Thread마다Old Generation의 일정 부분을 할당해 놓는 것을 말함.

T1 T2 T1T2

Promotion Buffer

Page 41: Garbage collection

41

그런데

메모리의 특성상 같은 메모리 공간을 두 Thread혹은 Process가 접근하게 되면 Corruption이 발생!이러한 Corruption을 회피하기 위해 동기화 작업이 수반되어야 하는데 이 경우 promotion의 성능이 떨어짐

Hotspot은 이를 위해 PLAB(Parallel Local Allocation Buffer)이라는 Promotion Buffer를 마련.Promotion Buffer란 Garbage Collection Thread가 Promotion시 배타적으로 사용하기 위해 Thread마다Old Generation의 일정 부분을 할당해 놓는 것을 말함.

T1 T2 T1T2

Promotion Buffer

많은 수의 Thread가자신의 buffer를할당받은채사용되지않거나어쩔 수 없이 발생하는 buffer내의자투리 공간이 heap단편화의원인이 될 수도 있음.

이 문제가 발생할경우 GC Thread를감소 시키거나 Old Generation의 size를 늘이는방범으로문제를 회피할수 있음

Page 42: Garbage collection

42

Old Generation –Mark-and-Compacting

Old

Old

Old

Old

Mark

Sweep

SlidingCompaction

3.2 Parallel Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 43: Garbage collection

3. Hotspot JVM의 Garbage Collector의 종류

3.1 Serial Collector

3.2 Parallel Collector

3.3 Parallel Compaction Collector

3.4 CMS Collector

3.5 Garbage First Collector

Page 44: Garbage collection

44

• Parallel Collector에서 Old Generation에 새로운 algorithm을 추가한 업그레이드 개념

• Oracle에서도 향후 Parallel Collector를 대체 할 수 있다는 전망을 내놓고 있음

• Multi CPU에 유리하고 Old Generation의 Collection시간을 감소시켜 전체적인 효율을

증가시킨다.

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 45: Garbage collection

454545

Eden

A

B A’ B’

Survivor1 - From Survivor1 - To

Stop & Copy

Serial Collector Parallel Collector

Young Generation – Parallel Copy Algorithm

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 46: Garbage collection

46

Old Generation – Parallel Compaction Algorithm

Mark Phase

Summary Phase

Compaction Phase

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 47: Garbage collection

47

Old Generation – Parallel Compaction Algorithm

Mark Phase

Summary Phase

Compaction Phase

old generation을 region이라는 논리적인단위로 균일하게 나눔.region이 구분되면 Collection Thread들은 각각 region별로 Live object를marking하기 시작Parallel로 작업

v v vv v v

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 48: Garbage collection

48

Old Generation – Parallel Compaction Algorithm

Mark Phase

Summary Phase

Compaction Phase

Concurrent단계.Region단위로 작업을 수행Region통계정보를 바탕으로 각 region의Reachable Object의 밀도를 평가 후Dense Prefix설정해 GC수행 범위를 정함.

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 49: Garbage collection

49

Old Generation – Parallel Compaction Algorithm

Mark Phase

Summary Phase

Compaction Phase

Concurrent단계.Region단위로 작업을 수행Region통계정보를 바탕으로 각 region의Reachable Object의 밀도를 평가 후Dense Prefix설정.

V V V V V V V

Dense Prefix

Garbage Collection 대상에서 제외 Garbage Collection의 대상이면서 Compaction 수행

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 50: Garbage collection

50

Old Generation – Parallel Compaction Algorithm

Mark Phase

Summary Phase

Compaction Phase

Concurrent단계.Region단위로 작업을 수행Region통계정보를 바탕으로 각 region의Reachable Object의 밀도를 평가 후Dense Prefix설정해 GC수행 범위를 정함.이를 통해 Compaction범위를 줄여주어GC에 소요되는 시간을 줄임Dense Prefix설정 후 Compaction의 대상이되는 Region의 First Live Object주소를 찾아저장.

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 51: Garbage collection

51

Old Generation – Parallel Compaction Algorithm

Mark Phase

Summary Phase

Compaction Phase

Heap을 잠시 Suspend상태로 만들고, 모든Thread들이 각 Region을 할당 받아Compaction 수행.

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 52: Garbage collection

52

Old Generation – Parallel Compaction Algorithm

Mark Phase

Summary Phase

Compaction Phase

Heap을 잠시 Suspend상태로 만들고, 모든Thread들이 각 Region을 할당 받아Compaction 수행.

V V V V V V V

Destination Source

Source와 Destination이라는의미는 Live Object를어디에서어디로옮길것인지를결정하는것

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 53: Garbage collection

53

Old Generation – Parallel Compaction Algorithm

Mark Phase

Summary Phase

Compaction Phase

Heap을 잠시 Suspend상태로 만들고, 모든Thread들이 각 Region을 할당 받아Compaction 수행.

V V V V V V V

Destination Source

V V V V V V V

Destination Source

T1

T2

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 54: Garbage collection

54

Old Generation – Parallel Compaction Algorithm

Mark Phase

Summary Phase

Compaction Phase

Heap을 잠시 Suspend상태로 만들고, 모든Thread들이 각 Region을 할당 받아Compaction 수행.

V V V V V V V

Destination Source

V V V V V V V

T1

3.3 Parallel Compaction Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 55: Garbage collection

3. Hotspot JVM의 Garbage Collector의 종류

3.1 Serial Collector

3.2 Parallel Collector

3.3 Parallel Compaction Collector

3.4 CMS Collector

3.5 Garbage First Collector

Page 56: Garbage collection

• Pause Time Goal에 맞는 collector

• CMS Collector는 Garbage Collection시 수반되는 suspend time을 적절하게 분산하여 응답시간을 개선하는 방식을 사용

• Young Generation에서는 Parallel Collector와 동일한 Parallel Copy Algorithm

Old Generation에서는 Concurrent Mark-Sweep Algorithm을 사용

56

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 57: Garbage collection

5757

Eden

A

B A’ B’

Survivor1 - From Survivor1 - To

Stop & Copy

Serial Collector Parallel Collector

Young Generation – Parallel Copy Algorithm

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 58: Garbage collection

58

Initial Mark Phase

Concurrent Mark Phase

Remark Phase

Concurrent Sweep Phase

Old Generation –Concurrent Mark-Sweep Algorithm

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 59: Garbage collection

59

Initial Mark Phase

Concurrent Mark Phase

Remark Phase

Concurrent Sweep Phase

Old Generation –Concurrent Mark-Sweep Algorithm

Single Thread만이 사용되는 Serial Phase.Application에서 직접 Reference되는Live Object만 빠르게 구별해 냄.Heap은 Suspend상태가 되는데root set에서 직접 Reference되는 Object만을대상으로 하기 때문에 Suspend시간은최소화 됨.

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 60: Garbage collection

60

Initial Mark Phase

Concurrent Mark Phase

Remark Phase

Concurrent Sweep Phase

Old Generation –Concurrent Mark-Sweep Algorithm

Single Thread만이 사용되는 Serial Phase.Concurrent라는 단어 처럼 GC Thread외의Working Thread들은 Application을 수행Initial Mark Phase에서 선별된 Live Object를대상으로 reference하고 있는 Object를 추적Live여부를 구별.

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 61: Garbage collection

61

Initial Mark Phase

Concurrent Mark Phase

Remark Phase

Concurrent Sweep Phase

Old Generation –Concurrent Mark-Sweep Algorithm

모든 Thread들이 GC에 동원.Application의수행은 잠시 중단. Remark라는 말 그대로Mark 작업을 다시 수행한다는 의미로Concurrent 작업으로 이해 발생한 변경 사항을반영하기 위한 작업. 각 Thread들이 이미 Marking된 Object를다시 추적, live 여부 확정.이 작업은 Initial Mark보다 작업량이 많기 때문에 가용한 모든 resource를 투입하여 수행시간 단축.

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 62: Garbage collection

62

Initial Mark Phase

Concurrent Mark Phase

Remark Phase

Concurrent Sweep Phase

Old Generation –Concurrent Mark-Sweep Algorithm

Remark작업을 통해 최종적으로 Live로판명된 Object를 제외한 Dead Object를지우는 것임. Dead Object를 지워 그 공간을다시 사용 할 수 있도록 하는 작업 수행.

x x x

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 63: Garbage collection

63

단편화 문제 발생, 이를 해결하기 위해freelist를 사용하여 young generation에서 promotion된object와 크기가 비슷한 free space를 탐색하는 방법 고안그러나 Young Generation의 부담만 가중.

내가 가야 할 위치는 어디?

여긴가?여긴가?

여긴가?

여긴가?

아 힘들엉

Young Generation Old Generation

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

Page 64: Garbage collection

64

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

또 하나의 문제, Floating Garbage문제

InitialMark

ConcurrentMark

RemarkConcurrent

Sweep

V

V

V

Page 65: Garbage collection

65

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

또 하나의 문제, Floating Garbage문제

InitialMark

ConcurrentMark

RemarkConcurrent

Sweep

V

V

V

V

Page 66: Garbage collection

66

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

또 하나의 문제, Floating Garbage문제

InitialMark

ConcurrentMark

RemarkConcurrent

Sweep

V

V

V

V

Promotion 되자 마자 Garbage

Page 67: Garbage collection

67

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

또 하나의 문제, Floating Garbage문제

InitialMark

ConcurrentMark

RemarkConcurrent

Sweep

V

V

V

V

Page 68: Garbage collection

68

3.4 CMS(Concurrent Mark-Sweep) Collector

3. Hotspot JVM의 Garbage Collector의 종류

또 하나의 문제, Floating Garbage문제

InitialMark

ConcurrentMark

RemarkConcurrent

Sweep

V

V

V

V

A B

Floating Garbage가 되버림

Page 69: Garbage collection

3. Hotspot JVM의 Garbage Collector의 종류

3.1 Serial Collector

3.2 Parallel Collector

3.3 Parallel Compaction Collector

3.4 CMS Collector

3.5 Garbage First Collector

Page 70: Garbage collection

70

• CMS GC를 대체하기 위해서 만들어 짐.• 물리적인 Generation의 구분을 없애고 전체 Heap을1Mb~32Mb단위의 Region으로 재편• Garbage First라는 말대로 Garbage로만 꽉 차있는Region부터 GC시작• Concurrent + Parallel + Compacting의 조합

3.5 Garbage First Collector

3. Hotspot JVM의 Garbage Collector의 종류

H O U Y O

H O Y Y O

H U Y O Y

H Y Y Y U

O Y O Y O

Y: Young Generation O: Old Generation

H: humongous U: Unused

Page 71: Garbage collection

71

Appendix.

Collector SerialParallel

CompactCMS G1

장점

작은 data set을 가지고 있는어플리케이션에서 최고의 성능을 냄.

• 멀티스레드와 멀티프로세스를 가진 어플리케이션에 적합.

• Throughput 목적에 가장 부함.

• 큰 data set에 좋은 성능을낸다.

• 멀티스레드와 멀티프로세스를가진 어플리케이션에 적합.

• 큰 data set에 좋은 성능을 낸다

• 실시간 어플리케이션에 적합

• 작은 data set과 큰 data set 모두 적합

• Throughput과 low pause time목적에 적합.

단점규모가 큰 어플리케이션엔 적합하지 않음.

• 싱글 코어인 경우 효과를 얻지 못할 수도 있음. 그래서 따로 incremental mode를 설정 해야 함.

• 단편화 문제• Floating Garbage 문제

Page 72: Garbage collection

72

참조 문헌• http://blog.takipi.com/garbage-collectors-serial-vs-parallel-vs-cms-vs-the-

g1-and-whats-new-in-java-8/• http://www.omsn.de/blog/brief-comparison-of-java-7-hotspot-garbage-

collectors• Java Performance Fundamental 김한도 지음 ㈜엑셈• http://helloworld.naver.com/helloworld/textyle/1329• http://blog.jelastic.com/2013/01/24/the-truth-about-paas-vertical-scaling-

and-why-you-are-being-oversold/• https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1

&sqi=2&ved=0CCUQFjAA&url=http%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Ftech%2Findex-jsp-140228.html&ei=MMXaVL2TJOe5mwWZnoCADw&usg=AFQjCNHhFj3D5-BfVBPuZ6JL7JF7PCX-UA&sig2=z4gqAR4bu7LA-7IN2lLwbg&bvm=bv.85761416,d.dGc&cad=rja

• http://www.infoq.com/articles/Java_Garbage_Collection_Distilled• http://blog.novatec-gmbh.de/g1-action-better-cms/