Groovy2 indyのベンチマーク

| コメントをどうぞ

UUURRRRYYYYYYYYYYYY!
 
 
最近Groovyづいているので、グルーヴ感満載ではじめてみようと思い立ったのですが、どうやら大失敗のようですね。
こんにちは。DiceK Mikamiです。

さて、Groovyはバージョン2.0からJava7のinvoke Dynamicに対応するようになりました。
そこでinvoke Dynamicによって最適化されたのだから早くなってるに違いないと思いまして、Groovy2のベンチマークを共有してみたいと思います。
invoke Dynamicがよくわからない方は、参考URLをチェックしてみてください。
 
 

検証環境

OS: CentOS 6.2 (VM)
JDK: OpenJDK 1.7.0_05-icedtea
GDK: Groovy 2.0.2
 
 

検証方法

  1. Groovyのソースリポジトリからソースコードをダウンロード。
  2. ソースコードを解凍し、benchmarkディレクトリ内のコードを実行する。

注:実行に利用するGroovyは、ダウンロードしてきたソースコードをコンパイルしたものです。
 
 

結果

通常版: non-indyと表記
invoke Dynamic対応: indyと表記
Java: Javaと表記
各ラベルの括弧書きは、処理に利用した引数の数です。

文字列表示

アッカーマン関数

配列の足し合わせ

フィボナッチ数列

 
 

考察

自分の目を疑ってしまい5、6回試行してみたのですが、結果はどれも似たり寄ったりでした。
これはテストに重大な問題があったか、そもそもそんなもんなのか判断できませんでした。
ひとまず今回はこの結果を真摯に受け止めてみたいと思います。

Javaは言わずもがなコンパイル言語ゆえに当たり前のように最速です。
ここで気になるのは、indyとnon-indyの差なのですが、ほぼ誤差レベルだということでしょうか。
また、これ以外にもベンチマークはあったのですが、テスト内容によってはnon-indyの方が早かったりしました。
環境としてVMを利用していたということで、動作に不安定さが出たのかもしれませんが、これはほぼ変わらないと考えても構わないような気がします。

今回利用したベンチマークはGroovy2独自の静的コンパイルなどは利用していないものを使いましたので、それらと組み合わせるとまた違った結果になるかもしれません。
また、invoke Dynamicだからこそ速度差がでるといったような処理の場合ならばあるいは差が出てくるかと思います。
と言いましても、今のところ無理してJava7を利用するほどではないかと。
Groovy2のinvoke Dynamic版は正式対応リリースしているわけではありませんので、これからに期待というところかもしれません。
 
 

参考URL

Groovy
JDK 7の新機能:Java仮想マシンにおける動的型付け言語のサポート

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>