garbage collection
TRANSCRIPT
Garbage Collection2015.02.13
이소은
목차
0.Garbage Collection을 공부한 이유
1.Garbage Collection
2.Hotspot JVM의 Garbage Collection
3.Hotspot JVM의 Garbage Collector의 종류
2
0. Garbage Collection을 공부한이유
1. Garbage Collection
1.1 Garbage Collection이란?
1.2 Garbage Collection의 대상
1.3 Garbage Collection과 Fragmentation
1. Garbage Collection
1.1 Garbage Collection이란?
1.2 Garbage Collection의 대상
1.3 Garbage Collection과 Fragmentation
1.1 Garbage Collection이란?
• Java에서 할당 받은 메모리를 해제 하는 것은 개발자의 영역이 아님
• System.gc()나 close()와 같은 함수도 있잖아?
Garbage Collection을 명시적으로 수행하거나 해당 객체의 사용을 중지하겠다는 의사 표현일 뿐 제거하고자 하는 객체를 메모리에서 삭제하겠다는 것은 아님.
7
1. 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
1. Garbage Collection
1.1 Garbage Collection이란?
1.2 Garbage Collection의 대상
1.3 Garbage Collection과 Fragmentation
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
•현재 사용 여부는 Root Set과의 관계로 판단
•Root Set에서 어떤 식으로든 Reference관계가 있다면 Reachable Object.
즉 현재 사용하고 있는 Object로 간주.
•이렇게 판단해서 Reachable Object가 아니면 Garbage Collection의 대상이 됨.
11
1.2 Garbage Collection의 대상
1. Garbage Collection
Unreachable
Reachable
Root Set
•현재 사용 여부는 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이라고한다.
•현재 사용 여부는 Root Set과의 관계로 판단
•Root Set에서 어떤 식으로든 Reference관계가 있다면 Reachable Object.
즉 현재 사용하고 있는 Object로 간주.
•이렇게 판단해서 Reachable Object가 아니면 Garbage Collection의 대상이 됨.
13
1.2 Garbage Collection의 대상
1. Garbage Collection
Unreachable
Reachable
Root Set
1. Garbage Collection
1.1 Garbage Collection이란?
1.2 Garbage Collection의 대상
1.3 Garbage Collection과 Fragmentation
•새로운 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
다시 한번 정리하면 Garbage Collection이란
Heap을재활용하기위해 Root Set에서참조되지않는 Object를없애가용한공간을만드는작업
2. Hotspot JVM의 Garbage Collection
2.1 Hotspot JVM의 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
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
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
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
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
25
여기서 잠깐 !
Old 영역에 있는 객체가 Young 영역의 객체를 참조하는 경우가 있을 때에는 어떻게 처리될까?
Card Table이라는 장치를 마련Card Table Old Generation의 메모리를 대표하는 별도의 메모리 구조를 의미만약 Young Object를 참조한 Old Object가 있다면 그 Old Object 시작주소에 해당하는 카드를 Dirty로표시. 만약 이 Reference가 해제되면 Dirty 표시가 사라짐.Card Table에 Card들을 늘어 놓고 뒤집어 가며 Reference의 존재 여부를 한 눈에 파악할 수 있게해줌.
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
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
• Young Generation과 Old Generation의 Garbage Collection 모두를 Serial로 처리하는 방식
• 1개의 Thread를 가지고 GC수행
• Hotspot JVM의 가장 기본적인 collector
28
3.1 Serial Collector
3. Hotspot JVM의 Garbage Collector의 종류
Young Generation – Generational Algorithm
29
Eden
A
Survivor1 - From
B
Survivor2 - To
EmptyC
3.1 Serial Collector
3. Hotspot JVM의 Garbage Collector의 종류
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의 종류
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의 종류
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의 종류
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의 종류
34
Old Generation –Mark-and-Compacting
Old
Old
Old
Old
Mark
Sweep
SlidingCompaction
3.1 Serial Collector
3. Hotspot JVM의 Garbage Collector의 종류
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의 종류
36
1.Throughput Collector
모든 리소스를 투입하여 garbage collector를 빨리 끝내자는 전략.
이는 대용량의 heap에 적합하며,
이 전략을 채택한 garbage collector는 병렬 처리를 수행하는 방법으로 채택.
2. Low Pause Collector
Suspend를 분산시켜 체감 pause time을 줄이자는 전략.
실시간을 요구하는 application에 적합. 이 전략을 채택한 Garbage Collector는 GC를 수행하는
동시에 application의 작업도 수행(concurrent)하는 방식을 사용하고 있음.
그래서!
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
• Throughput Collector중 하나.
• 많은 CPU를 동원하여 Garbage Collection시간을 단축 시키자는 아이디어가 parallel collector로 구체화 됨.
• Multi-Thread가 동시에 Garbage Collection을 수행. 단 young generation에만 국한
38
3.2 Parallel Collector
3. Hotspot JVM의 Garbage Collector의 종류
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
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
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를 늘이는방범으로문제를 회피할수 있음
42
Old Generation –Mark-and-Compacting
Old
Old
Old
Old
Mark
Sweep
SlidingCompaction
3.2 Parallel Collector
3. Hotspot JVM의 Garbage Collector의 종류
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
44
• Parallel Collector에서 Old Generation에 새로운 algorithm을 추가한 업그레이드 개념
• Oracle에서도 향후 Parallel Collector를 대체 할 수 있다는 전망을 내놓고 있음
• Multi CPU에 유리하고 Old Generation의 Collection시간을 감소시켜 전체적인 효율을
증가시킨다.
3.3 Parallel Compaction Collector
3. Hotspot JVM의 Garbage Collector의 종류
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의 종류
46
Old Generation – Parallel Compaction Algorithm
Mark Phase
Summary Phase
Compaction Phase
3.3 Parallel Compaction Collector
3. Hotspot JVM의 Garbage Collector의 종류
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의 종류
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의 종류
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의 종류
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의 종류
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의 종류
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의 종류
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의 종류
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의 종류
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
• 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의 종류
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의 종류
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의 종류
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의 종류
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의 종류
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의 종류
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의 종류
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의 종류
64
3.4 CMS(Concurrent Mark-Sweep) Collector
3. Hotspot JVM의 Garbage Collector의 종류
또 하나의 문제, Floating Garbage문제
InitialMark
ConcurrentMark
RemarkConcurrent
Sweep
V
V
V
65
3.4 CMS(Concurrent Mark-Sweep) Collector
3. Hotspot JVM의 Garbage Collector의 종류
또 하나의 문제, Floating Garbage문제
InitialMark
ConcurrentMark
RemarkConcurrent
Sweep
V
V
V
V
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
67
3.4 CMS(Concurrent Mark-Sweep) Collector
3. Hotspot JVM의 Garbage Collector의 종류
또 하나의 문제, Floating Garbage문제
InitialMark
ConcurrentMark
RemarkConcurrent
Sweep
V
V
V
V
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가 되버림
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
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
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 문제
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/