ガベージコレクションのアルゴリズムと実装 1,2章

ustの進みに合わせて毎週読みます。 http://www.ustream.tv/recorded/5677917
GC
2
Shinichi Tokunaga @deepneko

GCはオブジェクトの各フィールド中の値がポインタであるか非ポインタであるかを判別可能であるという前提で解説を進めます。

2010-03-26 08:13:34
Shinichi Tokunaga @deepneko

多くの言語処理系では、オブジェクトへのポインタは必ずオブジェクトの先頭アドレスを参照するようになっているので、そのような前提で~

2010-03-26 08:14:54
Shinichi Tokunaga @deepneko

ミューテータはオブジェクトの生成、ポインタの更新を行い、その裏でGCが動く。

2010-03-26 08:15:49
Shinichi Tokunaga @deepneko

ミューテータの処理が進むにつれてオブジェクト間の参照関係も変化するので、それに合わせてゴミ回収。

2010-03-26 08:16:20
Shinichi Tokunaga @deepneko

GCはミューテータの実行が開始される前にヒープ領域をまとめて確保する。

2010-03-26 08:17:19
Shinichi Tokunaga @deepneko

ヒープ領域がオブジェクトでいっぱいになると、GCが起動して空き領域の確保が行われる。

2010-03-26 08:18:25
Shinichi Tokunaga @deepneko

空き領域が確保できない場合は、ヒープ領域が拡張される…のが一般的。

2010-03-26 08:18:49
Shinichi Tokunaga @deepneko

「本書では説明を簡単にするために、ヒープ領域のサイズを定数で固定し、拡張は行いません」w

2010-03-26 08:19:27
Shinichi Tokunaga @deepneko

ミューテータから参照できる「生きているオブジェクト」、ヒープ領域中に割り当てられているがプログラムからは参照できない「死んでいるオブジェクト」

2010-03-26 08:20:40
Shinichi Tokunaga @deepneko

チャンク。GCの世界では将来的にオブジェクトとして利用するための空き領域のこと。

2010-03-26 08:22:17
Shinichi Tokunaga @deepneko

チャンク→生きているオブジェクト→ゴミ(死んでいるオブジェクト)→チャンク→… の形態を繰り返す。

2010-03-26 08:23:05
Shinichi Tokunaga @deepneko

ルート。GCの世界におけるルートは、オブジェクトのポインタをたどる際の「起点」となる部分。

2010-03-26 08:24:50
Shinichi Tokunaga @deepneko

グローバル変数の領域とヒープ領域を考えた場合、グローバル変数領域から直接、または間接参照されているオブジェクトをGCは生きていると考える。

2010-03-26 08:26:12
Shinichi Tokunaga @deepneko

スループット。総GC停止時間 / HEAP_SIZE

2010-03-26 08:27:11
Shinichi Tokunaga @deepneko

コピーGCは生きているオブジェクトが少ない場合にスループットが高い。生きているオブジェクトが多いとマークスイープGCの方がスループットが高い。

2010-03-26 08:28:32
Shinichi Tokunaga @deepneko

最大停止時間。GCによってミューテータの実行が停止する時間の最大値。

2010-03-26 08:29:21
Shinichi Tokunaga @deepneko

処理の中で何回かGCで止まると思うけど、その何回かのうちの一番長く止まった時間のこと。

2010-03-26 08:30:27
Shinichi Tokunaga @deepneko

最大停止時間は短い方がいいんだけど、スループットの高さと最大停止時間の短さはトレードオフの関係にある。

2010-03-26 08:30:56
Shinichi Tokunaga @deepneko

オブジェクトのヘッダに多くの情報をつめるとGCの効率が向上し、スループットが改善されるが、ヘッダのサイズは小さい方がよい。

2010-03-26 08:33:42
Shinichi Tokunaga @deepneko

コピーGCはヒープ領域を2等分して、どちらかを交代で使用するから、ヒープ領域の半分しか利用できない。

2010-03-26 08:34:36
Shinichi Tokunaga @deepneko

ヒープ領域を贅沢に使えればGCをすばやく終えられる。狭い領域を有効に利用しようとすると時間がかかる。

2010-03-26 08:35:31
1 ・・ 4 次へ