チケット #2328 が更新されました。 (by _ wanabe)
ファイル test.rb 追加
ファイル log.txt 追加
> 私は思いつきません。ベンチマーク(こんなケースでこんなに改善
> とか、こんなケースでは悪くならないとか)があると採用しやすい
> と思います。
ありがとうございます。改善される例とその実行結果を添付しました。
悪くならないケースはそれらしいものが思いつきませんでした。すみません。
malloc/realloc の後に、1MB の文字列を 2000 個生成しています。
リネームの都合上 miniruby ですが、恐らく ruby でもあまり変わらないと思います。
-v は、いずれも ruby 1.9.2dev (2009-11-02 trunk 25630) [i386-mingw32] です。
まとめると、以下のような結果になりました。
メモリの潤沢な環境では、数値をいじらないと差が出ないかもしれません。
通常の miniruby, 大量 realloc 後: 277 秒(GC: 12 回)
パッチ 1 適用時, 大量 realloc 後: 10 秒(GC: 286 回)
パッチ 2 適用時, 大量 realloc 後: 285 秒(GC: 13 回)
両パッチ 適用時, 大量 realloc 後: 10 秒(GC: 286 回)
通常の miniruby, 大量 malloc 後: 141 秒(GC: 30 回)
パッチ 1 適用時, 大量 malloc 後: 155 秒(GC: 30 回)
パッチ 2 適用時, 大量 malloc 後: 27 秒(GC: 66 回)
両パッチ 適用時, 大量 malloc 後: 29 秒(GC: 66 回)
なお手元では、両パッチ適用後 make test-all が 3722 秒 から2435 秒になりました。
(ブロックしてしまうので test_io.rb の test_dup_many はスキップしていますが)
----------------------------------------
http://redmine.ruby-lang.org/issues/show/2328----------------------------------------
http://redmine.ruby-lang.org