うん、 JRubyって遅いよね

This entry was posted by on Saturday, 9 June, 2007

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/43602で、いわゆる JRuby と cruby (1.8.6) のパフォーマンス比較の議論がありますね。わたしもちょっとしたベンチマークテストは試してみたことがあるんですが、確かに JRuby は現行の Ruby 1.8.6 と比べてさえ遅くて「どうしたものなのかなあ」と思っていたところでした。とはいえ、テストはフィボナッチ数列とかそういうレベルのモノですが……。

ちなみにそのときの速度差は yarv >>> ruby 1.8.x > jruby な感じ。それと、 jruby は jvm の初期化か Ruby のランタイムのロードか何かに時間を食うのか何かわかりませんがスクリプトの起動にもちょっと時間がかかって、コマンドを叩いてから終わるまでの時間でいえば ruby 1.8.6 よりも明らかにめちゃくちゃ遅い。まあ、ちょっとしたスクリプトならともかく、エンタープライズな用途とか本格的な重い処理を考えればそういう初期化の時間は無視してもいいと思いますけれど。

もちろん「これから速くなります」っていう可能性とか、 JVM の方が jit がこなれているから凄いことになりますよとかいう話は理解可能なのですが、今後のことを言ったら ruby 1.9 以降だってどうなるかわからんわけですし……。今のところの個人的な印象としては ruby 1.9 以降の方がパフォーマンスが上という状況は、少なくともしばらく先まで変わらないんじゃないかと思いますけどね、まあ直感ですが。

あと JRuby って(試したのは 1.0RC1 とかでしたが)、バイトコードコンパイルしようとすると case 文をコンパイルできないというエラーを吐いたりして「なんじゃそりゃー」と思ったりしたんですが、本当に 1.8.6 互換なんでしょうか。いや、スクリプト実行なら実行できるからいいんですけど、マニアックな処理のところはけっこうアヤしいんじゃないかなあと思っていたり。このほど 1.0 がリリースされたらしいですが、どうなっていますかね。

そういえば今日は RubyKaigi ですか。

3 Responses to “うん、 JRubyって遅いよね”

  1. keisuken

    フィボナッチ数列だとC Rubyより若干速かったですよ。
    ちなみにjrubycはまだ未完成ですのでほとんど動きません。

  2. 向井

    そういえば RubyKaigi のログを見てみたら、 JRuby の人のベンチマークもフィボナッチ数列だったようですね。何が違うのかなあ。不思議。
    わたしがどういうプログラムを書いたか、という話はまた新しいエントリに書きたいと思います。おかしな点などをご指摘いただければ幸いです。

  3. keisuken

    なるほど、コードが違うみたいです。
    JRubyの中の人や私は$JRUBY_HOME/samples/fib.rbをベースにベンチマークしています。速くなっている理由は分岐が少ないことと、数値計算がRubyよりも速いことに起因するみたいです。またIO周りなどを工夫すると本家Rubyよりも速くなるケースを確認しています。
    JRubyがC Rubyより全般的に遅いというのは事実ですし、私も確認しています。それも気になるのですが、Java屋さんとしてはJavaと連携できるのが(むしろ)大きいと思ってます。以前のJRubyよりも2桁は速くなってますしね。
    C Rubyより遅いというのはあまり関係ないんじゃないかなと思ってます。JRubyはRubyの代わりとはちょっと違うのかなと。