Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

5.839 visualizaciones

Publicado el

2014/10/27 関ジャバ HotSpot meetingで@jyukutyoが発表した「JITコンパイルはじめの一歩」の資料です。

Publicado en: Tecnología

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

  1. 1. -,7⏯␯␍⏠␧ ⎰⎙⏂⎯λഽ #MXNXWRァ⎙⏆⎐⎢⏈ア ݠ୉۝λ 1
  2. 2. ߢډࣅѻ
  3. 3. 阪田 浩一 文学部哲学科卒 3 @jyukutyo 著書 3冊 関西Javaエンジニアの会 (関ジャバ) 発起人・運営 Fight the Future http://jyukutyo.hatenablog.com/ フリュー株式会社 所属 プリ機と連携する 画像SNS「ピクトリンク」 開発・運用に従事. 会員数800万人! ScalaMatsuri スポンサー企業! エンジニア歴11年 35歳 SI業界での客先常駐 9年 Web系? 2年強 塾講師アルバイト
  4. 4. -90ຢ⎢⎌⏊
  5. 5. ⎰ ܞ௟⎯౎಺ࠋ⎯ ય⎨݂ࠜƧ
  6. 6. ⏉⏎⎘⎐⎋Ա⎅⎘⎿⎚
  7. 7. ⎿⎛⎰ ⎋⎖⏊⎅
  8. 8. -,7⏯␯␍⏠␧⎤⎧ъを
  9. 9. ٶව⎫଑զ⎨⎰
  10. 10. -,7␕⍬⏵⎯щ২␚⏳␯⎰ ߹۱ঽ⎬ ু␌⏠␄⏯⍬␅⏓ ␚⏳␯⏯⍬␅⎬ ബԀ⎚⏌ァんア
  11. 11. ⎔⎔⎨⎰ -,7⏯␯␍⏠␧⏓ ߹۱ߗ⎬ ஓଯ⏯␯␍⏠␧⎚⏌ ⎩⎅⎇Τය⎨छ⏂⎿⎚
  12. 12. -XVW,Q7LPH⏯␯␍⏠␧ ! ␝⏹⏿␅⎍څ⎴ࡥ⎖⏍⎠⎩⎎⎬ ␝⏹⏿␅⎯␌⏠␄⏯⍬␅⏓⏯␯␍⏠␧⎘⎧ ␉⏠␂⏟␒⎫␚⏳␯⏯⍬␅⎬ബԀ⎚⏌
  13. 13. ␝␦⏿␄
  14. 14. ⏯␯␍⏠␧݌⏀⎯ ⏯⍬␅⏓څ⎴ࡥ⎚⎯⎨る ߹۱⎍ਙ⎅
  15. 15. ␃␝␦⏿␄
  16. 16. ␝⏹⏿␅⏓⏯␯␍⏠␧⎚⏌ ࡽ๲⎬ ੒⎎⎫⏦⍬␌⍬␔⏿␅⎍ ⎃⏌
  17. 17. ⎔⎯⏯␯␍⏠␧⎯ ⏻⏠␛␯⏬⎨ ݂଱ш⏃߹޵⎚⏌
  18. 18. -90⎨⎰߹۱ߗ⎬ ␓␩␑⏝⏠␦␯⏬⎘る
  19. 19. ⏯␯␍⏠␧⎬ખ⎚⏌ ⏯⍬␅⏓౜ઐ⎚⏌
  20. 20. 最適化の種類 § ␝⏹⏿␅څ⎴ࡥ⎘⎯⏠␯␥⏠␯ш § ੺λ␃⏟⏵␍⏿⏽ § ֩૳ೱഇߧ⎯ݪ࢑ § ␧⍬␓わ⏞␯␩⍬␦␯⏬ § ౮Ξ⏽⏣⏿⏫ݪ࢑ § ␃⏿␅⏯⍬␅⎯ݪ࢑ § ␃⍬⏻わ␑␩⍬ѽॾ
  21. 21. ຶア ␝⏹⏿␅⎯⏠␯␥⏠␯ш
  22. 22. څ⎴ࡥ⎘⎧⎅⏌ ␝⏹⏿␅⎯ඕਹ⏓ څ⎴ࡥ⎘ٴ⎬ ⏯␐⍬⎚⏌
  23. 23. ⏠␝⍬⏴⎘⏅⎚⎅
  24. 24. ⎔⏍⎬⏉⎤⎧ ъ⎍⏉⎅⎯⎌をを
  25. 25. ࢡ⎖⎫ࡽ๲⎯ࣟ܄る ␝⏹⏿␅⏓څ⎴ࡥ⎚ ⏯⏵␄⎯൘⎍ ۿ⎐⎫⏌
  26. 26. ␃␑⏥␧␄⎨⎰ ␌⏠␄රභ⎯ ␌⏠␄⏯⍬␅⏓ԥ⏁ ␝⏹⏿␅⎍਻࣐⎩⎫⏌ ǩॴଯ⎫␧⍬␧
  27. 27. ⎠⎡るஓଯ⎫␙␦⏳⍬⏃ ⎃⏌⎯⎨る ਻࣐⎰ ⏞␓␦⏭⍬⏳␣␯⎕⎩⎬ ബш⎚⏌
  28. 28. ຶア ੺λ␃⏟⏵␍⏿⏽
  29. 29. ␙␦␞⍬␑⏟⏿⏫⎫ ␝⏹⏿␅څ⎴ࡥ⎘⎬⎋⎅⎧る ދࢻ⎚⏌ؠ⎍ബ⏐⏊⎫⎅ ⎩২଑⎘る
  30. 30. щ২␝⏹⏿␅٠ݲ⏓ ⏵␧⍬⎚⏌ ァ⏦⍬␌⍬␥⏠␅⎍ ޡๆ⎖⏍⏌⎌⏓ ⏽⏣⏿⏫⎘⎫⎅ア
  31. 31. ੯݂଱ш
  32. 32. ੺λ␃⏟⏵␍⏿⏽⎯২଑⎩ β⎇ؠ⎯⏠␯⏵⏻␯⏵ ⎨⎃⎤⎠ࣟ܄⎫⎪
  33. 33. ⏯␯␍⏠␧⎘⎠⏯⍬␅⏓ ෌ڹ⎬⎘⎧ ⏠␯⏻␓␦⏻⎬෸⏌ ァ⎿⎠⎰݁⏯␯␍⏠␧⎚⏌ア
  34. 34. ⎥⎿⏋
  35. 35. ⎥⎯␝⏹⏿␅⎬਻⎘⎧ ੯݂଱ш⎩ ݁⏯␯␍⏠␧⎍ ،⏋റ⎖⏍⏌⎔⎩⏃ ⏉⎐⎃⏌⎔⎩
  36. 36. ⏯␯␍⏠␧わ␞⍬␅
  37. 37. λ୞⎰ෳ⎬⎘⎠ FOLHQW VHUYHU ⏦␓⏳␣␯
  38. 38. FOLHQWゐ ⏯␯␍⏠␧ࡽ๲⎰ਙ⎅ १ढ़⎖⏍⏌⏯⍬␅⎰ಅҼଯઢ⎅ VHUYHUゐ ⏯␯␍⏠␧ࡽ๲⎰ઢ⎅ १ढ़⎖⏍⏌⏯⍬␅⎰ਙ⎅
  39. 39. FOLHQWゐ § ステップ1(インタプリタ) § 実行しながらホットなメソッドを検出する § ステップ2(ネイティブ) § ホットと判断したメソッドをJITコンパイル し、実行する
  40. 40. VHUYHUゐ § ステップ1(インタプリタ) § 実行しながらプロファイリングする § ステップ2(ネイティブ) § ホットと判断したメソッドをステップ1で取 得したプロファイリングデータを使ってJIT コンパイルし、実行する § プロファイリングデータを取得するため にインタプリタのフェーズが長い
  41. 41. -90⏤␯⏴␇⏞ ⎠⏌⏃⎯ ⎔⏍⏓ޡ⎅ഇ⎒⎮⎱ ⎫⏊⏔ん
  42. 42. ⎞⏔⎫ߗ੐⏃ ⎃⏋⎿⎘⎠Ƨ
  43. 43. ⏃⎇⎔⏔⎫ ⏦␓⏳␣␯ ޡ⎅⎿⎜⏔
  44. 44. ܞ⎰ ߢஓଯ⎬ ຑ൘⎩⏃ޡ⎤⎧⎅⎿⎚
  45. 45. ҕ৥ؠ⏯␯␍⏠␧ -'.⎨஖௡ァ⏦␓⏳␣␯ǩ⎨ޱ଑⎍಩์ア -'.X⎿⎨␌⏿⏫␙⍬␄ -'.⎨⎰␃␑⏥␧␄⎨ยڹ ! ǩ;;7LHUHGRPSLODWLRQ
  46. 46. અଯ⎬ٿ⎇⎩る
  47. 47. Քஓߗ⎬⎰ ⏓ਪ⎐ޡ⎅る ਙ⎐Քஓ⎚⏌
  48. 48. ।࣢⎬ஓݩ⎚⏌⏉⎇⎬ ⎫⏍⎱⏓␝⏠␯⎬ޡ⎅る ␍␑⏥⍬␚␯⏵⏓ۿ⏂⏌
  49. 49. ⏃⎇ࢢ⎘ ࣏⎘⎐٪⏌⎩る
  50. 50. ⏠␯⏻␓␦⏻⎨⎰⎫⎐ ⎯ઓҕ⎨ ␓␩␑⏝⏠␦␯⏬⎚⏌ ⏉⎇⎬⎚⏌
  51. 51. ⏯␯␍⏠␧␨␕␧ § level 0:インタプリタ § level 1:C1 フル最適化 § プロファイリングなし § level 2:C1 呼び出しとループのプロファ イリング § level 3:C1 フルプロファイリング § level 4:C2
  52. 52. ⏯␯␍⏠␧⎯ ࡽ๲൘൚
  53. 53. ⎍⎞⏍⎟⏍ ⏩␡⍬⏓ߖ⎥
  54. 54. ⎍⎞⏍⎟⏍ ⏩␡⍬⏓ߖ⎥
  55. 55. ⏩␡⍬⎯ૠ⎖⎬Ы⎙⎧ ᪭ખ⎫⎪⏓ ૛य़⎚⏌
  56. 56. ⏯⍬␅⏩␟⏿⏳␡௅⎬ ⏯␯␍⏠␧ڤ⎯ ⏯⍬␅⎍జટ⎖⏍⏌⎩る
  57. 57. ⏠␯⏻␓␦⏻わ␞⍬␅⎌⏊ ⏯␯␍⏠␧⎖⏍⎠⏯⍬␅⏓ ޡๆ⎚⏌␞⍬␅⎬ উ⏋੃⎉⏌
  58. 58. ⎔⏍⎰る␙⏠␯⏻ࢆ⎎Ԁ⎉ SRLQWHUVZL]]LQJ
  59. 59. ⎩څ⎱⏍⏌ ⎔⎩⏃⎃⏌
  60. 60. ⏯␯␍⏠␧␨␕␧⎯সΫ § level 0 - 3 - 4(理想的) § 0 - 2 - 3 - 4(C2のキューが長いとき) § 0 - 3 - 1(C2コンパイルができないメ ソッドのとき)?? § 0 - 4(C1でコンパイルできない、インタ プリタでプロファイリングしてC2する)
  61. 61. ໓ਞ݁⏯␯␍⏠␧
  62. 62. λ୞⏯␯␍⏠␧⎘⎠⎃⎩⏃ ␓␩␑⏝⏠␦␯⏬⏓ ਞ⎒⏌
  63. 63. ⎖⏊⎫⏌݂଱ш⎯ я௾ड़⎍⎃⏍⎱る ⏯⍬␅⏓݁⏯␯␍⏠␧ ⎚⏌
  64. 64. 2Q6WDFN UHSODFHPHQW ァ265ア
  65. 65. ␧⍬␓⎯ય⎨ ஔλ⎯␝⏹⏿␅⏓ څ⎴ࡥ⎘⎧⎅⏌ ⏉⎇⎫ࣟ܄
  66. 66. ␧⍬␓⎯݂ય⎬ ⏠␯⏻␓␦⏻⎌⏊ ⏯␯␍⏠␧⎘⎠⏯⍬␅⏓ ޡ⎇⏉⎇⎬ উ⏋੃⎉⏌
  67. 67. -,7⏯␯␍⏠␧⎯ ҷ௨൘൚
  68. 68. ;;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)
  69. 69. ⏯␯␍⏠␧⎖⏍⎠ ␝⏹⏿␅⎩ ߗԝる⏯␯␍⏠␧␨␕␧⎍ ⏐⎌⏌
  70. 70. ;;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] !
  71. 71. ⏉⏋࣏ݔ⎬ ٪⏍⏌
  72. 72. ⎖⏊⎬࣏ݔ⎬ ٪⏌⎬⎰
  73. 73. ;;/RJRPSLODWLRQ ! ;0/␑⏥⍬␚⏿␄⎨ࡥ⏌ ;;8QORFN'LDJQRVWLF902SWLRQV ⏓ஔߗ⎬঎଑⎚⏌಩์⎃⏋ !
  74. 74. 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'/ !
  75. 75. ⏃⎇஬⏂⎿⎜⏔Ƨ
  76. 76. ␀⍬␧⏓ޡ⎋⎇ん
  77. 77. -,7:DWFK KWWSVJLWKXEFRP$GRSW2SHQ-'.MLWZDWFK
  78. 78. ⏷⏿␄⏞⏿␓⎰ FORQH⎘⎧ PYQSDFNDJH ๆΤ⎖⏍⎧⎅⏌ ODXQFK8,VKEDW
  79. 79. ⏓߹۱⎚⏌⎡⎒
  80. 80. ૝ԑ੺ん
  81. 81. ␩⏬⏓ѽॾ⎚⏌⎩⎎⎰
  82. 82. ;;7UDFHODVV/RDGLQJ ⎨⏫␥⏵␩⍬␅ߗ⎯ ࣣൎ⏃ࡥ⎚
  83. 83. ⎖⏊⎬
  84. 84. +RW6SRW⎯ ௅ೱ⏦␓⏳␣␯ ;;3ULQW$VVHPEO ⏓⎥⎒⏍⎱ ⏞⏷␯␒␦⎯⏯⍬␅⏓ ٪⏍⏌
  85. 85. ǩ+RW6SRWGLVDVVHPEOHHU ァ+6',6ア ⎍ധ୘಩์ KWWSVNHQDLFRPSURMHFWVEDVHKVGLV -'.⎫⏊␑⏝⏠␧⏓-$9$B+20(MUHOLEVHUYHU⎹ ⏯␐⍬⎚⏌
  86. 86. ␃␞
  87. 87. ⎕॥૗ ⎃⏋⎍⎩⎇ ⎕⎗⎅⎿⎘⎠ん

×