よりRubyヒープスロットを解放する戦略(メモ)

Rubyヒープスロットそれぞれに,ヒープスロット内の割り当て可能なオブジェクト数を覚えるようにする.
ここでは仮にfreeobjsとでもしましょう.
 
そして,それぞれのヒープスロットを双方向リンクで繋ぎ,freeobjsが少ない順に並べる.
並べ替えはスイープ後のタイミング.
次にRVALUEを割り当てる際にはfreeobjsが少ないヒープスロットから割り当てていく.
 
そうすると,必然的に一番使われているヒープスロットが使われるので,空のヒープスロットが出来やすいのではないかと.
そんな事をCPythonのコードを読みながら考えた.

改善されるであろう点

  • Rubyヒープスロットが解放されやすくなる
    • どの程度改善されるか?という部分は計測しないといけない
    • また,現在はフラグメンテーションによって解放されないという部分も実験しないと

不安な点

  • 解放された直後のRVALUEが割り当てられなくなるので,せっかくキャッシュにのったオブジェクトがうんぬん辺りが心配.
    • でもよく考えれば,GCではそんな事ないのか.大丈夫そう
  • ソート状態とオブジェクト数を保持するコスト
    • GC時間が少しだけ長くなる
    • これに見合った改善か?