|
おまけ編です。 クラスファイルに格納されている情報について、整理してみた。 ちなみに、たった一行の JRuby のコード。 print "hello JRuby !" これを、JRuby 1.6.5.1 と 1.7.0-dev とで AOC(Ahead Of Compile)し、 生成されるクラスファイルの内容を比較した。 ■ クラスファイルのバージョン
JRuby 1.6.5.1 ではinvokevirtual を使ったコードが生成され、 クラスファイルのバージョンは 50.0 となる。 これは、JDK 6 および JDK 7 で実行できる。 一方、JRuby 1.7.0-dev では invokedynamic を使ったコードを生成する。 したがって、クラスファイルのバージョンは 51.0 となる。 これは、JDK 6 では実行できず、JDK 7 (以降)でのみ実行できる。 ■ Constant Pool のエントリ数
Invokedynamic 関連の情報が格納されるので JRuby 1.7.0-dev が数が多い。 ■ Code Size(bytecode命令の数)
■ invoke* 命令の数
全体の命令数および、invoke*命令数の差は、おおそよ、次のことが言えそう。
まずは、invokedynamic が、どう動くのかを実際に見たかったので、 jdb で stepi をしてみたのだけど、 想定は、invokedynamic で stepi したら、ちょっと時間がかかって、 呼出し先(ターゲットメソッド)の先頭でプロンプトが帰ってくるのかなと思ってたので、 実際の途中経過を追いかけることができたのは、期待以上。 でも、それだけが目的ではなく、もう一つの目的がある。 それは、invokedynamic を使うとコードの最適化がされやすくなる、 よって、実行が速くなるということを説明することができるのか.. できるのであれば、それを見てみたい。 そのためには、コードが 1 行の例を使っていてはダメなのは自明で、 もう少し別な例を使って、いろいろ確認してみたい。 その時は、また、つらつらと書くかもしれません。 その前に、 JJUG やら JavaOne Tokyo で情報が得られたりして ... |
| << 前記事(2012/02/17) | ブログのトップへ | 後記事(2012/02/22) >> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2012/02/17) | ブログのトップへ | 後記事(2012/02/22) >> |