groovy, rhino, jython, jrubyの実行速度比較

Djangoを触っていたら、Strutsにそのまま戻るのがちょっとつらくなってきたので、Java上で動くスクリプト言語を取り込む方法を模索中。

というわけで、まずは各スクリプトの速度比較を行った。
ベンチマークを取るのに利用したのは下記ページのテストソース。
http://www.javaworld.com/javaworld/jw-03-2005/jw-0314-scripting.html

テストは4つ
alloc array: 100,000個の要素を持つリストの各要素を初期化
alloc matrix: 500個の要素を持つ500個のリストを初期化
compare: 1,000,000個の整数を比較
count: 1から1,000,000までをカウントアップ

それぞれ100回実行して、max/min/averageを記録。結果の単位はms(ミリ秒)。
ソース: script-benchmark-2006-10-09.zip

環境は、
OS: Mac OS X 10.4.8
CPU: Intel Core Duo 2GHz
Memory: 2GB
Java: 1.5.0_06
groovy: 1.0-JSR-06
rhino: 1_6R4
jython: 2.2a1
jruby: 0.9.0



groovyの速度は微妙。一応バージョン2から速度改善を行うらしいが、まだ1のリリースも住んでいないので、当分この速度のままであることは覚悟する必要がある。groovyは簡単にJavaバイトコードコンパイルできる。しかし、コンパイルしたclassファイルを直接実行してもインタプリタで実行したものに比べ、10ms程度早くなるなるだけだった。

LanguageJavagroovyrhinojythonjruby
alloc arraymax1329063753872025
min955031341591709
average97.67529.86141.49201.011746.1
alloc matrixmax949311103535768
min2767811705216
average3.86826.2102.0195.795528.97
comparemax6195019180721203
min3177612656318679
average3.71834.16137.63573.2318970.76
countmax314814038712208
min1568920511594
average1.8962.0292.53211.8311819.82

Javaとの実行時間比は:
groovy: 約5.5〜500倍
rhino: 約1.5〜50倍
jython: 約2〜150倍
jruby: 約20〜6000倍
となる。