bindingを書いていて、やっぱりGC周りではまってしまった。rootからの参照を一度に消されるとどうしようもない。そこで試しに以下のようなコードを書いてみたところうまくいった。obj5]以下軽く解説。OrderedFinalizerに解放順序を指定したいオブジェクトへのリファレンスを保持させる。reference(つまりobject_id)で持つ。referenceなオブジェクトが解放されていたら、次のオブジェクトの参照をweakにする。OrderedFinalizerはat_exitで参照されているので、Ruby界では最後まで生き残る。stepを各GC毎に呼ぶのが理想なのだが、そんなイベントはないよなぁ。今回の用途には足るんだけど、今のままだと、最後までいくらかのオブジェクトを保持してしまう。obj1からobj2へのリファレンスがあったりすると無限ループになるし、[true]とか渡してやるとかも困る。