JRubyに深刻なパフォーマンス問題?

JRubyJSONを処理するプログラムを書いてテストしてみたところ、非常にパフォーマンスが悪い。今まで持っていた「JRubyは遅い」という認識を明らかに上回るレベルの遅さだったので、Rubyと比較検証してみました。

require 'rubygems'
require 'json/pure'

def json_bench(n)
  s = "{"
  for i in 1..n
    s << ", " if i > 1
    s << "\"elem#{i}\" : \"foo\""
  end
  s << "}"

  t = Time.now
  JSON.parse(s)
  puts "#{n} elements: #{Time.now - t} sec."
end

json_bench(500)
json_bench(1000)
json_bench(1500)
json_bench(2000)

このプログラムをRubyJRubyでそれぞれ実行すると、次のような結果になりました。

> ruby -v
ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]
> ruby test.rb
500 elements: 0.016 sec.
1000 elements: 0.047 sec.
1500 elements: 0.062 sec.
2000 elements: 0.078 sec.

> jruby -v
ruby 1.8.5 (2007-11-01 rev 4842) [x86-jruby1.1b1]
> jruby -O test.rb
500 elements: 0.984 sec.
1000 elements: 3.375 sec.
1500 elements: 8.359 sec.
2000 elements: 16.079 sec.

うん、やっぱり遅すぎる。しかも処理時間がRubyでは線形増加するのに対して、JRubyではO(n^2)になっているように見えます。JRubyの基本クラス実装のどこかに問題があるんじゃないかなあ。今度、余裕があったらソースを追ってみようと思います。