読者です 読者をやめる 読者になる 読者になる

Rubiniusの世代別GCメモ

major gcのタイミング

  • heapをaddするとき
  • GC.startのとき
  • mallocのthresholdを超えたとき

なるほど.

remembered_setの刷新

remembered_set は write_barrier によって増加するが,どうやって削除されるのだろうかと思っていた.
タイミングはold領域のオブジェクトが削除される時に一緒に削除されるはず.
しかし,remembered_setはリスト構造になっている為,削除するオブジェクトと対応したものを探索にO(n)時間かかるんじゃと思った.
んー,O(n)はないよなぁ.
それでRubiniusを見ると.

  1. minor collection の際に remembered_set を消す
  2. mark 処理開始
  3. mark を付けるときにオブジェクトの remembered_set フラグを見る.
  4. フラグが立ってたら remembered_set にそのオブジェクトを追加

という感じで remembered_set を刷新してた.
ほぉ,なるほど.