Javaで書いたJVMインタプリタの話。JITとうまく繋げられれば結構、性能が出るかもよといったところか。
Michael Bebenita and Andreas Gal and Michael Franz: Implementing fast JVM interpreters using Java itself, PPPJ 2007, pp. 145-154.
[pukiwiki]
JVM の上の Java コードとして JVM のインタプリタ(J2VM)を作成した。Java on Java のメリットは(1) trusted computing base を小さくできること、(2) リフレクションとJITを組み合わせた実行時定数を活用した効率化(例:プロファイル、デバッグフラグの有無)、(3) ロード時、実行時のリフレクションなど。
論文では J2VM の実装方式について解説されている。興味深い点は(1)スタックフレームの型安全で効率的な構成方法(配列でバックアップされた双方向リストと(long, double, Object)の三つ組としての値)、オブジェクトの生成と初期化の方法、バイトコード命令のグラフとしての表現(非効率的な配列へのアクセスを避けるため)、マクロ命令化によるバイトコードディスパッチのオーバーヘッドの除去といったところ。
マイクロベンチマークでは HotSpotVM の4-9倍程度の遅さとなる。HotSpot JIT を直接活用できたとした場合、インタプリタは JIT によってコンパイルされて効率的に実行されるためはるかに効率的に実行できるだろうと予測している。HotSpot JIT の上に実装したと仮定したシミュレーションによれば、大きめの問題サイズではオーバーヘッドをほとんど隠すことができるようだ。
[/pukiwiki]