OpenJDK notes

openJDK notes


TIERED compilation

7.0 からはメソッドのコンパイルが client / server compiler で起こる。
実行回数、ループのバックエッジが閾値を超えたメソッドはまずは(比較的)
シンプルな client コンパイラでコンパイルしておきその後もプロファイルを
とり続け、やはりよく実行されているようであれば、より高度な最適化が
出来る server compiler でコンパイルされる。client compiler は C1
compiler, server compiler は C2 という内部モジュール名を持つので
これらは C1, C2 とも呼ばれる。

openJDK のソースには #ifdef TIRED の条件分けや、コンパイルに関連した
関数などに compilation level が現れる。実装やその確認方法はもう少し
よく見て行かないとわからない。

今のところ server か client を選択して使用することになっているようで、
TIRED compilation もまだ実装中ということか。

Interpreter

スクリプト実行用にバイトコードが増えるかもという話だったが、新しい物は
見当たらない。実装はまだまだこれからということか。fast bytecode は
増えているみたい。

CC_INTERP はデバッグ向けということか? ビルドしなおして速さを
確認してみよう。

Escape Analysis

これも、注目の機能だったが、関連するクラスは C2 周りにしか見られない。
確かに Phi, constant node 周りで記録する関数を呼んでいる。実際に
どのようにスロットの割り当てを変えてきているからまだ見えてこない。

この、初期版では Escape Analysis は default off. しかも使えるのは
C2 のみ。期待としてはインタープリタ、C1/C2 すべてで積極的に Escape
Analysis を行って、可能なものは極力スタックにアロケートするような
物になるかと思っていたが、そういうものではないらしい。もしそうなったら
ヒープ、GC の負荷が劇的に下がってパフォーマンスも向上するのではとも
思っていたのだが...

簡単なプログラムを書いてエスケープしないオブジェクトをアロケートして
ハッシュコードを取るようなメソッドを繰り返し呼ぶようにしてみる。
C2 で Escape Analysis をオンにして実行してみるが、GC はオフの時と
同様におきている。まだ実装途中で、スタック上のオブジェクト確保は
まだ出来ないということか。
最終更新:2006年11月16日 00:35
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。