コンストラクタでヒープエラーが発生してもわからない件に対処するため例外のチェックを足した。JNIのAPI呼出と例外のチェックはもうセットでもいい気がするんだけど、うまくまとめらんないかね。ラップするかマクロでやるぐらいしか思いつかない。
まあそれはいいんだけど、Object.finalize()をオーバーライドしても、プロセスが終了するまでに実行されていない気がするのだが、シスプリ©Yuguiで試しているので出力されないだけかも。さて…。
Java-RubyをまたぐGC
Ruby側のGCのタイミングをObjectSpaceで拾うことができるので、そこからJava側にGC対象のオブジェクトを知らせることで何とか実現。単にJavaをラップしている代理オブジェクトはこれでいけた。
ただし、Javaから呼ばれるRubyオブジェクトについては、JavaとRubyの両方から要らないと判断されない限り捨てられない。いろいろ考えた結果、これらのオブジェクトは手動で削除することにした。
[yajbについていろいろ より引用]
究極的にはこの辺の気がするけど荷が重い。とりあえずyajbのソースを読むというTODO。