A Direct Devirtualization Technique with the Code Patching Mechanism

本論文では,Java等の動的クラスローディングをともなう言語において,実装が容易な動的メソッ ド呼び出しの直接 devirtualization 手法を提案する.本手法では,動的メソッド呼び出しに対して 直接 devirtualizationされたコードと,メソッドがオーバライドされた場合に実行する動的メソッド 呼び出しの 2種類のコードをコンパイル時に生成する.最初は前者を実行し,メソッドのオーバラ イドが起きたときにコードを書き換えて後者を実行する.本手法では,コード書換えによって直接 devirtualizationされたコードを無効化するので,脱最適化のような再コンパイルのための複雑な実 装が不要である.一方,再コンパイルを不要にするためにコンパイル時に 2種類のコードを用意す るため,制御フロー上に合流点が生成される.一般に制御フローの合流点はコンパイラの最適化を 妨げるが,本論文では合流点が存在しても十分な最適化を可能にする手法を示す.また本手法と他の devirtualization手法を組み合わせて Javaの Just-In-Timeコンパイラに実装し評価を示す.その結 果,devirtualizationを行わない場合に比べ,SPECjvm98と SPECjbb2000において 0~181%(平 均 24%)性能を改善できることを示す.