KDOC 173: 『ガベージコレクションのアルゴリズムと実装』

CLOSE この文書のステータス

途中でわからなくなって読むのを止めた。

  • 作成
    • 2024-11-04 貴島
  • レビュー
    • 2024-11-04 貴島

概要

『ガベージコレクションのアルゴリズムと実装』はガベージコレクションを解説した本である。

メモ

  • GCを読むと、「言語処理系の理解が深まる」という副作用を得られる。言語処理系は数万行のコード群からなる巨大なプログラムだが、このように巨大なプログラムを読むときには明確な目標が1つなければ読み進めるのは難しい。穴を深く掘ろうとすれば自然とその穴の直径が広がっていくように、何か1点を深く理解していこうとすることが、全体を理解することにつながる、という(vi)
  • GCにおけるオブジェクトの意味は、「アプリケーションによって利用されるデータのかたまり」、だという(p2)
  • GCでは、ポインタが重要だという。オブジェクトが持つポインタをたどって別のオブジェクトを探すため。非ポインタに対して何もしない(p5)
  • アロケーションとは、メモリ領域上にオブジェクトを配置すること。ミューテータは新たなオブジェクトが必要になった場合、オブジェクトとして必要なサイズをアロケータに要求する。アロケータはヒープ領域上の空き領域から要求を満たすものを探し、ミューテータに返す(p8)
  • GCの世界におけるルートとは、オブジェクトのポインタをたどる際の起点となる場所、だという(p10)
  • グローバル変数領域から直接、あるいは間接的に参照されているオブジェクトを、GCは生きていると考える、という(p11)
  • 多くのオブジェクトは生成されてからすぐに死ぬという研究が多く報告されている、という。カウンタの値は0~1の範囲で変化し、5ビットのカウンタ(Sticky)がオーバーフローするようなことはまれ(p54)
  • GCにおいて、幅優先探索より深さ優先探索のほうがメモリ消費量を少なく抑えられる傾向があるので、マークフェーズで深さ優先探索がよく使われる(p14)
  • 探索を行うマークフェーズと、ゴミ領域を解放するスイープフェーズ
  • トレーシングGCの色モデル。最初の白の世界から、黒くなっていく。間に灰色がある(一般教養としてのGarbage Collection)
    GCにまだ発見されていない
    灰色
    GCに発見された。ただ、白いオブジェクトを直接指している可能性がある
    GCに発見された。直接指すオブジェクトもすでにGCに発見されている(黒か灰色)
  • CAS命令はマルチスレッド環境において、アトミックにメモリを処理する。DBのトランザクションのようなもの。CAS命令は1バイト単位でメモリ領域へアクセスするようになっている

関連

なし。