From: Minero Aoki Date: 2002-01-30T11:51:38+09:00 Subject: [ruby-dev:15806] Re: GC after load あおきです。 In mail "[ruby-dev:15802] Re: GC after load" matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > |> からの意図的な変更のようですが、たかだか 5000 行の TMail で > |> これだけ遅くなるようだと、巨大ライブラリでは非常に厳しいと思い > |> ます。 > > えーと、確か > > * 落ちるよりマシ > * ロードはふつう繰り返さない え、たくさん require すると連続ロードになりませんか? ライブラリのロードはプログラムの最初の一回だけだから、 という意味でしょうか? あと、昨日のよりももうちょっと詳細な情報があるので参考までに 載せときます。単位は全部秒。 ruby -rtmail -e0 の時間を各バージョンで計測 1.7 0.24 1.6.6 0.18 1.6.5 0.18 1.6.4 0.11 1.6.3 0.11 同じものを GC をオフにして計測 1.7 0.10 1.6.6 0.08 1.6.4 0.07 TMail のファイルを結合したものを ruby -c (GC はオン) 1.7 0.08 1.6.6 0.06 1.6.4 0.05 まとめ StartUp Compile Evaluate GC Total 1.7 0.02 0.06 0.02 0.10 0.20 1.6.6 0.02 0.04 0.02 0.07 0.15 1.6.4 0.02 0.03 0.02 0.01 0.08 (StartUp == ruby -e0 にかかる時間。 Evaluate は module_eval のコンパイル分も含む。) ruby -rtmail 時の GC 起動回数 1.7 20 1.6.6 19 1.6.4 3 式をたくさん入れた大きなファイルひとつを ruby -c するのに かかる時間 1000 2000 3000 4000 5000 (行) ----------------------------------------------------- 1.7 0.08 0.12 0.18 0.24 0.27 1.7nogc 0.05 0.08 0.12 0.15 0.18 GC time 0.03 0.04 0.06 0.09 0.09 1.6.4 0.05 0.14 0.23 0.35 0.56 1.6.4nogc 0.03 0.06 0.09 0.10 0.12 GC time 0.02 0.08 0.14 0.25 0.44 以上の結果から、ファイルひとつの場合はおおむね 1.7 のほうが 1.6.4 よりも高速かつ線型増加ですが、ロードに限っては GC 回数が 増えるために遅くなっているのだ。と結論しました。ロードが GC を 増やしていることは、load_file() の rb_gc(); の前に puts を入れ wc -l で数えて確認しました。 ------------------------------------------------------------------- 青木峰郎