@tadd false->true->false->trueとかもありえるかも。
たぶん、isConnectedとGCは関係ないかなと思ってる。
@tadd false->true->false->trueとかもありえるかも。
たぶん、isConnectedとGCは関係ないかなと思ってる。
@tadd いや、GCの方>いけじが昔「リーク」と書いたのは、isConnectedの方でGCじゃない、であってるかな。
```
var a = {};
var b = {};
a.b = b;
b.a = a;
a = null;
b = null;
```
は、JavaScriptはaもbもGCできる。
しかし、aかbがDOM elementだったら、GCできなくなる。
DOM側は、イベントハンドラに設定されてるJSのオブジェクトがGCされると困るので、イベントハンドラをGCのルートに指定する(ピンする)。
JavaScriptは、イベントハンドラから参照されてるDOM ElementがGCされると困るので、DOM側のGCのルートに指定する(ピンする)。
と、どっちのGCもルートに指定されてるaやbをGCできなくなる。
(ピンするはC#で使われてた用語だった。GCのルートに指定するが正しい?)
@tadd https://i.loveruby.net/ja/rhg/book/gc.html
RHG呼んでた。
rb_gc_markはGCの処理の中で呼んでるやつ。
rb_gc_register_addressは、次のGCの時に配慮してくれって頼むやつ。
@tadd
なつかしい。
rb_global_variable は rb_gc_register_address のaliasらしい。
https://github.com/ruby/ruby/blob/master/gc.c#L9075
M&S中に、各Decimalインスタンスがマークされる時に、dec_markが呼ばれるから、inumをマークしてるんだね。
例えば、VALUE_PINFというCの変数があって、ここに入ってるVALUEが、GCされてしまうと嫌だから、GCで消さないでおいてね、という。
https://github.com/tadd/decimal/blob/master/decimal.c#L2244
https://i.loveruby.net/ja/rhg/book/images/ch_gc_gcimage.jpg
この絵で、一番上の行に、3つ丸があって、真ん中の丸を黒くマークする時に、
右の丸もマークするのが、rb_gc_markで、
丸を縦線の左に移動するのがrb_global_variable(かrb_gc_register_address)じゃないかな。
GCの話ししてて、そういやcSRUのGCはどうやって実装したっけ?ってなって、実装したらオブジェクトに自分がルートかどうかのフラグが用意されてた。
しかも、カウンタで。
大味な実装だし、デバッグ用のアサーションが大量にあって苦労が忍ばれる。(覚えてないけど)
いっそ、筆圧検知できるペンが使えるAndroidタブレット買うか!と思ったけど、検索して出てくるやつが高すぎて退散してきた。