SlideShare a Scribd company logo
G1GCを可視化してみました
- G1GC Visualizer -
     徳益芳郎 (某メーカー勤務)
Java Day Tokyo 2013
Java The Night
なぜ、可視化したの?
昨年夏、社内勉強会で G1GC を説明するために...
G1GCの資料を読んでみた
へぇー
G1GC の各世代管理
各世代は Region の集
合で表現
各世代の Region は必
要なときに必要なだけ
確保
Permanent 領域は
Region 単位の管理外
Old
Humongous
Survivor
Eden
Eden
Eden
EdenEden
Survivor
Permanent
Old
Old
Old
Old Old Old Old
OldOld
Old
Old
Old Old OldOld
Old
Old
Old Old
退避 GC
Old
Humongous
Permanent
Old
Old
Old
Old Old Old Old
OldOld
Old
Old
OldOld
Old
Old
Old Old
Eden
Eden EdenEden
Survivor
Old Old
Collection Set 内の Lived オブジェクトを他の Region に退避する
Eden
Old
Humongous
Permanent
Old
Old
Old
Old Old Old
OldOld
Old
Old
OldOld
Old
Old
Old Old
Survivor Old
Old Old
Evacuate
Eden
Eden EdenEden
Survivor Eden
なんとなく解ったけど...
やっぱり、動かして確認しよう!
Java VisualVM で観てみた
でも、期待と違った!
Old
Humongous
Survivor
Eden
Eden
Eden
EdenEden
SurvivorOld
Old
Old
Old Old Old Old
OldOld
Old
Old
Old Old OldOld
Old
Old
Old Old
?Region管理を
イメージできない!
....
311.040: [GC pause (young) (initial-mark), 0.00690255 secs]
[Parallel Time: 6.6 ms]
[GC Worker Start (ms): 311039.8 311039.8 311039.9 311045.7
Avg: 311041.3, Min: 311039.8, Max: 311045.7, Diff: 5.8]
[Ext Root Scanning (ms): 3.0 4.0 5.0 0.0
Avg: 3.0, Min: 0.0, Max: 5.0, Diff: 5.0]
[Update RS (ms): 1.6 0.7 0.1 0.0
Avg: 0.6, Min: 0.0, Max: 1.6, Diff: 1.6]
...
Avg: 0.1, Min: 0.0, Max: 0.1, Diff: 0.1]
[Termination Attempts : 1 1 1 1
Sum: 4, Avg: 1, Min: 1, Max: 1, Diff: 0]
[GC Worker End (ms): 311045.7 311045.7 311045.7 311045.7
Avg: 311045.7, Min: 311045.7, Max: 311045.7, Diff: 0.0]
[GC Worker (ms): 5.9 5.9 5.8 0.0
Avg: 4.4, Min: 0.0, Max: 5.9, Diff: 5.9]
[GC Worker Other (ms): 0.8 0.8 0.8 6.6
Avg: 2.2, Min: 0.8, Max: 6.6, Diff: 5.9]
[Clear CT: 0.0 ms]
....
GCログを出力してみた
-XX:+UseG1GC -Xloggc:<file> -XX:+PrintGCDetails
-XX:+UnlockDiagnosticVMOptions -XX:+G1PrintHeapRegions
....
G1HR ALLOC(Eden) 0x04c00000
G1HR ALLOC(Eden) 0x04000000
G1HR ALLOC(Eden) 0x05c00000
G1HR ALLOC(Eden) 0x04600000
G1HR ALLOC(Eden) 0x05d00000
G1HR #StartGC 261
G1HR CSET 0x04600000
G1HR CSET 0x05c00000
G1HR CSET 0x04000000
G1HR CSET 0x04c00000
G1HR CSET 0x04900000
G1HR REUSE 0x05500000
G1HR ALLOC(Survivor) 0x04b00000
G1HR RETIRE 0x04b00000 0x04b313d0
G1HR RETIRE 0x05500000 0x0553aa60
G1HR #EndGC 261
....
Old
Humongous
Survivor
Eden
Eden
Eden
EdenEden
SurvivorOld
Old
Old
Old Old Old Old
OldOld
Old
Old
Old Old OldOld
Old
Old
Old Old
?やっぱり、Region管理を
イメージできない!
だったら...
自分で可視化しよう!
せっかくなので JavaFX で作っちゃおう!
で、作ってみた...
....
G1HR ALLOC(Eden) 0x04c00000
G1HR ALLOC(Eden) 0x04000000
G1HR ALLOC(Eden) 0x05c00000
G1HR ALLOC(Eden) 0x04600000
G1HR ALLOC(Eden) 0x05d00000
G1HR #StartGC 261
G1HR CSET 0x04600000
G1HR CSET 0x05c00000
G1HR CSET 0x04000000
G1HR CSET 0x04c00000
G1HR CSET 0x04900000
G1HR REUSE 0x05500000
G1HR ALLOC(Survivor) 0x04b00000
G1HR RETIRE 0x04b00000 0x04b313d0
G1HR RETIRE 0x05500000 0x0553aa60
G1HR #EndGC 261
....
なんとなくイメージできた!?
Region の状態を可視化
Permanent 領域の可視化は対象外
Permanent
G1GC イベントも可視化
COMMIT / UNCOMMIT ヒープ領域の拡張・縮退
ALLOC / ALLOC-FORCE 各世代への Region 割当
CSET 退避する Region の選定
RETIRE Region の満杯前に退避終了
REUSE 退避先として既存 Regionを再利用
CLEAN CMS による Region の開放
POST-COMPACTION Full GC による Region 開放
EVAC-FAILRE Region 退避の失敗
Demo
終わり

More Related Content

PDF
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
PDF
GCをみればRTSが見えてくる、かも。。。
KEY
GPGPU deいろんな問題解いてみた
KEY
初心者向けAndroidゲーム開発ノウハウ
PDF
“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
ODP
ggplot2 110129
PDF
Rのデータ構造とメモリ管理
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
GCをみればRTSが見えてくる、かも。。。
GPGPU deいろんな問題解いてみた
初心者向けAndroidゲーム開発ノウハウ
“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
ggplot2 110129
Rのデータ構造とメモリ管理
Ad

Java Day Tokyo 2013 Java The Night - G1GCVisualizer -