とりあえず現状で問題になっているもの。
eq?
なハッシュテーブル- 昇格された領域にあるオブジェクトから参照されているオブジェクトの移動
2.は昇格したオブジェクトから参照されているオブジェクトが移動した場合に起きる問題。とりあえず、理解を整理するための図が以下:
Eden | Survivor +------------------------------+------------------------------------+ | | obj B | | | +-----+ | | +----------------+------------+--* | | | +----+----+ | +-----+ +-------+ | | | obj A | | | *--+----+ obj C | | | +---------+ | +-----+ +-------+ | +------------------------------+------------------------------------+
obj B
はまぁ配列でも構造体でもなんでもいいんだけど、要するにポインタを格納するオブジェクト。っで1回目のGCで生き残って昇格したんだけど、次のGCとの合間に若い世代のオブジェクトobj A
を内に宿すことになったと。(具体的にはコードベクタが参照する識別子のルックアップを終えてglocを対象の場所に入れるとこれが起きる。まぁ、他にもあるだろう。)っで、GCが起きると困ることになる。だれが移動先を解決するのかと・・・
実際はこの手のものはある程度解決されてるんだけど、どうも見逃しがあるっぽい。
コードベクタはクロージャとVMで同じものが共有されてるから、クロージャ側だけ更新してやればいいはずなんだけどなぁ、何を見落としてるんだろう・・・
分かった、VMのスタックに詰められたPCだ。こいつが古い値を参照してるからおかしくなるんだ。これはどうしたもんかな。Cのスタックと同様保存してしまってもいい気がする。スタックだし・・・
No comments:
Post a Comment