SlideShare a Scribd company logo
-,7⏯␯␍⏠␧ 
⎰⎙⏂⎯λഽ 
#MXNXWRァ⎙⏆⎐⎢⏈ア 
ݠ୉۝λ 
1
ߢډࣅѻ
阪田 浩一 
文学部哲学科卒 
3 
@jyukutyo 
著書 3冊 
関西Javaエンジニアの会 
(関ジャバ) 発起人・運営 
Fight the Future 
http://jyukutyo.hatenablog.com/ 
フリュー株式会社 所属 
プリ機と連携する 
画像SNS「ピクトリンク」 
開発・運用に従事. 
会員数800万人! 
ScalaMatsuri 
スポンサー企業! 
エンジニア歴11年 35歳 
SI業界での客先常駐 9年 
Web系? 2年強 
塾講師アルバイト
-90ຢ⎢⎌⏊
⎰ 
ܞ௟⎯౎಺ࠋ⎯ 
ય⎨݂ࠜƧ
⏉⏎⎘⎐⎋Ա⎅⎘⎿⎚
⎿⎛⎰ 
⎋⎖⏊⎅
-,7⏯␯␍⏠␧⎤⎧ъを
ٶව⎫଑զ⎨⎰
-,7␕⍬⏵⎯щ২␚⏳␯⎰ 
߹۱ঽ⎬ 
ু␌⏠␄⏯⍬␅⏓ 
␚⏳␯⏯⍬␅⎬ 
ബԀ⎚⏌ァんア
⎔⎔⎨⎰ 
-,7⏯␯␍⏠␧⏓ 
߹۱ߗ⎬ 
ஓଯ⏯␯␍⏠␧⎚⏌ 
⎩⎅⎇Τය⎨छ⏂⎿⎚
-XVW,Q7LPH⏯␯␍⏠␧ 
! 
␝⏹⏿␅⎍څ⎴ࡥ⎖⏍⎠⎩⎎⎬ 
␝⏹⏿␅⎯␌⏠␄⏯⍬␅⏓⏯␯␍⏠␧⎘⎧ 
␉⏠␂⏟␒⎫␚⏳␯⏯⍬␅⎬ബԀ⎚⏌
␝␦⏿␄
⏯␯␍⏠␧݌⏀⎯ 
⏯⍬␅⏓څ⎴ࡥ⎚⎯⎨る 
߹۱⎍ਙ⎅
␃␝␦⏿␄
␝⏹⏿␅⏓⏯␯␍⏠␧⎚⏌ 
ࡽ๲⎬ 
੒⎎⎫⏦⍬␌⍬␔⏿␅⎍ 
⎃⏌
⎔⎯⏯␯␍⏠␧⎯ 
⏻⏠␛␯⏬⎨ 
݂଱ш⏃߹޵⎚⏌
-90⎨⎰߹۱ߗ⎬ 
␓␩␑⏝⏠␦␯⏬⎘る
⏯␯␍⏠␧⎬ખ⎚⏌ 
⏯⍬␅⏓౜ઐ⎚⏌
最適化の種類 
§ ␝⏹⏿␅څ⎴ࡥ⎘⎯⏠␯␥⏠␯ш 
§ ੺λ␃⏟⏵␍⏿⏽ 
§ ֩૳ೱഇߧ⎯ݪ࢑ 
§ ␧⍬␓わ⏞␯␩⍬␦␯⏬ 
§ ౮Ξ⏽⏣⏿⏫ݪ࢑ 
§ ␃⏿␅⏯⍬␅⎯ݪ࢑ 
§ ␃⍬⏻わ␑␩⍬ѽॾ
ຶア 
␝⏹⏿␅⎯⏠␯␥⏠␯ш
څ⎴ࡥ⎘⎧⎅⏌ 
␝⏹⏿␅⎯ඕਹ⏓ 
څ⎴ࡥ⎘ٴ⎬ 
⏯␐⍬⎚⏌
⏠␝⍬⏴⎘⏅⎚⎅
⎔⏍⎬⏉⎤⎧ 
ъ⎍⏉⎅⎯⎌をを
ࢡ⎖⎫ࡽ๲⎯ࣟ܄る 
␝⏹⏿␅⏓څ⎴ࡥ⎚ 
⏯⏵␄⎯൘⎍ 
ۿ⎐⎫⏌
␃␑⏥␧␄⎨⎰ 
␌⏠␄රභ⎯ 
␌⏠␄⏯⍬␅⏓ԥ⏁ 
␝⏹⏿␅⎍਻࣐⎩⎫⏌ 
ǩॴଯ⎫␧⍬␧
⎠⎡るஓଯ⎫␙␦⏳⍬⏃ 
⎃⏌⎯⎨る 
਻࣐⎰ 
⏞␓␦⏭⍬⏳␣␯⎕⎩⎬ 
ബш⎚⏌
ຶア 
੺λ␃⏟⏵␍⏿⏽
␙␦␞⍬␑⏟⏿⏫⎫ 
␝⏹⏿␅څ⎴ࡥ⎘⎬⎋⎅⎧る 
ދࢻ⎚⏌ؠ⎍ബ⏐⏊⎫⎅ 
⎩২଑⎘る
щ২␝⏹⏿␅٠ݲ⏓ 
⏵␧⍬⎚⏌ 
ァ⏦⍬␌⍬␥⏠␅⎍ 
ޡๆ⎖⏍⏌⎌⏓ 
⏽⏣⏿⏫⎘⎫⎅ア
੯݂଱ш
੺λ␃⏟⏵␍⏿⏽⎯২଑⎩ 
β⎇ؠ⎯⏠␯⏵⏻␯⏵ 
⎨⎃⎤⎠ࣟ܄⎫⎪
⏯␯␍⏠␧⎘⎠⏯⍬␅⏓ 
෌ڹ⎬⎘⎧ 
⏠␯⏻␓␦⏻⎬෸⏌ 
ァ⎿⎠⎰݁⏯␯␍⏠␧⎚⏌ア
⎥⎿⏋
⎥⎯␝⏹⏿␅⎬਻⎘⎧ 
੯݂଱ш⎩ 
݁⏯␯␍⏠␧⎍ 
،⏋റ⎖⏍⏌⎔⎩⏃ 
⏉⎐⎃⏌⎔⎩
⏯␯␍⏠␧わ␞⍬␅
λ୞⎰ෳ⎬⎘⎠ 
FOLHQW 
VHUYHU 
⏦␓⏳␣␯
FOLHQWゐ 
⏯␯␍⏠␧ࡽ๲⎰ਙ⎅ 
१ढ़⎖⏍⏌⏯⍬␅⎰ಅҼଯઢ⎅ 
VHUYHUゐ 
⏯␯␍⏠␧ࡽ๲⎰ઢ⎅ 
१ढ़⎖⏍⏌⏯⍬␅⎰ਙ⎅
FOLHQWゐ 
§ ステップ1(インタプリタ) 
§ 実行しながらホットなメソッドを検出する 
§ ステップ2(ネイティブ) 
§ ホットと判断したメソッドをJITコンパイル 
し、実行する
VHUYHUゐ 
§ ステップ1(インタプリタ) 
§ 実行しながらプロファイリングする 
§ ステップ2(ネイティブ) 
§ ホットと判断したメソッドをステップ1で取 
得したプロファイリングデータを使ってJIT 
コンパイルし、実行する 
§ プロファイリングデータを取得するため 
にインタプリタのフェーズが長い
-90⏤␯⏴␇⏞ 
⎠⏌⏃⎯ 
⎔⏍⏓ޡ⎅ഇ⎒⎮⎱ 
⎫⏊⏔ん
⎞⏔⎫ߗ੐⏃ 
⎃⏋⎿⎘⎠Ƨ
⏃⎇⎔⏔⎫ 
⏦␓⏳␣␯ 
ޡ⎅⎿⎜⏔
ܞ⎰ 
ߢஓଯ⎬ 
ຑ൘⎩⏃ޡ⎤⎧⎅⎿⎚
ҕ৥ؠ⏯␯␍⏠␧ 
-'.⎨஖௡ァ⏦␓⏳␣␯ǩ⎨ޱ଑⎍಩์ア 
-'.X⎿⎨␌⏿⏫␙⍬␄ 
-'.⎨⎰␃␑⏥␧␄⎨ยڹ 
! 
ǩ;;7LHUHGRPSLODWLRQ
અଯ⎬ٿ⎇⎩る
Քஓߗ⎬⎰ 
⏓ਪ⎐ޡ⎅る 
ਙ⎐Քஓ⎚⏌
।࣢⎬ஓݩ⎚⏌⏉⎇⎬ 
⎫⏍⎱⏓␝⏠␯⎬ޡ⎅る 
␍␑⏥⍬␚␯⏵⏓ۿ⏂⏌
⏃⎇ࢢ⎘ 
࣏⎘⎐٪⏌⎩る
⏠␯⏻␓␦⏻⎨⎰⎫⎐ 
⎯ઓҕ⎨ 
␓␩␑⏝⏠␦␯⏬⎚⏌ 
⏉⎇⎬⎚⏌
⏯␯␍⏠␧␨␕␧ 
§ level 0:インタプリタ 
§ level 1:C1 フル最適化 
§ プロファイリングなし 
§ level 2:C1 呼び出しとループのプロファ 
イリング 
§ level 3:C1 フルプロファイリング 
§ level 4:C2
⏯␯␍⏠␧⎯ 
ࡽ๲൘൚
⎍⎞⏍⎟⏍ 
⏩␡⍬⏓ߖ⎥
⎍⎞⏍⎟⏍ 
⏩␡⍬⏓ߖ⎥
⏩␡⍬⎯ૠ⎖⎬Ы⎙⎧ 
᪭ખ⎫⎪⏓ 
૛य़⎚⏌
⏯⍬␅⏩␟⏿⏳␡௅⎬ 
⏯␯␍⏠␧ڤ⎯ 
⏯⍬␅⎍జટ⎖⏍⏌⎩る
⏠␯⏻␓␦⏻わ␞⍬␅⎌⏊ 
⏯␯␍⏠␧⎖⏍⎠⏯⍬␅⏓ 
ޡๆ⎚⏌␞⍬␅⎬ 
উ⏋੃⎉⏌
⎔⏍⎰る␙⏠␯⏻ࢆ⎎Ԁ⎉ 
SRLQWHUVZL]]LQJ
⎩څ⎱⏍⏌ 
⎔⎩⏃⎃⏌
⏯␯␍⏠␧␨␕␧⎯সΫ 
§ level 0 - 3 - 4(理想的) 
§ 0 - 2 - 3 - 4(C2のキューが長いとき) 
§ 0 - 3 - 1(C2コンパイルができないメ 
ソッドのとき)?? 
§ 0 - 4(C1でコンパイルできない、インタ 
プリタでプロファイリングしてC2する)
໓ਞ݁⏯␯␍⏠␧
λ୞⏯␯␍⏠␧⎘⎠⎃⎩⏃ 
␓␩␑⏝⏠␦␯⏬⏓ 
ਞ⎒⏌
⎖⏊⎫⏌݂଱ш⎯ 
я௾ड़⎍⎃⏍⎱る 
⏯⍬␅⏓݁⏯␯␍⏠␧ 
⎚⏌
2Q6WDFN 
UHSODFHPHQW 
ァ265ア
␧⍬␓⎯ય⎨ 
ஔλ⎯␝⏹⏿␅⏓ 
څ⎴ࡥ⎘⎧⎅⏌ 
⏉⎇⎫ࣟ܄
␧⍬␓⎯݂ય⎬ 
⏠␯⏻␓␦⏻⎌⏊ 
⏯␯␍⏠␧⎘⎠⏯⍬␅⏓ 
ޡ⎇⏉⎇⎬ 
উ⏋੃⎉⏌
-,7⏯␯␍⏠␧⎯ 
ҷ௨൘൚
;;3ULQWRPSLODWLRQ ! 
75 1 3 java.lang.Math::min (11 bytes) 
75 3 3 java.lang.String::charAt (29 bytes) 
76 2 3 java.lang.AbstractStringBuilder::ensureCapacityInternal (16 bytes) 
76 4 n 0 java.lang.System::arraycopy (native) (static) 
77 5 3 java.lang.Object::init (1 bytes) 
77 6 3 java.lang.String::hashCode (55 bytes) 
77 7 3 java.lang.String::indexOf (70 bytes) 
78 8 3 java.lang.String::length (6 bytes) 
78 9 3 java.lang.AbstractStringBuilder::append (50 bytes) 
78 10 3 java.lang.String::getChars (62 bytes) 
78 11 3 java.lang.String::equals (81 bytes)
⏯␯␍⏠␧⎖⏍⎠ 
␝⏹⏿␅⎩ 
ߗԝる⏯␯␍⏠␧␨␕␧⎍ 
⏐⎌⏌
;;3ULQW7LHUHG(YHQWV ! 
0.047899: [call level=0 [java.lang.Object.init()V] @-1 queues=0,0 rate=n/a k=1.00,1.00 total=128,0 
mdo=0(0),0(0) max levels=0,0 compilable=c1,c1-osr,c2,c2-osr status=idle] 
0.048180: [loop level=0 [sun.nio.cs.UTF_8$Decoder.decode([BII[C)I] @20 queues=0,0 rate=n/a k=1.00,1.00 
total=29,1024 mdo=0(0),0(0) max levels=0,0 compilable=c1,c1-osr,c2,c2-osr status=idle] 
0.048348: [loop level=0 [sun.nio.cs.UTF_8$Decoder.decode([BII[C)I] @20 queues=0,0 rate=n/a k=1.00,1.00 
total=45,2048 mdo=0(0),0(0) max levels=0,0 compilable=c1,c1-osr,c2,c2-osr status=idle] 
0.048414: [loop level=0 [java.lang.String.hashCode()I] @24 queues=0,0 rate=n/a k=1.00,1.00 total=73,1024 
mdo=0(0),0(0) max levels=0,0 compilable=c1,c1-osr,c2,c2-osr status=idle] 
0.049419: [call level=0 [java.lang.String.hashCode()I] @-1 queues=0,0 rate=n/a k=1.00,1.00 total=128,1302 
mdo=0(0),0(0) max levels=0,0 compilable=c1,c1-osr,c2,c2-osr status=idle] 
0.049514: [call level=0 [java.lang.Object.init()V] @-1 queues=0,0 rate=n/a k=1.00,1.00 total=256,0 
mdo=0(0),0(0) max levels=0,0 compilable=c1,c1-osr,c2,c2-osr status=idle] 
0.049557: [compile level=3 [java.lang.Object.init()V] @-1 queues=0,0 rate=n/a k=1.00,1.00] !
⏉⏋࣏ݔ⎬ 
٪⏍⏌
⎖⏊⎬࣏ݔ⎬ 
٪⏌⎬⎰
;;/RJRPSLODWLRQ 
! 
;0/␑⏥⍬␚⏿␄⎨ࡥ⏌ 
;;8QORFN'LDJQRVWLF902SWLRQV 
⏓ஔߗ⎬঎଑⎚⏌಩์⎃⏋ !
KRWVSRWBSLGORJ ! 
nmethod compile_id='2' compiler='C2' entry='0x000000010508d220' size='1504' address='0x000000010508d0d0' 
relocation_offset='296' insts_offset='336' stub_offset='688' scopes_data_offset='736' 
scopes_pcs_offset='864' dependencies_offset='1456' handler_table_offset='1464' nul_chk_table_offset='1488' 
method='java/lang/String indexOf (II)I' bytes='70' count='366' backedge_count='6418' iicount='366' 
stamp='0.122'/ !
⏃⎇஬⏂⎿⎜⏔Ƨ
␀⍬␧⏓ޡ⎋⎇ん
-,7:DWFK 
KWWSVJLWKXEFRP$GRSW2SHQ-'.MLWZDWFK
⏷⏿␄⏞⏿␓⎰ 
FORQH⎘⎧ 
PYQSDFNDJH 
ๆΤ⎖⏍⎧⎅⏌ 
ODXQFK8,VKEDW
⏓߹۱⎚⏌⎡⎒
૝ԑ੺ん
␩⏬⏓ѽॾ⎚⏌⎩⎎⎰
;;7UDFHODVV/RDGLQJ 
⎨⏫␥⏵␩⍬␅ߗ⎯ 
ࣣൎ⏃ࡥ⎚
⎖⏊⎬
+RW6SRW⎯ 
௅ೱ⏦␓⏳␣␯ 
;;3ULQW$VVHPEO 
⏓⎥⎒⏍⎱ 
⏞⏷␯␒␦⎯⏯⍬␅⏓ 
٪⏍⏌

More Related Content

JITコンパイルはじめの一歩