[#28290] [Oniguruma] Version 4.0.0 — "K.Kosako" <sndgk393@...>
まつもとさん、
7 messages
2006/02/02
[#28296] packing small Struct — Tanaka Akira <akr@...17n.org>
しばらく前に思い付いたのですが、メモリ消費を押さえるために、
5 messages
2006/02/04
[#28337] constant look up order in CVS HEAD — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
15 messages
2006/02/18
[#28338] Re: constant look up order in CVS HEAD
— Tanaka Akira <akr@...17n.org>
2006/02/19
In article <1140229116.805371.31930.nullmailer@x31.priv.netlab.jp>,
[#28341] Re: constant look up order in CVS HEAD
— GOTOU Yuuzou <gotoyuzo@...>
2006/02/19
In message <87lkw8xfay.fsf@m17n.org>,
[#28342] Re: constant look up order in CVS HEAD
— Yukihiro Matsumoto <matz@...>
2006/02/19
まつもと ゆきひろです
[#28347] Re: constant look up order in CVS HEAD
— Tanaka Akira <akr@...17n.org>
2006/02/20
In article <1140392909.403432.7587.nullmailer@x31.priv.netlab.jp>,
[#28348] Re: constant look up order in CVS HEAD
— Yukihiro Matsumoto <matz@...>
2006/02/20
まつもと ゆきひろです
[#28352] Re: constant look up order in CVS HEAD
— WATANABE Hirofumi <eban@...>
2006/02/20
わたなべです。
[#28360] ruby_1_8 broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
7 messages
2006/02/21
[#28371] bcc32 make error on 1.9.0 — "Nebata" <tnebata@...>
ねばたです。
8 messages
2006/02/22
[#28372] Re: bcc32 make error on 1.9.0
— KIMURA Koichi <kimura.koichi@...>
2006/02/22
木村です。
[#28386] test/drb/drbtest.rb cause file missing error — arton <artonx@...>
artonです。
6 messages
2006/02/23
[#28389] Re: test/drb/drbtest.rb cause file missing error
— Yukihiro Matsumoto <matz@...>
2006/02/24
まつもと ゆきひろです
[#28396] ruby-1.8 cvs head and 64bit time_t — arton <artonx@...>
artonです。
7 messages
2006/02/26
[#28404] irb cannot parse /\^/ — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
8 messages
2006/02/27
[#28405] Re: irb cannot parse /\^/
— keiju@... (石塚圭樹)
2006/02/27
けいじゅ@いしつかです.
[ruby-dev:28325] Re: SEGV with zlib
From:
"H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date:
2006-02-09 02:18:01 UTC
List:
ruby-dev #28325
山本です。
>GzipWriter がつながっている時には、根元から実際の IO に向かっ
>て順番に finalize していく必要があります。
>
>そうではない順に finalize してしまうと、finalize で書き込も
>うとした時には書き込み先がすでに finalize 済み (close 済み)
>で書き込めないことになります。
>
>なので、オブジェクトが生きているというだけでは十分ではありま
>せん。もちろんオブジェクトが生きているということ自体は重要で
>すが、順序を制御する仕掛けも必要になります。
>
>やるとしたら IO や GzipWriter に参照元を登録する機能をつけて、
>finalize 時にはまず参照元を finalize するのだろうか、と思っ
>ています。
>
>なお、Java でも finalizer の呼び出しの順番は不定なので、順序
>を制御する場合には自前でやらないといけないと思いますが、どう
>してんのかな。
http://www.nminoru.jp/~nminoru/programming/boehm-gc3.html
に Boehm GC がどうしているのかが載っていました。なるほど、
gc_mark と gc_sweep の間で、「マークされていない T_DATA で、
mark 関数と free 関数の両方が定義されているもの」に対して
gc_mark_children を呼べば(自分自身はマークしない)ルートに
当たる T_DATA だけマークが外れた状態になるので、順序付けでき
るんですね。(自分はマークしないというのは盲点でした)
ただ、この方法にも問題があるらしく、それも記述されています。
ナイーブにこれを実装すると、T_DATA が全くないにも関わらず、
2割ほど遅くなるという結果が出ました(消してしまったので
パッチがないのですが)
GC.disable
t = 0
1000.times do
100.times { ["1"] * 100 }
t1 = Time.now
GC.enable
GC.start
GC.disable
t2 = Time.now
t += (t2 - t1)
end
puts t
ただ思うのですが、ruby GC にはまだ改善の余地があるんじゃないでしょうか。
上の結果から、heapslot を単に走査してフラグを調べるだけでも遅くなって
いることがわかるので(要素が10000以上ある)明らかにフリーセルとわかっている
範囲は調べないようにするとか、ビットマップを用いてフリーセルを管理するとか、
T_DATA だけ別のスロットで管理するとか。(ビット演算のほうが高くついてしまう
可能性もあるし、最後のは上の問題専用ですが)