JRuby vs CRuby
- ref:JRuby 1.0ベンチマーク(fib(30).rb) - 航海日誌 (2007-06-12)
- ref:フィボナッチ数ベンチマーク - val it : α → α = fun
- ref:しつこく JRuby - val it : α → α = fun
Debian etch, Athlon 64 X2 4400+ で試してみた。
% ruby -v ruby 1.8.6 (2007-06-07 patchlevel 36) [x86_64-linux] % java -version java version "1.6.0" Java(TM) SE Runtime Environment (build 1.6.0-b105) Java HotSpot(TM) 64-Bit Server VM (build 1.6.0-b105, mixed mode)
fib.rb
st = Time.new def fib(n) if n < 2 n else fib(n - 2) + fib(n - 1) end end print(fib(30), "\n") en = Time.new puts (en - st)
fib2.rb
def fib(n) if n == 0 then 0 elsif n == 1 then 1 else fib(n-1) + fib(n-2) end end puts RUBY_VERSION s = Time.new p fib(30) p Time.new - s
% time ruby fib.rb 832040 1.695624 ruby fib.rb 1.69s user 0.00s system 99% cpu 1.709 total
% time ./bin/jruby -J-server fib.rb 832040 2.609 bin/jruby -J-server fib.rb 4.54s user 0.34s system 129% cpu 3.759 total
% time ruby fib2.rb 1.8.6 832040 2.038708 ruby fib2.rb 2.03s user 0.01s system 99% cpu 2.053 total
% time ./bin/jruby -J-server fib2.rb 1.8.5 832040 3.249 ./bin/jruby -J-server fib2.rb 4.71s user 0.30s system 112% cpu 4.440 total
ふーむ。Mac OS X 10.4, Dual Core Xeon だとどうか。
% ruby -v ruby 1.8.6 (2007-06-07 patchlevel 36) [i686-darwin8.8.4] % java -server -version java version "1.5.0_06" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-113) Java HotSpot(TM) Server VM (build 1.5.0_06-68, mixed mode)
% time ruby fib.rb 832040 1.143365 ruby fib.rb 1.15s user 0.00s system 99% cpu 1.155 total
% time ./bin/jruby -J-server fib.rb 832040 1.6380000000000001 ./bin/jruby -J-server fib.rb 3.17s user 0.17s system 137% cpu 2.424 total
% time ruby fib2.rb 1.8.6 832040 1.418115 ruby fib2.rb 1.42s user 0.00s system 99% cpu 1.430 total
% time ./bin/jruby -J-server fib2.rb 1.8.5 832040 2.2960000000000003 ./bin/jruby -J-server fib2.rb 3.48s user 0.13s system 108% cpu 3.321 total
うーん。どのケースにおいても、JRuby のほうが遅いなぁ。
Windows の CRuby はコンパイラの最適化がひどくて性能が出てないとかそういう話かもなぁ。