MRI や YARV を使用しても、これ以上改善できるとは思いません。
ただし、Rubinius には組み込みのプロファイラー ( で呼び出すだけ-Xprofile
) があり、オーバーヘッドははるかに少なくなります。
また、JRuby を使用すると、これまでに作成された最高のプロファイラーを含む Java ツールの配列全体を取得できます。JRuby の特定のサポートがなくても、これらのツールは非常に役立ちます。Oracle JDKには、この非常に優れたVisualVMツールがあり、プログラムに関するあらゆる種類のものを視覚化できます(そして、JRubyプラグインもあることがわかります)。Oracle JRockit には優れたプロファイラもあります。Azul JVM には、驚くほど素晴らしいプロファイラーがあると噂されています。J9にも素晴らしいものがあると思います。もちろん、YourKitもあります。
Charles Oliver Nutter と JRuby コミュニティの他のメンバーは、最近、JRuby を使用した Ruby コードの実行時の動作を理解するための一連の記事を書きました。ほとんどの場合、これらの記事はMRI 用の memprof ライブラリへの反応として書かれたため、メモリ プロファイリングに焦点を当てる傾向がありますが、呼び出しプロファイリングに関するものもあります。
私の知る限り、MacRuby の目標の 1 つは、Ruby で XCode のランタイム理解機能 (Instruments and Co.) を使用できるようにすることでしたが、それはより長期的な目標であり、これが現在実装されているかどうかはわかりません。
Rubinius の例を次に示します。
rbx -Xprofile -e'
Hash.new {|fibs, n|
fibs[n] = if n < 2 then n else fibs[n-1] + fibs[n-2] end
}[100]
'
どちらが印刷されますか:
Total running time: 0.009895000000000001s
% cumulative self self total
time seconds seconds calls ms/call ms/call name
------------------------------------------------------------
7.59 0.00 0.00 234 0.00 0.01 Hash#find_entry
5.86 0.00 0.00 419 0.00 0.00 Hash#key_index
5.49 0.00 0.00 275 0.00 0.00 Hash::Entry#match?
4.97 0.01 0.00 234 0.00 0.02 Hash#[]
ご覧のとおり、Rubinius プロファイラーの興味深い特性の 1 つは、任意の Ruby コードをプロファイリングでき、Rubinius自体はほとんどが Ruby コードであるため、システム自体に深くプロファイリングできることです。