LoginSignup
11
11

More than 5 years have passed since last update.

Java7のRhinoとJava8のNashornのベンチを取ってみる

Posted at

Java8の InvokeDynamic の検証で作られたというNashornがRhinoより早くなったとのことで、早速比べてみる。

それぞれの実装

Rhino

Java7までは、Rhinoを使ったコマンド行スクリプトシェルが、binの下に、jrunscriptという名前である。

詳しくはこちら。
jrunscript - コマンド行スクリプトシェル

Nashorn

Java8からNashorn実装のコマンド行スクリプトシェルがjrunscriptに変わってjjsとして置き換わった。

詳しくはこちら。

jjs

ベンチーマーク

ベンチマークするために、Google V8のベンチマークを実行してみる。

git clone git://github.com/v8/v8.git
cd benchmarks

cloneしてきた直下にbenchmarksというディレクトリがありその下にベンチマーク用のスクリプトがある。

そのなかの、run.jsを食わせる。
これです。
https://github.com/v8/v8/blob/master/benchmarks/run.js

計測

run.jsでのベンチマークはいくつかあり、それぞれ、
Richards、DeltaBlue、Crypto、RayTrace、EarleyBoyer、RegExp、Splay、NavierStokes
Octaneと同じもののよう。
詳細はこちら

自分の環境では以下の結果に

$ /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/jjs run.js
Richards: 1104
DeltaBlue: 112
Crypto: 476
RayTrace: 435
EarleyBoyer: 664
RegExp: 245
Splay: 1043
NavierStokes: 883
----
Score (version 7): 499

$/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/jrunscript -DXmx=2024m -f run.js
Richards: 16.5DeltaBlue: 16.8Crypto: 13.4RayTrace: 60.2EarleyBoyer: 59.7RegExp: TypeError: Cannot find default value for object.java.lang.IllegalStateException

ただし、jrunscriptはうまく改行されないのと、RegExpでIllegalStateExceptionで終了してしまうので、それ以降の値を比較できない。
-Xmxを指定しているのは、OOMが起きてしまうから。もっと少なくてもいいかもしれない。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11