kubo39's blog

ただの雑記です。

D言語のprecise(正確な) GC

(追記: 編集あり)

実は結構前に保守的なGCから正確なGCになって いた いなかった。仕組みはマーク・アンド・スィープで変わらないが性能は大幅に向上が期待できそう。

github.com

これによって、

  • メモリ確保時
    • allocatorの使い分けによる効率的なメモリ管理(それぞれのアロケータの特性が活かせる)、これは保守的GCでは安全側に倒さざるをえなかったので最大のメリットになる
    • スレッドローカルキャッシュを使うことでグローバルなGCロックを避けられる
  • ゴミ集め時
    • 並列にスキャンするようになったのでパフォーマンスが向上
    • 特定の条件を満たしていればストップ・ザ・ワールド(STW)が発生しなくなる
      • 例えば新たに追加された型レベルの仕組み isolated によって静的にスレッドローカルなヒープのみを使っているかを判定(isolatedはスレッドローカルなヒープにつく型といえる)でき、isloatedしかないと判定したときはSTWしない

わりとGoに近い感じで、アロケータの柔軟性でGoより優れていて、インクリメンタルGCによるレイテンシの仕組みはシステムプログラミング言語という特性上入れなかったという感じか。 さすがにJVMに比べると厳しいが、これまでの保守的GCに比べるとずいぶんよくなっている、はず。

(追記ここから)

まだマージされてなかった。。すまんな、、