Garbage Collection for Dummies
-
Upload
akira-koyasu -
Category
Technology
-
view
2.671 -
download
3
description
Transcript of Garbage Collection for Dummies
Copyright © 2012 Akira Koyasu. Some rights reserved.
Garbage Collection for DummiesOverview HotSpot GC
photo#1
Copyright © 2012 Akira Koyasu. Some rights reserved.
AgendaJVM & GC heap & GC fundamentals
Collectors in HotSpot JVM HotSpot Collectors explained
Ergonomics & Tuning the start point of GC tuning
2
Copyright © 2012 Akira Koyasu. Some rights reserved.
JVM & GC
heap in JVM
Garbage Collection
stop the world
Generational GC
3
Copyright © 2012 Akira Koyasu. Some rights reserved.
heap in JVM
4
public static void main(String[] args) { int i = 1234; long[] longs = new long[16]; String str = "Hello!!"; Simple s = new Simple();}
Which objects are allocated in heap?
Copyright © 2012 Akira Koyasu. Some rights reserved.5
javap -c
Copyright © 2012 Akira Koyasu. Some rights reserved.5
$ javap -c study.gc.bootstrap.HeapCompiled from "Heap.java"public class study.gc.bootstrap.Heap { ... public static void main(java.lang.String[]); Code: 0: sipush 1234 3: istore_1 4: bipush 16 6: newarray long 8: astore_2 9: ldc #16 // String Hello!! 11: astore_3 12: new #18 // class study/gc/Simple 15: dup 16: invokespecial #20 // Method study/gc/Simple."<init>":()V 19: astore 4 21: return }
javap -c
Copyright © 2012 Akira Koyasu. Some rights reserved.
Garbage Collection
6
“Our resource is limited.So garbages should be
collected and recycled as soon as possible”
Copyright © 2012 Akira Koyasu. Some rights reserved.
Dead or Alive
7
void main() { sub();}void sub() { Greeter g = new Greeter(); Message msg; msg = new Message("Morning!"); g.doGreet(msg); msg = new Message("Hello!"); g.doGreet(msg);}
Greeter
Message
Message
at the end of each method, which objects are dead?
Copyright © 2012 Akira Koyasu. Some rights reserved.
Dead or Alive
8
Unreferenced objects are dead
reassignment
scope out
Copyright © 2012 Akira Koyasu. Some rights reserved.
Fragment, Compaction, Allocation
9
A CB ABB B
Copyright © 2012 Akira Koyasu. Some rights reserved.
Fragment, Compaction, Allocation
9
A CB A
fragment
Copyright © 2012 Akira Koyasu. Some rights reserved.
Fragment, Compaction, Allocation
9
A CB A
Copyright © 2012 Akira Koyasu. Some rights reserved.
Fragment, Compaction, Allocation
9
A CB A
Compaction
Copyright © 2012 Akira Koyasu. Some rights reserved.
Fragment, Compaction, Allocation
9
A CB A
Copyright © 2012 Akira Koyasu. Some rights reserved.
Fragment, Compaction, Allocation
9
A CB A
Allocation
Copyright © 2012 Akira Koyasu. Some rights reserved.
Fragment, Compaction, Allocation
9
A CB A C
Copyright © 2012 Akira Koyasu. Some rights reserved.
Live object identification
10
Reference counting
Traverse marking from root
Postman
Message
Message
Bag
Copyright © 2012 Akira Koyasu. Some rights reserved.
stop the world
11
Postman
Message
Message
Bag
In traversing, the Postman get a new message!!
Copyright © 2012 Akira Koyasu. Some rights reserved.
stop the world
11
Postman
Message
Message
Bag
In traversing, the Postman get a new message!!
Copyright © 2012 Akira Koyasu. Some rights reserved.
stop the world
11
Postman
Message
Message
Bag
In traversing, the Postman get a new message!!
Message
Copyright © 2012 Akira Koyasu. Some rights reserved.
Generational GC
12
the weak generational hypothesis:“Most objects die young”
young -> frequently collected
old -> seldomly collected
Copyright © 2012 Akira Koyasu. Some rights reserved.
Partitioned into generations
13
C
B
AEden
Survivor
Old
Young{
Copyright © 2012 Akira Koyasu. Some rights reserved.
Collectors in HotSpot JVM
throughput & low-latency
5 Collectors
14
Copyright © 2012 Akira Koyasu. Some rights reserved.
throughput & low-latency
throughput: more tasks in unit time
low-latency: fast response
15
Copyright © 2012 Akira Koyasu. Some rights reserved.
5 collectors
Serial Collector
Parallel Collector
Parallel Compacting Collector
Concurrent Mark Sweep Collector
Garbage First Collctor (1.7_u4)
16
Copyright © 2012 Akira Koyasu. Some rights reserved.
Serial Collector
1712
Eden
Survivor
Old
From To
for young generationcopying
Copyright © 2012 Akira Koyasu. Some rights reserved.
Serial Collector
1812
for old generation
mark-sweep
Copyright © 2012 Akira Koyasu. Some rights reserved.
Parallel Collector
19
for young generation
use a parallel version of the serial collector algorithm
Serial Collector
Parallel Collector
Copyright © 2012 Akira Koyasu. Some rights reserved.
Parallel Compacting Collector
20
for old generation
R1 R2 R3 R4 R5
Copyright © 2012 Akira Koyasu. Some rights reserved.
Parallel Compacting Collector
20
for old generation
R1 R2 R3 R4 R5
T1 T2
Copyright © 2012 Akira Koyasu. Some rights reserved.
Parallel Compacting Collector
20
for old generation
R1 R2 R3 R4 R5
T1 T2
Copyright © 2012 Akira Koyasu. Some rights reserved.
Parallel Compacting Collector
20
for old generation
R1 R2 R3 R4 R5
T1 T2
Copyright © 2012 Akira Koyasu. Some rights reserved.
Parallel Compacting Collector
20
for old generation
R1 R2 R3 R4 R5
T1 T2
Copyright © 2012 Akira Koyasu. Some rights reserved.
Parallel Compacting Collector
20
for old generation
R1 R2 R3 R4 R5
T1 T2
Copyright © 2012 Akira Koyasu. Some rights reserved.
Concurrent Mark Sweep Collector
21
for old generation
non-compactingPhases
initial mark (STW)concurrent markremark (STW)concurrent sweep
Copyright © 2012 Akira Koyasu. Some rights reserved.
Concurrent Mark Sweep Collector
22
for old generationPostman
Message
Message
Bag
new Message is marked in remark phase
Bag is updated in concurrent marking phase
Copyright © 2012 Akira Koyasu. Some rights reserved.
Concurrent Mark Sweep Collector
22
for old generationPostman
Message
Message
Bag
new Message is marked in remark phase
Bag is updated in concurrent marking phase
Copyright © 2012 Akira Koyasu. Some rights reserved.
Concurrent Mark Sweep Collector
22
for old generationPostman
Message
Message
Bag
Message
new Message is marked in remark phase
Bag is updated in concurrent marking phase
Copyright © 2012 Akira Koyasu. Some rights reserved.
Concurrent Mark Sweep Collector
22
for old generationPostman
Message
Message
Bag
Message
new Message is marked in remark phase
Bag is updated in concurrent marking phase
Copyright © 2012 Akira Koyasu. Some rights reserved.
Garbage First Collector
23
for young & old generation
Y
Y O
Y O
O O
heap is devided into regions
some regions are young, some other regions are old
Copyright © 2012 Akira Koyasu. Some rights reserved.
Garbage First Collector
24
for young & old generation
collection regions chosen based on time prediction
(some garbages remain)
Copyright © 2012 Akira Koyasu. Some rights reserved.
Garbage First Collector
24
for young & old generation
collection regions chosen based on time prediction
(some garbages remain)
Copyright © 2012 Akira Koyasu. Some rights reserved.
Garbage First Collector
24
for young & old generation
collection regions chosen based on time prediction
(some garbages remain)
Copyright © 2012 Akira Koyasu. Some rights reserved.
select collector
25
collector optionSerial -XX:+UseSerialGC
Parallel -XX:+UseParallelGC
Parallel Compacting -XX:+UseParallelOldGC
CMS -XX:+UseConcMarkSweepGC
G1 -XX:+UseG1GC
Copyright © 2012 Akira Koyasu. Some rights reserved.
Ergonomics & Tuning
Ergonomics
JVM options
command line tools
26
Copyright © 2012 Akira Koyasu. Some rights reserved.
GC tuning
27
the first step to tune GC is to do nothing
Copyright © 2012 Akira Koyasu. Some rights reserved.
Ergonomics
28
latency: -XX:MaxGCPauseMillis=n
throughput: -XX:GCTimeRatio=99
Behavior-based options
Copyright © 2012 Akira Koyasu. Some rights reserved.
JVM options
-Xmxn
-Xmsn
-XX:ParallelGCThreads=n
-XX:+PrintFlagsFinal
29
Copyright © 2012 Akira Koyasu. Some rights reserved.
command line tools
jps
jstat
jmap
jhat
30
Copyright © 2012 Akira Koyasu. Some rights reserved.
jstat
31
Copyright © 2012 Akira Koyasu. Some rights reserved.
jstat
31
$ jps -l23437 study.gc.bootstrap.Heap23489 sun.tools.jps.Jps
$ jstat -gcutil -h20 23437 1s S0 S1 E O P YGC YGCT FGC FGCT GCT 50.00 0.00 94.64 0.56 12.63 32 0.054 0 0.000 0.054 0.00 0.00 12.08 0.56 12.63 35 0.054 0 0.000 0.054 50.00 0.00 0.00 0.56 12.63 38 0.090 0 0.000 0.090 0.00 0.00 0.00 0.56 12.63 40 0.092 0 0.000 0.092 0.00 25.00 74.50 0.56 12.63 41 0.092 0 0.000 0.092 0.00 0.00 22.15 0.56 12.63 43 0.093 0 0.000 0.093 0.00 25.00 10.07 0.56 12.63 45 0.093 0 0.000 0.093 0.00 25.00 0.00 0.56 12.63 47 0.094 0 0.000 0.094 0.00 25.00 0.00 0.56 12.63 49 0.096 0 0.000 0.096 0.00 0.00 24.16 0.56 12.63 51 0.098 0 0.000 0.098 0.00 0.00 42.28 0.56 12.63 53 0.099 0 0.000 0.099 0.00 0.00 44.29 0.56 12.63 55 0.100 0 0.000 0.100...
Copyright © 2012 Akira Koyasu. Some rights reserved.
jmap
32
Copyright © 2012 Akira Koyasu. Some rights reserved.
jmap
32
$ jmap -histo:live 23437
num #instances #bytes class name---------------------------------------------- 1: 5822 797008 <methodKlass> 2: 5822 699712 <constMethodKlass> 3: 393 456488 <constantPoolKlass> 4: 360 286400 <constantPoolCacheKlass> 5: 393 283512 <instanceKlassKlass> 6: 1094 98656 [C 7: 511 97864 [B 8: 452 55128 java.lang.Class 9: 632 40536 [[I 10: 589 37440 [S...
$ jmap -dump:live,format=b,file=heap.dump 23437Dumping heap to heap.dump ...Heap dump file created
Copyright © 2012 Akira Koyasu. Some rights reserved.
jhat
33
Copyright © 2012 Akira Koyasu. Some rights reserved.
jhat
33
$ jhat heap.dump Reading from heap.dump...Dump file created Thu Dec 27 15:44:54Snapshot read, resolving...Resolving 5895 objects...Chasing references, expect 1 dots.Eliminating duplicate references.Snapshot resolved.Started HTTP server on port 7000Server is ready.
Copyright © 2012 Akira Koyasu. Some rights reserved.
jhat
33
$ jhat heap.dump Reading from heap.dump...Dump file created Thu Dec 27 15:44:54Snapshot read, resolving...Resolving 5895 objects...Chasing references, expect 1 dots.Eliminating duplicate references.Snapshot resolved.Started HTTP server on port 7000Server is ready.
Copyright © 2012 Akira Koyasu. Some rights reserved.
References
34
Memory Management in the Java HotSpot Virtual Machine (Sun Microsystems, April 2006)
Garbage-First Garbage Collection (Sun Microsystems, October 2004)
A Generational Mostly-concurrent Garbage Collector (Sun Microsystems, June 2000)
Garbage-First Collector http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html
Parallel Compaction http://docs.oracle.com/javase/7/docs/technotes/guides/vm/par-compaction-6.html
Concurrent Mark Sweep Collector Enhancements http://docs.oracle.com/javase/7/docs/technotes/guides/vm/cms-6.html
Storage Management http://openjdk.java.net/groups/hotspot/docs/StorageManagement.html
Copyright © 2012 Akira Koyasu. Some rights reserved.
Notes
35
This work is licensed under the Creative Commons Attribution-NonCommercial 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/.
photo#1 http://www.flickr.com/photos/yto/5896836025/