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程度早くなるなるだけだった。
Language | Java | groovy | rhino | jython | jruby | |
---|---|---|---|---|---|---|
alloc array | max | 132 | 906 | 375 | 387 | 2025 |
min | 95 | 503 | 134 | 159 | 1709 | |
average | 97.67 | 529.86 | 141.49 | 201.01 | 1746.1 | |
alloc matrix | max | 94 | 931 | 110 | 353 | 5768 |
min | 2 | 767 | 81 | 170 | 5216 | |
average | 3.86 | 826.2 | 102.0 | 195.79 | 5528.97 | |
compare | max | 6 | 1950 | 191 | 807 | 21203 |
min | 3 | 1776 | 126 | 563 | 18679 | |
average | 3.7 | 1834.16 | 137.63 | 573.23 | 18970.76 | |
count | max | 3 | 148 | 140 | 387 | 12208 |
min | 1 | 56 | 89 | 205 | 11594 | |
average | 1.89 | 62.02 | 92.53 | 211.83 | 11819.82 |
Javaとの実行時間比は:
groovy: 約5.5〜500倍
rhino: 約1.5〜50倍
jython: 約2〜150倍
jruby: 約20〜6000倍
となる。