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

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

オブジェクトに年齢という概念を導入します。

2010-04-20 11:59:22
Shinichi Tokunaga @deepneko

新世代オブジェクト:生成されたばかり、旧世代オブジェクト:一定の年齢に達した

2010-04-20 12:00:36
Shinichi Tokunaga @deepneko

新世代オブジェクトだけに対してGCを行えば、時間の短縮ができるはずだぜ。

2010-04-20 12:17:08
Shinichi Tokunaga @deepneko

これをマイナーGCと呼びます。

2010-04-20 12:17:29
Shinichi Tokunaga @deepneko

旧世代に対するGCはメジャーGCね。これは頻度を下げて行う。

2010-04-20 12:18:16
Shinichi Tokunaga @deepneko

まずはDavid Ungarの世代別GCから。

2010-04-20 12:21:29
Shinichi Tokunaga @deepneko

Ungarの世代別GCでは、生成領域、2つの生存領域、旧世代領域の4つに分けてヒープ領域を使います。

2010-04-20 13:23:35
Shinichi Tokunaga @deepneko

あとヒープ領域とは別に記憶集合ってのが必要だよ。

2010-04-20 13:25:06
Shinichi Tokunaga @deepneko

2つある生存領域をFrom空間とTo空間になるように、マイナーGCを行います。(どっちがFromでどっちがToかは動的に変わる)

2010-04-20 13:30:28
Shinichi Tokunaga @deepneko

もちろん生成領域のオブジェクトもTo生存領域にコピーしなきゃだめだよ。

2010-04-20 13:31:21
Shinichi Tokunaga @deepneko

一定回数のマイナーGCをくぐりぬけた者だけが旧世代領域にたどりつけるのです。

2010-04-20 13:33:10
Shinichi Tokunaga @deepneko

新世代領域のオブジェクトはルートだけじゃなくて旧世代領域からも参照される可能性があるよ。

2010-04-20 13:35:38
Shinichi Tokunaga @deepneko

マイナーGCでは旧世代領域からの参照もルートとして扱わなければいけないね。

2010-04-20 13:36:39
Shinichi Tokunaga @deepneko

記憶集合には旧世代オブジェクトから新世代オブジェクトへの参照が登録されてるよ。

2010-04-20 13:53:18
Shinichi Tokunaga @deepneko

たとえば新世代オブジェクトAを参照してる旧世代オブジェクトBがいたとしよう。

2010-04-20 13:55:30
Shinichi Tokunaga @deepneko

でもAが昇格して旧世代領域にA'としてコピーされちゃったらどうする?

2010-04-20 13:56:46
Shinichi Tokunaga @deepneko

Bがもつ参照をAからA'に書き換えられないよね。

2010-04-20 13:58:15
Shinichi Tokunaga @deepneko

だから記憶領域には参照元(新世代オブジェクトを参照している旧世代オブジェクト)を記録しておくよ。

2010-04-20 13:59:33
Shinichi Tokunaga @deepneko

図5が間違ってる・・・なんでポインタの更新が不可能なまんまなんだ・・・

2010-04-20 14:02:12
1 ・・ 6 次へ