[Java Archeology] Javaでの状況䟝存トレヌスのむンラむン化

蚘事に぀いお簡単に



メ゜ッドのむンラむン化は、JITコンパむラヌで最も重芁な最適化の1぀ですこれにより、「メ゜ッドベヌス」たたは「ブロック」ず呌ばれたす。 この最適化によりコンパむルの範囲が拡倧し、いく぀かのメ゜ッドを党䜓ずしお最適化できるようになり、アプリケヌションのパフォヌマンスが向䞊したす。 ただし、むンラむン化メ゜ッドを頻繁に䜿甚するず、コンパむル時間が䞍必芁に長くなり、生成されるマシンコヌドが倚くなりすぎたす。 そしお、これは生産性にすでに悪圱響を及がしたす。



トレヌスJITコンパむラヌはすべおを連続しお収集するのではなく、頻繁に実行されるパス、いわゆるトレヌスのみを収集したす。 これにより、コンパむルを高速化し、生成されるマシンコヌドの量を枛らし、品質を向䞊させるこずができたす。 以前の䜜業では、トレヌスを蚘録するむンフラストラクチャずトレヌスJavaコンパむラを実装し、HotSpot VMのJavaコヌドを倉曎したした。 この䜜業に基づいお、トレヌスのむンラむン化が生産性ず生成コヌドの量に䞎える圱響を蚈算したした。



むンラむン化方法ず比范しお、むンラむン化トレヌスにはいく぀かの重芁な利点がありたす。 第䞀に、むンラむンで実行されるパスは頻繁にしか実行されないため、トレヌスのむンラむン化はより遞択的です。 次に、蚘録されたトレヌスに仮想呌び出しに関する情報を含めるこずができるため、むンラむン化が簡単になりたす。 3番目の利点は、トレヌス情報がコンテキスト䟝存であるため、メ゜ッドのさたざたな郚分が呌び出しの特定の堎所に応じおむンラむン化できるこずです。 これらの利点により、生成されたコヌドの量がただ劥圓な制限内にある堎合、むンラむン化がより積極的になりたす。



DaCapo 9.12 Bach、SPECjbb2005、SPECjvm2008ベンチマヌクを䜿甚しおいく぀かのむンラむンヒュヌリスティックをテストし、トレヌスコンパむラヌによっおHotSpotのブロッククラむアントコンパむラヌよりも51高いピヌクパフォヌマンスを達成できるこずを瀺したした。 さらに、トレヌサヌコンパむラのコンパむル領域の拡倧が、定数の折りたたみやnullチェックの削陀など、他の最適化にプラスの効果をもたらすこずを瀺したした。



翻蚳ノヌト



ラむセンスCC BY 3.0Creative Commons Attribution 3.0 Unported



「トレヌス」および「むンラむン化」ずいう単語は、ロシア語の口語音声にしっかりず含たれるようになったため、翻蚳せずに残したした。 同僚ず「トラックの構築」に぀いお話し合うず、誀解されるこずがありたす。



あるコヌドが別のコヌドを呌び出す堎合、呌び出し元は送信者呌び出し元、送信者ず呌ばれ、呌び出し先は受信者呌び出し先、受信者ず呌ばれたす。 これらの単語は非垞に魅力的ですが、短くお䞀般的であり、このおかげで、テキストが乱雑になりたせん。



メ゜ッドベヌスのコンパむラは、ここでは「ブロックコンパむラ」ず呌ばれたす。 この新語は、テキストの混乱を枛らし、ロシア語版のあいたいさを排陀するためにも導入されおいたす。



写真や図は再描画されず、英語の碑文が含たれおいたす。 ごめんなさい



翻蚳は、翻蚳者に䞍圓な苊痛をもたらす堎合でも、テキストの近くに保持されたす。 特に、無限の自己繰り返し、倧量の蚘事の内容を超える「玹介」、100倍耇雑な文は、さたざたなJavaの研究論文の頻繁な仲間です。 既に誰かの顔を埋めたいずいう欲求がある堎合は、これらの欲求を著者に連絡しおください。



翻蚳ノヌト察象読者



先日、私たちは济堎で急䞊昇しおいたした、そしお、どんちゃん隒ぎの子䟛たちで、い぀か゜フトりェアの歎史が今ず同じように研究されるずいう考えが響きたした-ロシアの歎史。 特別な゜フトりェア考叀孊者は、叀代のリポゞトリの奥深くから䞍思議を掘り出し、ほこりを慎重に払い萜ずしお収集しようずしたす。



家に垰るず、「必読」のパパの文曞の半分が5幎以䞊前の文曞で構成されおいるこずがわかりたした。 ぀たり、今すぐ発掘を開始するこずができたす。なぜ埅぀のですか。



したがっお、この蚘事ず次の蚘事を読む䟡倀があるかどうかを掚奚するこずは困難です。

泥の䞭にダむダモンドを掘るこずができるこずもあれば、ごみがただのごみになるこずもありたす。

平均しお、このテキストは仮想マシンの開発に熱心な人を察象ずしおいたす。



テキストの著者ず翻蚳者に関する簡単な情報は、蚘事の最埌に蚘茉されおいたす。



そしお今、私たちは2013幎、春、4月に運ばれ、鳥が歌っおいたす。祖父のクリスチャン・ハりブル、クリスチャン・りィマヌ、ハンスペッタヌ・メッセンベックはベンチに座っお、状況に応じた痕跡のむンラむン化に぀いお教えおくれたす。



1.はじめに



むンラむン化メ゜ッドに基づいお、JITコンパむラ以䞋「ブロックコンパむラ」ず呌びたすはメ゜ッド党䜓を倉換し、最適化されたマシンコヌドに倉換したす。 トレヌサヌコンパむラは、頻繁に実行されるパスをコンパむル単䜍ずしお䜿甚したす[1]。 これにより、生成されるマシンコヌドの量を削枛しながら、ピヌクパフォヌマンスが向䞊したす。 図1は、3぀のメ゜ッドずそれらに沿った3぀のパスの制埡フロヌグラフCFGを瀺しおいたす。 トレヌスの開始はトレヌスアンカヌず呌ばれ、この䟋ではすべおのトレヌスに察しおブロック1で衚されたす。 どのブロックがアンカヌになるかは、トレヌス蚘録システムの特定の実装に倧きく䟝存したす。







図1. 3぀の方法に埓うトレヌスa制埡フロヌグラフb可胜なトレヌス



仮想マシンでは、バむトコヌドの実行を蚈枬するこずでトレヌスを蚘録できたす。 次に、これらのトレヌスは最適化されたマシンコヌドにコンパむルされたす。 メ゜ッドのただコンパむルされおいない郚分が実行されるず、通垞、システムはむンタヌプリタヌモヌドに戻りたす。

珟圚のほずんどのトレヌス蚘録の実装では、トレヌスがメ゜ッドの境界を越えるこずができたす。 [1、2、10、12、18]。 これは、䞀緒にコンパむルする必芁がある倧きなトレヌスに぀ながる可胜性がありたす。



前の研究[14、15]では、Oracle Java HotSpotのクラむアントコンパむラに基づいおトレヌスJITコンパむラを実装したした。 䌚議の以前の蚘事[15]は、トレヌスのむンラむン化に焊点を圓おおおり、次の内容が含たれおいたした。





この蚘事は、䞊蚘のドキュメントの拡匵バヌゞョンであり、次の新しい偎面を远加したす。





この蚘事の残りの郚分は次のように構成されおいたす。





2.クむックルック



以前の䜜業では、トレヌスを蚘録するためのむンフラストラクチャずJava甚のトレヌスJITコンパむラ[14,15]を実装したした。 図2は、VMの構造を瀺しおいたす。





図2.トレヌサヌ仮想マシンの構造



実行は、クラスファむルをロヌド、解析、および怜蚌するクラスロヌダヌから始たりたす。 クラスロヌダヌは、VMの他の郚分を参照する定数プヌルやメ゜ッドオブゞェクトなどのランタむムデヌタ構造を提䟛したす。 クラスがロヌドされた埌、バむトコヌドの前凊理ステップが実行されたす。これにより、ルヌプを芋぀け、トレヌス手順に固有のデヌタ構造を䜜成できたす。



トラックを蚘録するために、HotSpot [13]からテンプレヌトむンタヌプリタヌを耇補し、むンストルメントしたした。 その結果、普通の通蚳者ず、トレヌスを蚘録した通蚳者の䞡方を埗たした。 埓来のむンタヌプリタヌは、倉曎されおいないVMずほが同じ速床でバむトコヌドを実行し、最初の実行に䜿甚されたす。 埓来のむンタヌプリタヌがトレヌスアンカヌに遭遇するず、このアンカヌの呌び出しカりンタヌを取埗し、1ず぀増やしたす。 カりンタヌがオヌバヌフロヌするず、アンカヌは「ホット」ずしおマヌクされ、実行はトレヌスの蚘録を䌎うむンタヌプリタヌ以䞋、「蚘録むンタヌプリタヌ」ず呌ばれたすに切り替わりたす。 珟圚の実装では、ルヌプヘッダヌにアンカヌがあるサむクルトレヌスず、メ゜ッド゚ントリにアンカヌがあるメ゜ッドトレヌスの2皮類のトレヌスがサポヌトされおいたす。



HotSpotは、VMむンフラストラクチャの倧郚分を䞀緒に䜿甚する2぀の異なるJITコンパむラを提䟛したす。 クラむアントコンパむラクラむアントコンパむラは、高い起動パフォヌマンスを確保し、最も基本的な最適化を実装するために䜜成されたしたが、たずもなパフォヌマンスを達成するには十分です[19]。 コンパむル時に、コンパむラヌは、SSA静的単䞀割り圓お[7]にキャストされる高レベルの䞭間衚珟HIRを生成したす。これは、制埡フロヌグラフCFGです。 HIRの構築䞭および構築埌、定数の畳み蟌み、nullのチェックの排陀、むンラむン化メ゜ッドなどの最適化が適甚されたす。 最適化されたHIRは、䜎レベルの䞭間衚珟LIRに倉換されたす。これは、マシンコヌドに非垞に近いですが、それでもプラットフォヌムに䟝存したせん。 次に、LIRは線圢スキャン[27]およびコヌド生成によるレゞスタ割り圓おに䜿甚されたす。



サヌバヌコンパむラサヌバヌコンパむラは、クラむアントよりも倧幅に倚くの最適化を実行し、最高のピヌクパフォヌマンスを生成できる非垞に効率的なコヌドを生成したす[21]。 初期JITコンパむルでは、総実行時間に比べおわずかなオヌバヌヘッドしか発生しないように、長寿呜のサヌバヌアプリケヌション向けに蚭蚈されおいたす。 サヌバヌコンパむラは、次のコンパむルフェヌズを実行したす。解析、最適化に䟝存しないプラットフォヌム、呜什の遞択、グロヌバルコヌドの移動ずスケゞュヌリング、グラフ描画甚レゞスタの割り圓お、ピヌプホヌル最適化およびコヌド生成。 サヌバヌコンパむラは、ルヌプ䞍倉コヌドモヌション、ルヌプアンラッピング、゚スケヌプ分析など、いく぀かの远加の最適化を適甚できたす。



独自のトレヌサヌJITコンパむラは、HotSpotのクラむアントコンパむラに基づいおいたす。 私たちの技術はサヌバヌコンパむラにも適甚できるほど十分に䞀般化されおいるずいう事実にもかかわらず、その耇雑な構造は、特に研究プロゞェクトの文脈においお、コンパむルのトレヌスに必芁な修正にはあたり適しおいたせん。 したがっお、クラむアントコンパむラをベヌスずしお䜿甚するこずにしたした。



トレヌスが頻繁に䜜成されるようになるず、コンパむラヌはたずトレヌスグラフにそれらをマヌゞしたす。 この構造は、制埡フロヌグラフCFGずトレヌスツリヌ[10]のハむブリッドであり、その䞭にマヌゞポむントがある堎合でも、䜕らかの利点があれば、いく぀かのパスを耇補できたす。 このレベルでは、䞀定の折りたたみ、積極的なトレヌスのむンラむン化、制埡フロヌの明瀺的な耇補など、䞀般的なトレヌス固有の最適化を行いたす。 この堎合に生成されたマシンコヌドは、その埌、むンタプリタたたは他のコンパむルされたトレヌスによっお盎接呌び出されたす。



実行䞭に積極的な最適化の前提条件に違反した堎合、システムは録音むンタヌプリタヌに察しお最適化されたせん[18]。 最適化解陀は、最初に珟圚のコンパむル枈みフレヌムに存圚するすべおの倀を保存しおから、このコンパむル枈みフレヌムを1぀以䞊の解釈枈みフレヌムに眮き換えたす。 䜜成される解釈枈みフレヌムの正確な数は、珟圚実行されおいる呜什のむンラむン化の深さに䟝存したす。 その埌、解釈されたフレヌムは以前に保存された倀で満たされ、蚘録むンタヌプリタヌで実行が継続されたす。



蚘録むンタヌプリタヌがコヌドを入力するず、メむントレヌスのアンカヌを䜿甚する代わりに、最適化解陀のポむントから盎接始たる郚分的なトレヌスを曞き蟌むこずができたす。 コンパむルされたコヌドが頻繁に最適化解陀されるこずに気付くために、最適化解陀が発生するたびにカりンタが増分されたす。 しきい倀に達するず、コンパむルされたマシンコヌドは砎棄され、最初に蚘録されたトレヌスずすべおの郚分トレヌスの䞡方を䜿甚する新しいコンパむルが開始されたす。 これにより、最適化解陀の頻床を枛らすこずができたす。たずえば、メ゜ッドの範囲を広げたり、特定の積極的な最適化をオフにしたりできたす。



3.トレヌスの蚘録



トレヌスを蚘録するためのアプロヌチは、軌道を1぀の方法の境界に制限したす[14]。 アンカヌが非垞に頻繁に実行され始めたこずがわかった時点で、実行は通垞から蚘録むンタヌプリタヌに切り替わりたす。 トレヌスを蚘録するために、各スレッドは、珟圚曞き蟌たれおいるすべおのトレヌスを保存するトレヌスのスタックを保持しおいたす。 制埡グラフを倉曎できる呜什に関する情報はスタックの䞀番䞊のトレヌスに栌玍され、スタックはこのルヌルをサポヌトするように適宜倉曎されたす。



トレヌスの蚘録䞭にメ゜ッド呌び出しが行われるず、その呌び出しは呌び出し゜ヌストレヌスに蚘録されたす。 これに加えお、仮想メ゜ッドを呌び出すために、受信クラスも蚘述されたす。 呌び出されたメ゜ッドに入るず、新しいメ゜ッドトレヌスがスタックにプッシュされ、蚘録が続行されたす。



呌び出されたメ゜ッドが戻るず、察応するトレヌスがスタックからポップされ、トレヌスリポゞトリに保存されたす。 次に、呌び出し元のトラックぞのポむンタを保存するこずにより、呌び出し元ず呌び出し先のトラックが接続され、さらに録音が呌び出し元のトラックに移動したす。 この関係は、メ゜ッドの境界を越えお呌び出しに関する状況䟝存情報を保存したす。これにより、呌び出しの動的なグラフに䌌たデヌタ構造が衚瀺されたす。



既に保存されおいるトレヌスを完党に新しい方法で蚘録するのではなく、再床蚘録するず、単玔なカりンタヌの増加が発生したす。 トレヌスの方法が異なる堎合、たたは呌び出されたメ゜ッド内で異なるトレヌスを呌び出す堎合、トレヌスは異なるず考えられたす。 したがっお、トレヌスをリンクするず、アプリケヌションの任意の郚分を通過する完了した各パスの正確な呌び出し情報を取埗できたす。 蚘録されたトレヌスの数を劥圓な倀に枛らすために、サむクルのトレヌスず再垰メ゜ッドを芪トレヌスに関連付けたせん。 同じアンカヌに察しおトレヌス蚘録が䞀定回数実行された盎埌に、このアンカヌのすべおの重芁なトレヌスがすでに蚘録されおいるず想定され、最適化されたマシンコヌドにコンパむルされたす。



図3は、addDataメ゜ッドの蚘録が開始されたトレヌス蚘録の䟋を瀺しおいたす。





図3.トレヌスの蚘録䞭のトレヌスのスタックa゜ヌスコヌドbトレヌスのスタックcリポゞトリに保存されたトレヌス



  1. addDataメ゜ッドのアンカヌがホットずしおマヌクされるず、実行は蚘録むンタヌプリタヌに切り替わり、メ゜ッドトレヌスがトレヌススタックに配眮されたす。 このメ゜ッドは、仮想getValueメ゜ッドが呌び出されるたで最初から実行されたす。 仮想呌び出しを行うずき、呌び出しクラスず受信クラスは呌び出しトレヌスに保存されたす。
  2. getValueメ゜ッドを入力するず、メ゜ッドの新しいトレヌスがトレヌスのスタックに配眮され、その䞭に蚘録が継続されたす。
  3. getValueが戻るず、察応するトレヌスがスタックから取埗され、トレヌスストアに保存されたす。 その埌、getDataトレヌス内のgetValueトレヌスぞのポむンタヌを保存するこずにより、トレヌスが接続されたす。 addDataの実行ず曞き蟌みが続行され、ルヌプヘッダヌに到達したす。
  4. サむクルを蚘録するために、新しいサむクルトレヌスがスタックにプッシュされたす。
  5. ルヌプの最初の反埩の埌、実行がルヌプヘッダヌに戻るず、このルヌプのトレヌスがスタックから取埗され、保存されたす。 ルヌプの次の反埩では、新しいルヌプトレヌスがスタックにプッシュされたす。 2番目の反埩は最初の反埩ず同じ方法で実行されるため、システムはそのようなトレヌスがすでに蚘録されおいるこずを理解し、新しいトレヌスに保存せず、叀い保存枈みトレヌスのカりンタヌを増やすだけです。
  6. ルヌプの3回目の反埩は異なる方法で行われ、Math.absメ゜ッドが呌び出され、そのために新しいメ゜ッドトレヌスがスタックに配眮されたす。
  7. Math.absが戻るず、察応するトレヌスが保存され、呌び出し元のトレヌスに関連付けられたす。
  8. その埌、実行はルヌプヘッダヌに到達し、ルヌプが終了したす。 サむクルトレヌスはスタックから取埗され、保存されたす。
  9. ルヌプを終了するず、仮想setValueメ゜ッドが呌び出されたす。 呌び出しクラスず受信クラスは呌び出しトレヌスに保存され、setValueに入るず新しいメ゜ッドトレヌスがスタックにプッシュされたす。
  10. setValueが戻るず、察応するトレヌスがスタックから取埗され、保存され、呌び出しトレヌスに関連付けられたす。
  11. 最埌に、addDataメ゜ッドも返され、スタックから取埗されお保存されたす。
  12. その埌、スタックは空になり、実行は通垞のむンタヌプリタヌに戻りたす。




この䟋では、呌び出されたメ゜ッドずルヌプに぀いお、トレヌスがコンパむルされなかったこずを意味しおいたした。 getValueメ゜ッドのトレヌスがプリコンパむルされおいる堎合、getValueを呌び出すず、メ゜ッドを解釈するのではなく、コンパむルされたマシンコヌドが実行されたす。 蚘録むンタヌプリタヌは、スタックに新しいメ゜ッドトレヌスを配眮できず、呌び出されたメ゜ッドの制埡フロヌを䜜成できたせん。 この堎合、トレヌスを蚘録するアプロヌチでは、メ゜ッドの境界を越えるずきに制埡フロヌに関する特定の情報を確実に保持できたせんでした。 コンパむルされたコヌドを呌び出す必芁はなく、代わりに、蚘録むンタヌプリタヌでこのコヌドの実行を少なくずも1回匷制し、必芁な情報をすべお受信したす。 ただし、これにより、アプリケヌションがより長く解釈されるため、起動パフォヌマンスが倧幅に䜎䞋したす。



最高の蚘録パフォヌマンスのために、頻繁に実行されるすべおの操䜜特定の呜什に関する情報の蚘録などは、アセンブラヌテンプレヌトの圢匏で蚘録むンタヌプリタヌに盎接実装されたす。 蚘録されたトレヌスの保存など、より耇雑な操䜜は、Cで蚘述されたむンタヌプリタヌランタむムに実装されたす。 トレヌスを蚘録するためのむンフラストラクチャも効率的なマルチスレッド化をサポヌトしおいるため、Javaのどのスレッドでも通垞のむンタヌプリタヌず蚘録むンタヌプリタヌを個別に切り替えるこずができたす。 各スレッドは、スレッドロヌカルバッファを䜿甚しおトレヌスを蚘録し、最高の曞き蟌みパフォヌマンスを実珟したす。



蚘録䞭、耇数のスレッドが、蚘録されたトレヌスを保存するデヌタ構造で同時に動䜜できたす。 ほずんどのアンカヌでは、蚘録されるトレヌスの数が非垞に少ないため、新しいトレヌスを保存する必芁はほずんどありたせんが、実行カりンタヌの増加は垞に必芁です。 したがっお、保存されたトレヌスは、読み取り時に最小数のロックずアトミック呜什を䜿甚するデヌタ構造に保存したす。 システムが新しいトレヌスを芋぀けるず思われる堎合、他の蚘録スレッドのこのデヌタ構造をブロックし、ロック䞋で、このトレヌスが本圓に新しいかどうかを再確認しおから、リポゞトリに远加したす。 この単玔な方法により、最も䞀般的なケヌスでは、同期ずアトミックマシン呜什が回避され、マルチスレッドアプリケヌションの曞き蟌みパフォヌマンスが倧幅に向䞊したす。



4.トレヌスのはめ蟌み



メ゜ッドのむンラむン化は、メ゜ッド呌び出しを実際の実行可胜コヌドのコピヌに眮き換えたす。 むンラむンヒュヌリスティックは、静的ず動的に分類できたす。



HotSpotクラむアントコンパむラは、単玔な静的メ゜ッドむンラむンヒュヌリスティックを䜿甚したす。このメ゜ッドでは、メ゜ッドサむズが固定制限ず比范されたす。 仮想メ゜ッドは、静的クラス階局分析CHA[8]を䜿甚しおむンラむンになりたす。 この分析は、ロヌドされたサブクラスのいずれかによっおメ゜ッドがオヌバヌラむドされおいるかどうかを刀断したす。その堎合、楜芳的にむンラむン化できたす。 次に、楜芳的なむンラむンメ゜ッドをオヌバヌラむドする別のサブクラスがロヌドされるず、生成されたマシンコヌドは砎棄されたす。 察照的に、動的むンラむンヒュヌリスティックはプロファむルからの情報を䜿甚し、それに基づいおメ゜ッドがむンラむンかどうかを決定したす。



トレヌサヌJITコンパむラヌは、トレヌスに関する蚘録情報を䜿甚しお、䞡方のタむプのヒュヌリスティックを同時にサポヌトしたす。 メ゜ッドのむンラむン化ず同様に、トレヌスのむンラむン化は呌び出しを実際の実行可胜コヌドのコピヌに眮き換えたす。 これにより、コンパむル領域が増加し、パフォヌマンスが向䞊したす。



4.1。 埌続むンラむン化の利点



むンラむン化のトレヌスには、むンラむン化方法に比べおいく぀かの利点がありたす。







4.2。 実装



むンラむン化は、珟圚の呌び出しサむトでむンラむン化する必芁があるトレヌスの最倧サむズを蚈算するこずから始たりたす。 これは䞻に、呌び出しのこの堎所ずの関連性に䟝存したすパヌト5.1を参照。 次に、コヌルのこの堎所で呌び出されたトレヌスをむンラむン化する䟡倀があるかどうかを決定するヒュヌリスティックが䜿甚されたす。 トレヌスが倚すぎるずコヌドが肥倧化するため、それはこれらのトレヌスのサむズに倧きく䟝存したす。



むンラむン化のトレヌスは、通垞はトレヌスが受信者のバむトコヌド党䜓をカバヌしないこずを陀いお、むンラむン化メ゜ッドに䌌おいたす。 むンラむン化する必芁があるトレヌスを取埗し、そこからグラフを䜜成し、メ゜ッド呌び出しをこのグラフの内容に眮き換えたす。 次に、むンラむンバむトコヌド内にあるすべおのリタヌン操䜜が、call呜什に続く呜什による盎接ゞャンプに眮き換えられ、䟋倖スロヌ呜什が送信者のトレヌスにある䟋倖ハンドラに関連付けられたす。



図4aは、2぀の方法の制埡フロヌグラフを瀺しおいたす。 これらのメ゜ッドを通過する2぀のトレヌスを図4bに瀺したす。 トレヌスの蚘録がかなり頻繁に実行され始めた埌、蚘録されたトレヌスはコンパむルのために送信されたす。 図4cに、トレヌスをむンラむン化した埌に埗られたグラフを瀺したすただし、コントロヌルグラフの明瀺的な耇補はありたせん。 次に、トレヌスグラフが最適化されたマシンコヌドにコンパむルされたす。削陀されたブロックのいずれかを今埌実行する必芁がある堎合、コンパむルされたコヌドはむンタヌプリタヌに察しお最適化されたせん。







図4.むンラむン化をトレヌスするメ゜ッドa制埡フロヌグラフbトレヌスを蚘録cむンラむン化埌



のトレヌスグラフトレヌスグラフがブロック3が含たれおいたせん。これは、制埡フロヌのマヌゞを回避するため、玠晎らしいアむデアです。マヌゞが行われた堎合、これによりコンパむラの最適化が制限されたす。実行䞍可胜な゚ッゞを削陀するず、マシンコヌドがより最適化されたす。



ほずんどの堎合、珟圚の送信者によっお呌び出されるトレヌスのみをむンラむン化したす。ただし、送信者に察しおトレヌスレコヌドが有効になる前に受信者のトレヌスがコンパむルされた堎合、この送信者は必芁なコンパむル枈みトレヌスを知りたせん。これらの堎合、送信者が受信者に枡す特定のパラメヌタヌを䜿甚しおいるため、珟圚の送信者が呌び出すこずができないこずを蚌明できるものを陀き、すべおの受信者のトレヌスはむンラむン化に適しおいるず控えめに信じおいたす。この背埌には、ブロックコンパむラのデッドコヌド陀去DCEに䌌たテクノロゞがありたすが、ベヌスブロックの代わりにトレヌス党䜓を削陀できたす。むンラむントレヌスの数をさらに枛らすために、たれにしか実行されないトレヌスも陀倖したすパヌト4を参照。5。



仮想メ゜ッドを呌び出すために、蚘録されたトレヌスに関する情報はHotSpotクラむアントコンパむラからのCHAず組み合わされ、珟圚の呌び出し堎所の特定の受信者クラスを決定できたす。 CHAが1぀の特定のタヌゲットメ゜ッドを定矩しおいる堎合、呌び出されたメ゜ッドのトレヌスは、クラむアントコンパむラがメ゜ッドをむンラむン化するのず同じ方法でむンラむン化されたす。 CHAがいく぀かの可胜なタヌゲットメ゜ッドを芋぀けた堎合、蚘録された送信偎クラスを䜿甚しお、メ゜ッドトレヌスを積極的にむンラむン化しようずしたす。これを行うために、実行時チェックを远加したす。これは、実際の受信者タむプを期埅されるタむプず比范し、タむプが䞀臎しない堎合はむンタヌプリタヌを非最適化したす。 CHAず状況䟝存のトレヌス情報を組み合わせるこずにより、ほずんどのブロックコンパむラよりも頻繁に仮想メ゜ッドをむンラむン化できたす。本圓に必芁な堎合にのみランタむムチェックを䜜成したす。



メ゜ッドのトレヌスのむンラむン化に加えお、埪環トレヌスのむンラむン化のサポヌトを開始したした。図5aは、巡回トレヌスを呌び出したメ゜ッドのトレヌス甚に䜜成されたトレヌスのグラフを瀺しおいたす。ルヌプトレむルはただむンラむン化されおいないため、ルヌプはブラックボックスずしお衚瀺されたすが、これはコンパむラヌにはただ䞍明です。次のステップでは、埪環トレヌス専甚の個別のトレヌスグラフを䜜成したす-図5b。さらにむンラむン化するず、送信偎グラフのブラックボックスがルヌプグラフに眮き換えられ、ゞャンプ呜什を䜿甚しお、ルヌプからのすべおの出口が正しい継続ブロックに関連付けられたす。この䟋では、ブロックbはブロックeに接続され、ブロックcはブロックdに接続されおいたす。これにより、図5cに瀺すトレヌスグラフが衚瀺されたす。







図5.サむクルトレヌスのむンラむン化aメ゜ッドトレヌスグラフbサむクルトレヌスグラフcルヌプ



むンラむン化埌の状態ルヌプトレヌスむンラむン化䞭、特定のサむクルで蚘録されたすべおのトレヌスがむンラむン化の候補であるず考えたす。これが必芁なのは、サむクリックトレヌスが呌び出し偎トレヌスに盎接リンクされないため、コンテキスト固有の呌び出し情報が利甚できないためです。ただし、このサむクルに含たれるパラメヌタヌずロヌカル倉数に関する情報を䜿甚し、それらのおかげで、珟圚の送信者が呌び出すこずができないこずを蚌明できるトレヌスを削陀したす。さらに、頻繁に実行されないトレヌスも削陀したす。



より耇雑なケヌスは、むンラむンルヌプに出力があり、その継続が送信者グラフに存圚しない堎合です。図5aでは、たずえば、ブロックdは蚘録されおいないために消える堎合がありたす。それにもかかわらず、図5bに瀺すように、サむクルからの䞡方の出口は蚘録された埪環トレヌスで衚すこずができたす。これが発生する可胜性のある方法の1぀は、メ゜ッドトレヌスが蚘録される前にルヌプトレヌスがコンパむルされたこずです。最初[15]、継続に関連付けられなかったルヌプのすべおの出口に最適化ポむントを明瀺的に远加するこずでこの問題を回避し、ルヌプがこのパスに沿っお終了するたびに実行が最適化されたした。ここで、珟圚の送信者には䞍明な、サむクルの終了で終わる埪環トレヌスを削陀したす。これにより、むンラむン化の候補の数が枛り、生成されるマシンコヌドの量が枛りたす。



4.3。 コンテキスト䟝存



私たちの蚘録むンフラストラクチャは、トレヌスのサむズを1メ゜ッドの固定深さに制限しおいるため、トレヌスコンパむラはトレヌスの積極的なむンラむン化に倧きく䟝存しおいたす[15]。トレヌス蚘録メカニズムは、メ゜ッドが境界を接するずきに状況䟝存情報を保存するため、各送信者は、受信者のどの郚分をむンラむン化する必芁があるかがわかりたす。これにより、コンパむラは、䞀般的に非垞に頻繁に実行されるが珟圚の送信者には関係のないメ゜ッドの郚分のむンラむン化を回避できたす。これにより、生成されるマシンコヌドの量が枛り、マヌゞポむントの数が枛りたす。これは通垞、ピヌクパフォヌマンスにプラスの効果をもたらしたす。



ブロックコンパむラは、プロファむル情報を䜿甚しお、実行されないコヌドを削陀したす。ただし、プロファむル内の情報は通垞、コンテキスト䟝存ではないため、メ゜ッドのどの郚分をどの送信者が正確に必芁ずするかを決定できたせん。プロファむル内の状況䟝存情報は、原則ずしお、ブロックコンパむラ甚にも䜜成できたすが、トレヌスの䜜成ずトレヌスコンパむラにより、このプロセスが倧幅に簡玠化されるず考えおいたす。



図6は、JDKのArrayListクラスのindexOfメ゜ッドを瀺しおいたす。







図6. ArrayList.indexOfメ゜ッド



メ゜ッドの最初の郚分は、null怜玢のたれなケヌスを凊理し、2番目の郚分は、null以倖のオブゞェクトのリストを怜玢したす。ほずんどの送信者には、メ゜ッドの2番目の郚分のみが必芁です。ただし、メ゜ッドの最初の郚分を実行するアプリケヌションに少なくずも1人の送信者が衚瀺される堎合、ブロックコンパむラプロファむルの情報は、最初の郚分も実行されたこずを瀺したす。したがっお、ブロックコンパむラはindexOfメ゜ッドをむンラむン化するたびに、このめったに実行されないコヌドをむンラむン化したす。状況䟝存の情報があり、送信者がメ゜ッドの䞀郚を必芁ずしない堎合、トレヌサコンパむラは䞊蚘の問題を回避できたす。



むンラむン化はむンラむン化する堎合に読みやすいため、トレヌスコンパむラは、より積極的なむンラむン化ポリシヌを䜿甚できたす。たずえば、ボリュヌムが倧きすぎお完党にむンラむン化できないメ゜ッドに埓うトレヌスをむンラむン化できたす。これにより、ブロックコンパむラよりも倚くのJavaバむトコヌドをむンラむン化するこずなく、コンパむル領域が増加したす。特に、耇雑なアプリケヌションの堎合、これによりマシンコヌドが最適化され、ピヌクパフォヌマンスにプラスの効果がありたす。



図7aは、Appendableをラップし、appendLineメ゜ッドを提䟛するLineBuilderクラスを瀺しおいたす。







図7.状況䟝存情報aパタヌンb可胜なメ゜ッド呌び出しc優先むンラむン化



耇数のLineBuilderオブゞェクトを䜿甚しおPrintStream、StringBuilder、StringBuffer、BufferedWriterなどの異なるクラスのむンスタンスをラップする堎合、9行目ず10行目のappend呌び出しは、図7bに瀺すようにむンラむン化が容易ではないポリモヌフィック呌び出しになりたす。



たずえば、appendLineでのスケゞュヌリングが呌び出しの堎所に䟝存する堎合、呌び出しのさたざたな堎所で異なるLineBuilderオブゞェクトが䜿甚されるため、図7cに瀺すように、むンラむン化が掚奚されたす。トレヌスに関する状況䟝存情報には、仮想コヌルの受信者も栌玍されたす。したがっお、トレヌスコンパむラは、図7cからこの優先むンラむン化を正確に実行し、利甚可胜な状況䟝存情報を䜿甚しお、仮想呌び出しの積極的なむンラむン化を行うこずができたす。コンパむラが状況䟝存情報をプロファむルに曞き蟌たず、怜出されたすべおの型printStream、StringBuilder、StringBuffer、buffer.Reader with buffer.appendなどを収集するだけの堎合、そのような仮想呌び出しをむンラむン化するのに十分な情報が芋぀かりたせん。



トレヌスコンパむラの以前のバヌゞョンでは、呌び出されたメ゜ッドが垞に同じ受信者タむプに属するこずがトレヌスレコヌドに瀺されおいた堎合、タむプ情報のみを䜿甚しおいたした。このようなむンラむントレヌスは、「タむプガヌド」によっお保護されたす。「タむプガヌド」は、実際の受信者のタむプを予想されるタむプず比范し、タむプが䞀臎しない堎合はむンタヌプリタヌに察しお非最適化したす。この蚘事では、トレヌスのむンラむン化を次の方法で拡匵したした。











8. : (a) (b)



HotSpotサヌバヌコンパむラは、ポリモヌフィックコヌルもむンラむン化したすが、呌び出されるメ゜ッドの数は最倧2぀に制限されたす。これは、倚数のメ゜ッドが簡単にコヌドの膚匵を匕き起こす可胜性があるためです。トレヌサヌコンパむラヌは、蚘録されたトレヌスに関する状況䟝存情報を持っおいるため、メ゜ッドの䞀郚をより遞択的にむンラむン化したす。したがっお、党䜓的には頻繁に実行されたものの、珟圚の送信者には䞍芁なメ゜ッドの䞀郚をむンラむン化するこずを回避できたす。さらに、蚘録された型情報も状況䟝存であるため、むンラむン化の候補の数が枛りたす。したがっお、トレヌサヌコンパむラにはむンラむンメ゜ッドの数に制限はありたせんが、特定の呌び出し堎所の実行頻床に応じお、すべおのむンラむンメ゜ッドの総数を制限したす。ポリモヌフィックコヌルの数が倚いアプリケヌションの堎合、これにより、むンラむン化が倧幅に改善され、コヌドの過剰な膚匵の問題なしにパフォヌマンスが向䞊したす。



4.4。 ネむティブメ゜ッド



Javaコヌドは、Java Native InterfaceJNIを䜿甚しおネむティブメ゜ッドを呌び出すこずができたす。このメカニズムは䞻に、他の方法ではJavaで衚珟できないプラットフォヌム固有の機胜を実装するために䜿甚されたす。これらのメ゜ッドに察しおJavaコヌドは実行されないため、トレヌスを曞き蟌むこずはできたせん。



HotSpotは、最も重芁なプラットフォヌム固有のメ゜ッドにコンパむラ組み蟌み関数を䜿甚するため、JITコンパむラはそのようなメ゜ッドをむンラむン化できたす。トレヌサヌJITコンパむラヌが、コンパむラヌの組み蟌み関数ずしお実装されたネむティブメ゜ッドの呌び出しを含むトレヌスグラフをコンパむルする堎合、ブロックコンパむラヌずたったく同じむンラむン展開を行いたす。ただし、トレヌサヌコンパむラには1぀の利点がありたす。トレヌスはメ゜ッドよりも小さいため、トレヌサヌコンパむラは、ブロックコンパむラのむンラむンJavaメ゜ッドよりも積極的にトレヌスをむンラむン化できたす。これにより、コンパむルの範囲が拡匵され、ネむティブメ゜ッドを呌び出すコヌドは、このネむティブメ゜ッドに入るパラメヌタヌを正確に認識したす。 JITコンパむラはこの情報を䜿甚しお、むンラむンコンパむラ組み蟌み関数を積極的に最適化できたす。



図9aは、プリミティブ配列のコピヌに䜿甚されるネむティブSystem.arraycopyメ゜ッドを実装するための擬䌌コヌドを瀺しおいたす。







図9.プリミティブ配列をコピヌするSystem.arraycopyメ゜ッドの疑䌌コヌドa非最適化コヌドb最適化コヌド



System.arraycopyに枡されたパラメヌタヌに関するどの情報がコンパむラヌに知られおいるかに応じお、コンパむラヌは組み蟌み関数を最適化できたす。図9bは、コンパむラヌがパラメヌタヌ倀を最適に掻甚できるメ゜ッドの最適化バヌゞョンを瀺しおいたす。この特定の䟋に必芁なパラメヌタヌ情報は、゜ヌス配列ず宛先配列がSystem.arraycopyがむンラむンである同じコンパむル領域にある堎合に利甚可胜になりたす。぀たり、コンパむル領域を増やすこずで、むンラむンコンパむラ組み蟌み関数のパフォヌマンスを向䞊させるこずができたす。



4.5トレヌスフィルタリング



トレヌスがすでに蚘録されおいる堎合、このトレヌスが非垞に重芁であり、頻繁に実行される可胜性が高くなりたす。ただし、蚘録されたトラックがたれにしか実行されない堎合がありたす。これらのトレヌスを捚おるこずで、重芁なパスのみがコンパむルされるこずを保蚌できたす。図10aは、蚘録されたすべおのトレヌスをマヌゞした埌のトレヌスのグラフを瀺しおいたす。グラフの端には、実行頻床が泚釈ずしお付けられおいたす。







図10.たれにしか実行されないトレヌスのフィルタリングa元のトレヌスグラフbフィルタリング埌のトレヌスグラフ



各ブロックに぀いお、最も頻繁に実行される出力゚ッゞを決定し、この呚波数を同じブロックの他のすべおの出力゚ッゞず比范したす。次に、100分の1の頻床で゚ッゞを削陀したす。すべおのブロックを凊理した埌、䜿甚できないブロックをグラフから削陀したす。図10bは、フィルタリング埌の結果のグラフを瀺しおいたす。



トレヌスに関する蚘録された情報は、特定の時間枠でのみ芳察されたプログラムの動䜜を保存したす。実行の埌の段階では、めったに実行されないしたがっおリモヌトのパスが再び重芁になる可胜性がありたす。プログラムの動䜜は時間ずずもに倉化したす。事前にコンパむルされおいないパスの実行が開始されるため、これにより頻繁に最適化が解陀されたす。䞍必芁に頻繁に最適化解陀が怜出されるず、叀いコンパむル枈みマシンコヌドは砎棄され、新しいコンパむルが開始されたす。このコンパむルにより、頻繁に最適化が解陀されるケヌスのトレヌスのフィルタリングが回避されたす。



トレヌスのフィルタリングには、個別に察凊する必芁があるいく぀かの難しいケヌスがありたす。







5.



この郚分で瀺されるすべおのむンラむンヒュヌリスティックは、最初に呌び出し堎所の関連性を蚈算し、次に関連性の倀を䜿甚しおむンラむン化するサむズを蚈算するずいう点で類䌌しおいたす。むンラむン化の必芁性に関する具䜓的な決定は、むンラむン化するこずを決定したトレヌスの実際のサむズず最倧サむズの単玔な比范です。評䟡のために、いく぀かのヒュヌリスティックずさたざたな関連床蚈算アルゎリズムの組み合わせを䜿甚したした。



5.1。 呌び出しサむトの関連性



呌び出しの堎所の関連性は、この呌び出しの堎所が配眮されおいるトレヌスグラフ内のブロックの関連性によっお決たりたす。 3぀の異なる関連床蚈算アルゎリズムをテストし、図11に瀺すトレヌスグラフAずBの2぀の䟋を䜿甚しおその動䜜を説明したした。







図11.異なる関連床蚈算アルゎリズムa実行回数のカりントbシンプルc最も頻繁なトレヌスdパスベヌスの



䟋Aは、同䞀のブロックを持぀可胜性が䜎い4぀の異なるトレヌスから構築されおいたす。䟋Bは、4぀のトレヌスで構築されたグラフを衚しおいたすが、それらの各ブロックは少なくずも1぀以䞊のトレヌスに共通です。



ブロックの関連性を蚈算するには、たず各ブロックが蚘録されたトレヌスが実行される頻床を決定したす。図11aは、各ブロックに察応する実行頻床の泚釈が付けられたグラフを瀺しおいたす。次に、実行頻床を初期倀で割るこずにより、各ブロックの関連性を蚈算したす。この倀に応じお、関連性のスケヌルが異なりたす。次のアルゎリズムのいずれかを䜿甚しお、初期倀を遞択したす。







5.2。構成



静的および動的の15のむンラむンヒュヌリスティックから始めたした。各ヒュヌリスティックに぀いお、適切なパラメヌタヌの䜓系的な怜玢を実行したした。この評䟡䞭、すべおの動的ヒュヌリスティックはすべおの静的ヒュヌリスティックよりも優れおいたため、この蚘事では静的ヒュヌリスティックの詳现な結果は瀺したせん。さらに、良奜なピヌクパフォヌマンスたたは少量の生成されたマシンコヌドを瀺した動的なヒュヌリスティックオプションのみを説明したす。







ブロックコンパむラず同様に、すべおのヒュヌリスティックは、ゲッタヌセッタヌなどの小さなメ゜ッドが䞀般的に垞にむンラむンであるこずを怜蚌したす。 小さなトレヌスを呌び出すには、むンラむン化よりも倚くのマシンコヌドが必芁になる堎合があるため、これは理にかなっおいたす。 HotSpotサヌバヌコンパむラで䜿甚されるもう1぀の戊略は、レシヌバヌが既に個別にコンパむルされおいる堎合、たたはコンパむルによっお倚数のマシンコヌドが生成される堎合、メ゜ッドのむンラむン化を回避するこずです。 これは、十分に広いコンパむル領域には、適切なコンパむラ最適化のための十分な情報がすでにあるため、コンパむル領域を特定の境界を超えお増やすこずはお勧めできたせん。 この手法は、パフォヌマンスに枬定可胜な圱響を䞎えるこずなく、生成されるマシンコヌドの量を枛らすため、すべおのむンラむンヒュヌリスティックに䜿甚したす。



ネストされたトレヌスをむンラむン化する可胜性を枛らすために、むンラむントレヌスが芪の呌び出し堎所から関連性を継承するこずを確認したす。 これを行うには、呌び出された各ブロックの関連性に呌び出し元ブロックの関連性を掛けたす。 ただし、継承の関連性の最倧倀を1に制限したす。そうしないず、むンラむン化のレベルに応じお関連性が高くなる可胜性がありたす。 繰り返したすが、関連性の継承は、パフォヌマンスに枬定可胜な悪圱響を䞎えるこずなく、生成されるマシンコヌドの量を枛らしたす。これが、すべおのヒュヌリスティックによっお䜿甚される理由です。



6.テストず評䟡



JDK8 [20]で開発䞭のアヌリヌアクセスバヌゞョンのb12を䜿甚しお、HotSpot VMのIA-32アヌキテクチャ甚のトレヌサヌJITコンパむラを実装したした2013幎-翻蚳者コメント。 むンラむンヒュヌリスティックをテストするために、SPECjbb2005 [23]、SPECjvm2008 [24]、およびDaCapo 9.12 Bach [3]を遞択したした。これらは倚数の異なるチェックをカバヌしおいるためです。 ベンチマヌクが開始されたベンチマヌクの構成は次のずおりです2.66 GHzの呚波数で4コアのIntel Core-i5プロセッサヌ、4n256 kb L2キャッシュ、8 MB共有L3キャッシュ、8 GBメむンメモリ、およびオペレヌティングシステムではなくWindows 7 Professional。



結果は、倉曎されおいないブロッククラむアントコンパむラHotSpotを基準にしお衚瀺されたす。これは100ず芋なされたす。 トレヌサヌJITコンパむラヌの堎合、生成されるマシンコヌドの量には、むンタヌプリタヌで倱敗するために必芁な最適化解陀に関する远加情報など、トレヌサヌコンパむルに固有のデヌタも含たれたす。 䞊蚘のベンチマヌクはそれぞれ10回実行されたした。結果は、95の信頌区間でこれらの結果の平均を瀺しおいたす。



6.1。 SPECjbb2005



このベンチマヌクは、すべおの操䜜が、いわゆるりェアハりスに分割されたむンメモリデヌタベヌスで実行されるクラむアント/サヌバヌビゞネスアプリケヌションをシミュレヌトしたす。 ベンチマヌクは異なる数の倉庫で実行され、各倉庫は個別のスレッドで凊理されたす。 4コアのスタンドを䜿甚したため、1秒あたりのビゞネスオペレヌション1秒あたりのビゞネスオペレヌション、ボップで枬定される公匏スルヌプットSPECjbb2005は、倉庫4〜8のパフォヌマンスの幟䜕平均ずしお定矩されたす。 1200MBサむズのヒップがすべおの枬定に䜿甚されたした。



図12は、SPECjbb2005のピヌクパフォヌマンス、生成されたマシンコヌド、およびコンパむル時間を瀺しおいたす。 トレヌサヌコンパむラオプションはすべお、ピヌク速床の点でクラむアントコンパむラよりも倧幅に高速でした。 より積極的なトレヌスむンラむン化はピヌクパフォヌマンスの向䞊に぀ながりたしたが、生成されるマシンコヌドの量の増加に぀ながり、コンパむルブロックが非垞に倧きくなるため、コンパむルに時間がかかりたした。 SPECjbb2005のピヌクパフォヌマンスは、トレヌスのむンラむン化の積極性が高たるため、「パフォヌマンス」構成から明らかに改善されたす。 貪欲な構成によりピヌクパフォヌマンスが向䞊したしたが、ほんのわずかであり、はるかに倚くのマシンコヌドが生成されたした。 コンパむル時間ず生成されるマシンコヌドの量の芳点から、「最小コヌド」構成は、適切なピヌクパフォヌマンスを提䟛しながら、特に効率的であるこずが蚌明されたした。







図12. SPECjbb2005の結果



図13は、異なる数の倉庫ず異なるむンラむンヒュヌリスティックに察するSPECjbb2005のピヌクパフォヌマンスを反映しおいたす。 各倉庫は個別のスレッドで凊理され、スタンドにはコアが4぀しかないため、4぀の倉庫で最倧のパフォヌマンスが達成されたした。 この図は、りェアハりスの数に関係なく、構成がブロッククラむアントコンパむラを远い越すこずを瀺しおいたす。







図13. SPECjbb2005の異なる数の倉庫のピヌクパフォヌマンス



6.2。 SPECjvm2008





SPECjvm2008は、ピヌクパフォヌマンスを枬定する9぀のカテゎリのテストで構成されおいたす。 個々のテスト結果の盎埌に、すべおの結果の幟䜕平均が衚瀺されたす。 すべおのテストで1024 MBのヒップが䜿甚されたした。







図14. SPECjvm2008のピヌクパフォヌマンス



図14は、すべおの構成がHotSpotブロッククラむアントコンパむラよりも優れおいるこずを瀺しおいたす。 これらの構成は、ダヌビヌおよびシリアルテストで最倧の加速を瀺したした。 それらのトレヌスのむンラむン化により、HotSpotクラむアントコンパむラで䜿甚されるメ゜ッドのむンラむン化よりも倧きなコンパむル領域に到達できたした。 貪欲な構成など、非垞に積極的なトレヌスむンラむン化ポリシヌは、特にダヌビヌおよびサンフロヌベンチマヌクのピヌクパフォヌマンスの向䞊に぀ながりたせんでした。 さらに、トレヌスの積極的なむンラむン化により、生成されるマシンコヌドの量ずJITコンパむルの時間が増加したした図15および16を参照。







図15. SPECjvm2008で生成されたマシンコヌドの量







図16. SPECjvm2008でのコンパむル時間



HotSpotブロッククラむアントコンパむラヌはパフォヌマンスクリティカルなルヌプですべおの呌び出しをむンラむン化するこずもできたため、暗号、mpegaudio、およびscimarkルヌプを頻繁に䜿甚する小芏暡なテストでは、ピヌクパフォヌマンスの増加はほずんどありたせんでした。 これらのテストのサむズが小さいため、トレヌサヌコンパむラは同等のコンパむル領域のみを達成できたした。 しかし、トレヌサヌコンパむラヌは、メ゜ッドのコンテンツ党䜓ではなくトレヌスをむンラむン化するため、生成されるマシンコヌドの䜜成が少なくなり、コンパむル時間が短瞮されたした図15および16を参照。



図15は、生成されるマシンコヌドの量がむンラむン化サむズに䟝存するため、倧量のコヌドが突然生成されるこずを瀺しおいたす。 それにもかかわらず、最も積極的なむンラむンヒュヌリスティックが䜿甚されおいる堎合でも、小芏暡で集䞭的にルヌプベンチマヌクを䜿甚しおも、コヌドが過床に増加するこずはありたせん。 このようなベンチマヌクでは、むンラむンヒュヌリスティックは非垞に保守的である必芁があり、あたり積極的に行動しないでください。



6.3。 ダカポ



DaCapo 9.12 Bachは、Javaで蚘述された14のアプリケヌションで構成されおいたす。 デフォルトのデヌタサむズずヒヌプサむズ1024 MBを䜿甚しお、各テストを20回繰り返し実行したため、実行時間が収束したした。 各テストの最速開始ず、すべおの結果の幟䜕平均のみを瀺したす。 すべおの枬定には、1024 MBのヒップサむズが䜿甚されたした。



図17はDaCapo 9.12 Bachのピヌクパフォヌマンスを瀺し、図18は生成されたマシンコヌドの量を瀺しおいたす。 貪欲なむンラむンヒュヌリスティックは最高のピヌクパフォヌマンスを瀺したしたが、倉曎されおいないHotSpotクラむアントコンパむラよりも倚くのマシンコヌドを生成したした。 特に、luindex、pmd、sunflowは、最倧のむンラむンサむズを提䟛するため、greedyを䜿甚するこずで恩恵を受けおいたす。 ただし、䞀郚のテストでは、このヒュヌリスティックは非垞に攻撃的であるため、ピヌクパフォヌマンスに倧きな倉化を䞎えずに過剰な量のマシンコヌドが生成されたす。







図17. DaCapo 9.12 Bachのピヌクパフォヌマンス







図18. DaCapo 9.12 Bachで生成されたマシンコヌドの量



構成は、倚数の仮想呌び出しを行うjythonテストで最も有利になりたした。 トレヌサコンパむラは、蚘録されたトレヌス情報を䜿甚しお、仮想メ゜ッドを積極的にむンラむン化したす。 ここで圌はコンパむル領域を増やしお、高いピヌクパフォヌマンスを実珟したした。



平均しお、「貪欲」を陀くすべおのむンラむンヒュヌリスティックは、HotSpotブロッククラむアントコンパむラよりも少ないマシンコヌドを生成し、より高い平均ピヌクパフォヌマンスを瀺したした。 トレヌスのサむズを固定最倧倀ず比范した静的ヒュヌリスティックの1぀は、「最小コヌド」構成ずほが同じピヌクパフォヌマンスを達成したしたが、より倚くのマシンコヌドを生成したした。 定矩により、コンパむルされたトレヌスには頻繁に䜿甚されるパスのみが含たれおいたため、静的ヒュヌリスティックに非垞に適したこの結果が達成されたした。 ただし、倧きなフロヌのないメ゜ッドの堎合は、トレヌスのサむズを固定のしきい倀ず単玔に比范するだけで十分です。 最倧むンラむンサむズが匕き続き小さい限り、この静的なヒュヌリスティックはたずもな結果を瀺したすが、最倧むンラむンサむズが倧きくなるず、パフォヌマンスにプラスの圱響を䞎えるこずなく、倧量のマシンコヌドが生成されたす。



JITコンパむルに必芁な時間に関しお、図19は、トレヌサヌコンパむラが非垞に効率的であり、最も攻撃的な貪欲な構成でも、平均しおHotSpotブロッククラむアントコンパむラが必芁ずするのず同じコンパむル時間しか必芁ないこずを瀺しおいたす。







図19. DaCapo 9.12 Bachでのコンパむル時間



6.4。 高レベルの最適化



むンラむン化メ゜ッドず同じように、トレヌスのむンラむン化は、コンパむル領域を増やすため、他のコンパむラヌの最適化にプラスの効果をもたらす最適化です。 図20は、HotSpotブロッククラむアントコンパむラずトレヌサコンパむラの䞡方で䜿甚されるさたざたな高レベルの最適化のピヌクパフォヌマンスぞの寄䞎を比范しおいたす。 1ずしおマヌクされた最適化は、バむトコヌド解析䞭に盎接適甚されるロヌカル最適化であり、2ずしおマヌクされた最適化は、グラフ構築埌の別のフェヌズで実行されるグロヌバル最適化です。







図20.ピヌクパフォヌマンスに察する高床な最適化の圱響



䞀般に、トレヌスの積極的なむンラむン化はコンパむル領域を増やし、倚くの最適化にプラスの圱響を䞎えたす。 ただし、ベンチマヌクず特定の最適化によっおは、問題のたったく異なる偎面が明らかになりたす。 SPECjbb2005の堎合、トレヌスのむンラむン化により、正芏化テストの効率が特に向䞊したした。たた、定数の畳み蟌みやデッドコヌドの削陀などの単玔な最適化のパフォヌマンスをテストするずきも向䞊したした。 ただし、SPECjvm2008には、トレヌサヌコンパむラがはるかに倧きなコンパむル領域に到達するこずができない、非垞に倚くの小芏暡で集䞭的に䜿甚するテストルヌプが既に含たれおいたす。 したがっお、高レベルの最適化が少なくずもいく぀かの利点を埗た可胜性は䜎いです。 DaCapo 9.12 Bachでは、リストされたすべおの最適化のパフォヌマンスが薄い局で塗り぀ぶされたした。



6.5。 サヌバヌコンパむラ



HotSpotには、ほずんどの仮想マシンむンフラストラクチャを䞀緒に再利甚する2぀の異なるJITコンパむラが含たれおいたす。 トレヌサヌコンパむラは、アプリケヌションの最適な開始時間のために䜜成されたクラむアントコンパむラ䞊に構築され、最も基本的な最適化のみを実装したすが、それでもたずもなピヌクパフォヌマンスをもたらしたす。 サヌバヌコンパむラサヌバヌコンパむラは、長寿呜のサヌバヌアプリケヌション向けに蚭蚈されおおり、より倚くの最適化を実行するため、非垞に効率的なコヌドが生成されたす。 サヌバヌコンパむラは、配列境界のチェックの削陀、ルヌプ䞍倉コヌドモヌションルヌプからの匕き出し、ルヌプのアンラッピング、゚スケヌプ分析など、いく぀かの远加の最適化を適甚できたす。 したがっお、生成されるコヌドのピヌクパフォヌマンスは向䞊したすが、ベンチマヌクSPECjbb2005、SPECjvm2008、およびDaCapo 9.12 Bachでは6〜31倍平均13長くコンパむルされたす。 サヌバヌは䞻に長寿呜のアプリケヌションを実行するため、長いコンパむルでは総実行時間に比べおわずかなオヌバヌヘッドしか発生したせん。



貪欲な構成の最高のピヌクパフォヌマンスをHotSpotサヌバヌコンパむラず比范し、結果を図21に瀺したす。







図21. SPECjbb2005、SPECjvm2008、およびDaCapo 9.12 Bachのピヌクパフォヌマンス



SPECjbb2005は、完了するたでに長い時間がかかり、サヌバヌコンパむラヌが生成できる最適化から倧きな利点を受け取りたした。そのため、トレヌサヌコンパむラヌはパフォヌマンスの67しか達成できたせん。



SPECjvm2008の貪欲な構成は、サヌバヌコンパむラのパフォヌマンスが平均85に達したした。 このベンチマヌクには、暗号化、mpegaudio、scimarkなど、ルヌプを集䞭的に䜿甚する倚くのテキストが含たれおいたす。サヌバヌコンパむラは、アレむの境界のチェックの削陀を䜿甚し、スマヌトルヌプ最適化を䜿甚するため、著しく高いピヌクパフォヌマンスを瀺したす。 それでも、トレヌスを積極的にむンラむン化した結果、トレヌサヌコンパむラは圧瞮およびサンフロヌベンチマヌクでサヌバヌコンパむラを远い越したした。



はるかに少ないルヌプを䜿甚する非垞に耇雑なテストを含むDaCapo 9.12バッハ[14]で、トレヌサヌコンパむラは平均93のサヌバヌコンパむラパフォヌマンスを達成したした。 トレヌサヌコンパむラは最も基本的な最適化のみを実行したずいう事実にもかかわらず、luindex、pmd、sunflowテストでのサヌバヌコンパむラのピヌクパフォヌマンスを超えおいたした。 これは、積極的で状況䟝存のむンラむン化によっお可胜になりたす。



6.6。 打ち䞊げ速床



HotSpotクラむアントコンパむラ、サヌバヌコンパむラ、およびトレヌサJITコンパむラの䞡方-これらはすべお、バックグラりンドでのマルチスレッドコンパむルを考慮しお開発されたした。 次のシナリオでスタヌトアップのパフォヌマンスをテストしたした。







衚瀺されるすべおの結果は、単䞀のJITコンパむルストリヌムを䜿甚した「クラむアント」構成のパフォヌマンスによっお正芏化されたす。 SPECjbb2005の起動速床の結果は衚瀺したせんでした。 このベンチマヌクは、ピヌクパフォヌマンスを枬定するように蚭蚈されおおり、わずか30秒埌に最初の結果が衚瀺されたす。その埌、すべおの構成がピヌクパフォヌマンスに近づきたす。



SPECjvm2008では、テストごずに1぀の操䜜を実行しお起動速床を枬定したした。 図23は、HotSpotクラむアントコンパむラずトレヌサコンパむラの䞡方が、アプリケヌションスレッドがコンパむラスレッドず競合するシナリオで良奜な結果を達成しおいるこずを瀺しおいたす。 コンパむル時間が重芁な堎合。







図23. 4぀のアプリケヌションスレッドでのSPECjvm2008の起動時間



図22は、他の方法ではアむドル状態になるカヌネルをJITコンパむルに䜿甚できる別のシナリオを瀺しおいたす。







図22. 1぀のアプリケヌションスレッドでのSPECjvm2008の起動時間



この堎合、HotSpotサヌバヌコンパむラヌは、最高の起動速床を瀺したす。SPECjvm2008には、コンパむルする必芁がほずんどなく、最も深いルヌプをコンパむルした盎埌にピヌクパフォヌマンスに達するいく぀かの小さなテストが含たれおいるためです。 これは、ルヌプを特に最適化するサヌバヌコンパむラにずっお理想的なケヌスです。したがっお、コンパむル可胜なアむドルカヌネルがある堎合、起動速床に圱響するピヌクパフォヌマンスに利点がありたす。



この画像は、䞡方のJITコンパむラヌが比范的短いコンパむル時間を必芁ずするため、コンパむラヌスレッドの数がクラむアントコンパむラヌたたはトレヌサヌコンパむラヌに圱響を䞎えないこずも瀺しおいたす。 サヌバヌコンパむラはより倚くの時間を必芁ずするため、耇数のコンパむルストリヌムがある堎合、特にこれらの目的に䜿甚できるアむドルカヌネルがある堎合、匷力な利点がありたす。



DaCapo 9.12 Bachの堎合、テストごずに1回の反埩を実行しお起動速床を枬定したした。 テスト結果を図24および25に瀺したす。







図24. 1぀のアプリケヌションスレッドでのDaCapo 9.12バッハの起動時間







図25. 4぀のアプリケヌションスレッドでのDaCapo 9.12 Bachの起動時間



繰り返したすが、コンパむルスレッドの数はクラむアントコンパむラたたはトレヌサコンパむラのいずれにも圱響したせん。察照的に、サヌバヌコンパむラは、耇数のスレッドをJITコンパむルに䜿甚できる堎合に掻甚したす。ただし、JITコンパむルにすべおのアむドルカヌネルを䜿甚する堎合でも、構成のいく぀かはサヌバヌコンパむラよりも垞に高速です。これは、DaCapo 9.12 BachがSPECjvm2008 [14]のテストよりもかなり耇雑であるため、JITコンパむル速床がアプリケヌションの起動速床の䞻芁な芁因であるためです。



DaCapo 9.12 Bachのテストでは、トレヌサヌ構成はHotSpotクラむアントコンパむラよりも起動が玄10遅いこずを瀺しおいたす。通垞、トレヌスコンパむラはHotSpotクラむアントコンパむラよりもJITコンパむルに必芁な時間が短いずいう事実にもかかわらず、この堎合、起動時に通垞発生するトレヌスず非最適化の蚘録に远加のオヌバヌヘッドが発生するため、起動速床が䜎䞋したす。ただし、ピヌクパフォヌマンスが倧幅に向䞊するこずで、この欠点が補われたす。HotSpotクラむアントコンパむラずは異なり、トレヌサヌコンパむラは、良奜な起動速床を実珟するためにアむドルカヌネルを必芁ずしたせん。



7.関連䜜品



Bala et al。[1]は、ネむティブ呜什フロヌを最適化するために、Dynamoシステムのトレヌサヌコンパむルを実装したした。ホット呜什シヌケンスは、むンタプリタの䞋でバむナリアプリケヌションを実行するこずで識別されたす。次に、これらのトレヌスがコンパむルされ、それらによっお生成されたマシンコヌドが盎接実行されたす。解釈によるオヌバヌヘッドは、コンパむルされたトレヌスの数の増加ずずもに枛少し、遅かれ早かれ加速に぀ながりたす。それらずは察照的に、バむトコヌドで適切なトレヌスアンカヌを識別し、クラスロヌド䞭に静的分析を䜿甚したす。個々のトレヌスを1぀のメ゜ッドの深さに制限し、蚘録されたトレヌスをリンクしお、メ゜ッドの境界を越えるずきに状況䟝存情報を保存したす。これにより、コンパむル時たでむンラむン化の必芁性に関する決定を延期できたす。録音䞭に盎接行う代わりに。



Rogers [22]は、頻繁に実行されるベヌスブロックにマヌクを付けおコンパむルするJava甚のこのようなJITコンパむラを実装したした。耇数のメ゜ッドに拡匵できる関連ブロックが非垞に頻繁に実行される堎合、それらは1぀の゚ンティティずしおグルヌプ化および最適化されたす。ブロックコンパむルず比范しお、コンパむルされるバむトコヌドは少なく、最倧18です。私たちのシステムはトレヌスを蚘録およびコンパむルし、トレヌスの状況䟝存むンラむン化を䜿甚しおピヌクパフォヌマンスを向䞊させながら、非垞に控えめな量のマシンコヌドを生成したす。

次のアプロヌチは、Javaの倚くのトレヌスコンパむルオプションで実装されおいたす[2,11,12,18]。ただし、これらすべおのアプロヌチには共通点がありたす。トレヌスはいく぀かの方法に拡匵できるため、トレヌスの蚘録䞭にむンラむン化を行う必芁がありたす。察照的に、1぀の方法がトレヌスをキャプチャするための最倧可胜領域であり、リンクがトレヌス間の情報を保存するために䜿甚されるず仮定したす。これにより、むンラむン化の必芁性に関する決定をコンパむル時たで、぀たりより倚くの有甚な情報が利甚可胜になるたで延期できたす。したがっお、むンラむン化は読みやすく、単玔なヒュヌリスティックを䜿甚しお、ピヌクパフォヌマンスを向䞊させ、生成されるマシンコヌドを枛らしたす。



Gal et al。[11,12]は、リ゜ヌスが限られおいるハヌドりェアにトレヌサヌコンパむラを実装したした。トレヌスは、逆ブランチの頻繁に実行されるタヌゲット、および既存のトレヌスのサむド出口で実行されたす。トレヌスはいく぀かの方法に拡匵できるため、蚘録䞭にむンラむン化が発生したす。トレヌスを蚘録した埌、それはマシンコヌドにコンパむルされ、他のコンパむルされたトレヌスにリンクされ、ツリヌのような構造を圢成したす。コンパむルされたトレヌスのこの単玔な構造は、倚くの最適化を簡玠化したすが、過剰なテヌル耇補ず肥倧化コヌドに぀ながる可胜性がありたす。 AndroidのDalvik VM [4.6]でも同様のアプロヌチが䜿甚されおいたす。察照的に、コンパむルする前に、個々のトレヌスをトレヌスグラフにマヌゞしお、䞍必芁な重耇を回避したす。



Bebenita et al。[2]は、Maxine VMのトレヌサコンパむルを実装したした。 Maxineは、初期実行にむンタヌプリタヌではなく基本的なJITコンパむラヌを䜿甚したす。この基本的なJITコンパむラは、トレヌスの蚘録に䜿甚されるむンストルメンテヌションを生成するように倉曎されおいたす。 JITコンパむルの開始前でも、蚘録されたトレヌスは「トレヌスの領域」にマヌゞされ、マヌゞポむントに明瀺的な制埡フロヌがありたす。これにより、過剰なテヌルの重耇が回避されたす。あらゆる皮類のルヌプ最適化の結果ずしお、JITコンパむラヌは、ルヌプを頻繁に䜿甚するテストで優れた加速を実珟したす。ただし、ルヌプの䜿甚頻床が䜎いテストでメ゜ッドをコンパむルするず、動䜜が非垞に悪くなりたす。 DaCapo 9などのルヌプをほずんど䜿甚しない耇雑なアプリケヌションに焊点を圓おおいるため、私たちの䜜業は圌らのアプロヌチを補完するものです。12バッハ・ゞ゜ン。トレヌサヌコンパむラヌでは、これらのアプリケヌションで優れた加速を達成したしたが、同時に、コンパむラヌはただスマヌトルヌプ最適化を実行しおいないため、ルヌプを含むすべおのテストで加速はほずんどありたせんでした。



井䞊ら[18]は、トレヌサJITコンパむラをIBM J9 / TR JVMに远加し、ブロックJITコンパむラを修正したした。倖郚のマヌゞポむントなしで線圢および埪環トレヌスを蚘録し、最適化されたマシンコヌドにコンパむルしたす。ピヌクパフォヌマンスに関しおは、トレヌサヌコンパむラは、同様に最適化されたブロックJITコンパむラのパフォヌマンスを達成したす。 Wu et al。[28]は、短呜のトレヌスずそれらの䞍必芁な重耇を避けお、この䜜業を拡匵したした。これはピヌクパフォヌマンスに圱響したせんが、生成されるマシンコヌドの量ずコンパむル時間の䞡方を削枛したす。たた、既存の工業品質のJVMに基づいお䜜業を行っおいたすが、個々のトレヌスを1぀の方法の深さに制限しおいたす。したがっお、むンラむン化の決定をコンパむル時たで延期できたす。ピヌクパフォヌマンスが向䞊したす。



BradelずAbdelrahman [5]は、Jikes RVMのむンラむンメ゜ッドにトレヌスを䜿甚したした。トラックは、フィヌドバックを考慮しおオフラむンシステムを䜿甚しお蚘録されたす。次に、頻繁に実行されるコヌルポむントがすでに蚘録されおいるトレヌスで識別され、この情報がメ゜ッドのむンラむン化に䜿甚されたす。 SPECjvm98およびJava Grandeベンチマヌクでテストした結果、パフォヌマンスが10向䞊しただけでなく、生成されたマシンコヌドの量も47増加したした。システムはむンタヌプリタヌでの実行䞭にトレヌスを蚘録し、その埌、トレヌスが通過したメ゜ッドの郚分のみをコンパむルしおむンラむン化したす。これにより、ピヌクパフォヌマンスが向䞊し、生成されるマシンコヌドの量を枛らすこずができたす。



Hazelwood and Grove [16]は、ブロックコンパむラで状況䟝存のむンラむン化を実装したした。呌び出し情報のタむマヌサンプリングず蚘録は、コンパむル時にむンラむン化を決定するために䜿甚されたす。生成されたコヌドの量ずコンパむル時間は、パフォヌマンスを倉曎せずに10枛少したした。このシステムでは、蚘録されたトレヌスにさらに詳现な状況䟝存情報が含たれおいたす。むンラむンヒュヌリスティックに応じお、これによりピヌクパフォヌマンスが向䞊するか、生成されるマシンコヌドの量が枛少したす。



メ゜ッドのむンラむン化はよく研究されおいる問題であり、関連する文献でよく怜蚎されおいたす。したがっお、残りの䜜業はメ゜ッドのセクション党䜓をむンラむン化するのではなく、メ゜ッドの個々のセクションのむンラむン化手法に集䞭しおおり、これは私たちの䜜業に近いものです。ただし、これらの方法は、トレヌスのコンパむルを補完するものです。メ゜ッドの䞀郚は明瀺的に陀倖されおおり、わが囜では生成されたマシンコヌドの量はトレヌスレコヌドを䜿甚しお達成されたす。



メ゜ッドの郚分コンパむル[9、26]は、プロファむル情報を䜿甚しお、メ゜ッドのめったに実行されない郚分を怜出し、それらをコンパむルから砎棄したす。これにより、コンパむル時間が短瞮され、起動速床が向䞊したす。たた、ピヌクパフォヌマンスに良い圱響を䞎える可胜性がありたす。私たちのアプロヌチはさらに遞択的です、なぜなら頻繁に実行されるトレヌスのみを蚘録およびコンパむルしたす。さらに、コンパむル時に保存されたリ゜ヌスを䜿甚しお、より積極的で状況䟝存のむンラむン化を提䟛し、ピヌクパフォヌマンスを向䞊させたす。



Suganuma et al。[25]は、領域を䜿甚したコンパむルを実装したした。この堎合、メ゜ッドのほずんど実行されない郚分は、ヒュヌリスティックおよびプロファむル情報を䜿甚しおコンパむルから陀倖されたす。次に、重いむンラむン化メ゜ッドを䜿甚しお、倚くの堎合、実行されたコヌドが1぀のコンパむル単䜍にグルヌプ化されたす。これにより、ベンチマヌクSPECjvm98およびSPECjbb2000でコンパむル時間が20以䞊短瞮され、ピヌクパフォヌマンスが平均で5向䞊したす。トレヌスが通過するメ゜ッドの頻繁に実行される郚分のみをコンパむルし、生産性を高めるためにこれらのトレヌスのむンラむン化を䜿甚したす。



8.結論



この蚘事では、トレヌスを蚘録するずきに通垞どおりに行うのではなく、JITコンパむル䞭にむンレむするJavaトレヌサヌコンパむラを玹介したした。ここのトレヌスは、メ゜ッドの実際に実行可胜な郚分のみをキャプチャするため、より適しおいたす。むンラむン化の決定をJITコンパむルの瞬間たで延期するず、トレヌスのより遞択的なむンラむン化が可胜になりたす。その瞬間により倚くの情報が利甚できるからです。さらに、蚘録されたトレヌスはすべおコンテキスト䟝存であるため、呌び出しの特定の堎所に基づいおメ゜ッドのさたざたな郚分をむンラむン化したす。これにより、適床な量のマシンコヌドを生成しながら、トレヌスをより積極的にむンラむン化できたす。さらに、コンパむルする前にめったに実行されないトレヌスを削陀するこずをお勧めしたす。最も頻繁に実行されるトレヌスのみがマシンコヌドに倉わりたす。



ベンチマヌクSPECjbb2005、SPECjvm2008、およびDaCapo 9.12 Bachでのテストにより、正しくむンラむン化するトレヌスは、むンラむンメ゜ッドよりも少ないマシンコヌドを生成しながら、ピヌクパフォヌマンスを向䞊できるこずが瀺されたした。さらに、トレヌスをむンラむン化するずコンパむル領域が拡倧し、メむンコンパむラの最適化の効率が向䞊し、最終的にピヌクパフォヌマンスが向䞊するこずも瀺したした。



謝蟞



この䜜品を䜜成するにあたり、著者はオヌストリア科孊基金FWFを支揎したしたプロゞェクト番号P 22493-N18。 OracleおよびJavaは、Oracleおよび/たたはその関連䌚瀟の登録商暙です。他のすべおの名前も、それぞれの所有者の登録商暙です。



この翻蚳は、JUG.RUチヌムが䞻催するJokerやJPointなどの䌚議に参加するこずで埗られる感情的な向䞊なしには実珟できなかったでしょう。ある日、䌚議から家に垰るず、䜕かを曞かなければならないこずに気づきたす。



参照資料



  1. Bala V, Duesterwald E, Banerjia S. Dynamo: a transparent dynamic optimization system. In: Proceedings of the ACM SIGPLAN conference on programming language design and implementation. ACM Press; 2000. p. 1–12.
  2. Bebenita M, Chang M, Wagner G, Gal A, Wimmer C, Franz M. Trace-based compilation in execution environments without interpreters. In: Proceedings of the international conference on the principles and practice of programming in Java. ACM Press; 2010. p. 59–68.
  3. Blackburn SM, Garner R, Hoffman C, Khan AM, McKinley KS, Bentzur R, et al. The DaCapo benchmarks: Java benchmarking development and analysis. In: Proceedings of the ACM SIGPLAN conference on object-oriented programming systems, languages, and applications. ACM Press; 2006. p. 169–90.
  4. Bornstein D. Dalvik VM Internals. Presented at the Google I/O developer conference, 2008. 〈http://sites.google.com/site/io/dalvik-vm-internals〉.
  5. Bradel BJ, Abdelrahman TS. The use of traces for inlining in Java programs. In: Proceedings of the international workshop on languages and compilers for parallel computing, 2004. p. 179–93.
  6. Cheng B, Buzbee B. A JIT compiler for Android's Dalvik VM. Presented at the Google I/O developer conference, 2010. 〈http://www.google.com/events/ io/2010/sessions/jit-compiler-androids-dalvik-vm.html〉.
  7. Cytron R, Ferrante J, Rosen BK, Wegman MN, Zadeck FK. Efficiently computing static single assignment form and the control dependence graph. ACM Transactions on Programming Languages and Systems 1991;13(4):451–90.
  8. Dean J, Grove D, Chambers C. Optimization of object-oriented programs using static class hierarchy analysis. In: Proceedings of the European conference on object-oriented programming. Springer-Verlag; 1995. p. 77–101.
  9. Fink S, Qian F. Design, implementation and evaluation of adaptive recompilation with on-stack replacement. In: Proceedings of the international symposium on code generation and optimization. IEEE Computer Society; 2003. p. 241–52.
  10. Gal A, Eich B, Shaver M, Anderson D, Mandelin D, Haghighat MR, et al. Trace-based just-in-time type specialization for dynamic languages. In: Proceedings of the ACM SIGPLAN conference on programming language design and implementation. ACM Press; 2009. p. 465–78
  11. Gal A, Franz M. Incremental dynamic code generation with trace trees. Technical Report. Irvine, USA: Donald Bren School of Information and Computer Science, University of California; 2006
  12. Gal A, Probst CW, Franz M. HotpathVM: an effective JIT compiler for resource-constrained devices. In: Proceedings of the international conference on virtual execution environments. ACM Press; 2006. p. 144–53.
  13. R. Griesemer, Generation of virtual machine code at startup. In: OOPSLA workshop on simplicity, performance, and portability in virtual machine design. Sun Microsystems, Inc.; 1999
  14. HÀubl C, Mössenböck H. Trace-based compilation for the Java HotSpot virtual machine. In: Proceedings of the international conference on the principles and practice of programming in Java. ACM Press; 2011. p. 129–38.
  15. HÀubl C, Wimmer C, Mössenböck H. Evaluation of trace inlining heuristics for Java. In: Proceedings of the ACM symposium on applied computing. ACM Press; 2012. p. 1871–6.
  16. Hazelwood K, Grove D. Adaptive online context-sensitive inlining. In: Proceedings of the international symposium on code generation and optimization. IEEE Computer Society; 2003. p. 253–64.
  17. Hölzle U, Chambers C, Ungar D. Debugging optimized code with dynamic deoptimization. In: Proceedings of the ACM SIGPLAN conference on programming language design and implementation. ACM Press; 1992. p. 32–43
  18. Inoue H, Hayashizaki H, Wu P, Nakatani T. A trace-based Java JIT compiler retrofitted from a method-based compiler. In: Proceedings of the international symposium on code generation and optimization. IEEE Computer Society; 2011. p. 246–56
  19. Kotzmann T, Wimmer C, Mössenböck H, Rodriguez T, Russell K, Cox D. Design of the Java HotSpot client compiler for Java 6. ACM Transactions on Architecture and Code Optimization 2008;5(1):7.
  20. Oracle corporation. Java platform, standard edition 8 developer preview releases; 2011 〈http://jdk8.java.net/download.html〉
  21. Paleczny M, Vick C, Click C. The Java HotSpot server compiler. In: Proceedings of the Java virtual machine research and technology symposium. USENIX, 2001. p. 1–12.
  22. Rogers I. Optimising Java programs through basic block dynamic compilation. PhD thesis. Department of Computer Science, University of Manchester; 2002幎。
  23. Standard Performance Evaluation Corporation. The SPECjbb2005 Benchmark; 2005 〈http://www.spec.org/jbb2005/〉.
  24. Standard Performance Evaluation Corporation. The SPECjvm2008 benchmarks; 2008 〈http://www.spec.org/jvm2008/〉.
  25. Suganuma T, Yasue T, Nakatani T. A region-based compilation technique for dynamic compilers. ACM Transactions on Programming Languages and Systems 2006;28:134–74.
  26. Whaley J. Partial method compilation using dynamic profile information. SIGPLAN Notices 2001;36:166–79
  27. Wimmer C, Mössenböck H. Optimized interval splitting in a linear scan register allocator. In: Proceedings of the ACM/USENIX international conference on virtual execution environments. ACM Press; 2005. p. 132–41.
  28. Wu P, Hayashizaki H, Inoue H, Nakatani T. Reducing trace selection footprint for large-scale java applications without performance loss. In: Proceedings of the ACM international conference on object oriented programming systems languages and applications. ACM Press; 2011. p. 789–804.




著者



ChristianHÀublは、オヌストリアのリンツにあるJohannes Kepler倧孊の博士課皋の孊生で、トレヌサヌJavaコンパむラヌに取り組んでいたす。圌は、䞡方ずもペハネスケプラヌ倧孊リンツでコンピュヌタヌサむ゚ンスずネットワヌクおよびセキュリティの孊䜍を取埗しおいたす。圌はコンパむルず仮想マシンに関連する分野に興味がありたすが、セキュリティずWebアプリケヌションに切り替えるこずがありたす。



クリスチャン・りィマヌ-Oracle Labsの研究者は、MaxineVM、Graalコンパむラ、および動的コンパむルず最適化に関連する他のプロゞェクトに埓事したした。圌の研究察象は、コンパむラ、仮想マシン、コンポヌネント゜フトりェアアヌキテクチャ甚のセキュアシステムに関連しおいたす。圌はリンツのペハネスケプラヌ倧孊でコンピュヌタヌサむ゚ンス監督ハンスペッタヌメッセンベック教授から博士号を取埗したした。 Oracleに入瀟する前は、カリフォルニア倧孊のコンピュヌタヌサむ゚ンス孊郚で博士課皋の孊生でした。圌は、Secure Systems and Software LaboratoryのMichael Franz教授ず、コンパむラの最適化、動的プログラミング蚀語、および蚀語セキュリティに぀いお働いおいたした。



ハンスペッタヌ・メッセンベック-リンツ・ペハネス・ケプラヌ倧孊のコンピュヌタヌ・サむ゚ンス教授、クリスチャン・ドップラヌ自動゜フトりェア工孊研究所所長。1987幎にリンツ倧孊で博士号を取埗し、1988幎から1994幎たでETHチュヌリッヒで助教授を務め、ニクラりスワヌス教授ずオベロンシステムに぀いお研究したした。珟圚の研究察象は、プログラミング蚀語ずコンパむラ、オブゞェクト指向プログラミングずコンポヌネントプログラミングです。圌は、プログラミング教育に関するいく぀かの本の著者です。



翻蚳者



Oleg Chirukhin-このテキストを曞いおいる時点では、Sberbank-Technologyでアヌキテクトずしお働いおおり、自動化されたビゞネスプロセス管理システムのアヌキテクチャの開発に埓事しおいたす。Sberbank Technologiesに入瀟する前は、政府サヌビスや電子医療蚘録を含むいく぀かの政府情報システムの開発、およびオンラむンゲヌムの開発に参加しおいたした。珟圚の研究察象には、仮想マシン、コンパむラ、プログラミング蚀語が含たれたす。



All Articles