32
GCミヒャエル(@mihyaeru21) Niigata.LL 2013/3/23

GCの話 @Niigata.LL

Embed Size (px)

DESCRIPTION

Niigata.LL(2013/3/23)にて使用した資料です。GCのさわり部分だけさらっと触れる感じです。

Citation preview

Page 1: GCの話 @Niigata.LL

GCの話ミヒャエル(@mihyaeru21)

Niigata.LL 2013/3/23

Page 2: GCの話 @Niigata.LL

この発表は、ガベージコレクションのアルゴリズムを簡単に説明する物です。

過度な期待はしないでください。

Page 3: GCの話 @Niigata.LL

じこしょうかい•ミヒャエル(@mihyaeru21)

• NUT

• Objective-C, Python

•来春からモバイル系の所へ

Page 4: GCの話 @Niigata.LL

ガベージコレクション•プログラムで使用しなくなったメモリ

領域(ゴミ)を自動的に探し出して開放する仕組み

• LLでメモリ管理を意識しなくても使えるのはGCが裏で頑張っているおかげ!

•基本的なアルゴリズムの大まかな動きだけ説明する

Page 5: GCの話 @Niigata.LL

3つの基本アルゴリズム

•マークスイープGC

•参照カウント

•コピーGC

Page 6: GCの話 @Niigata.LL

マークスイープGC•生きているオブジェクトをマーク

•ヒープをスキャンしてマークが無いオブジェクトを破棄(スイープ)

Page 7: GCの話 @Niigata.LL

生きているオブジェクト?

Page 8: GCの話 @Niigata.LL

生きているオブジェクト•「元となる場所」から参照を辿って

辿り着けるオブジェクト

•プログラムでまだ利用する

•辿りつけないオブジェクトは死んでいる(ゴミ)

Page 9: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Page 10: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

生きてる

死んでる

Page 11: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Dさん

Page 12: GCの話 @Niigata.LL

マークスイープGC•長所

•実装が容易

•短所

•ヒープが断片化する

•アロケーションが遅い

Page 13: GCの話 @Niigata.LL

3つの基本アルゴリズム

•マークスイープ

•参照カウント

•コピーGC

Page 14: GCの話 @Niigata.LL

参照カウント•参照されている数を記憶

•参照数が0になったら破棄

Page 15: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Page 16: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

1

1

2

1

1

Page 17: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

1

1

2

1

1

Bを参照するのやめるわ

Page 18: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

1

1

2

1

1

Page 19: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

0

1

2

1

1

!!

Page 20: GCの話 @Niigata.LL

Aさん

元となる場所

Cさん

Dさん

Eさん

1

2

1

1

Page 21: GCの話 @Niigata.LL

参照カウント• 長所

• 不要なオブジェクトがすぐに破棄される

• 1回1回のGC時間が短い

• 短所

• 互いに参照し合うオブジェクトを破棄できない

• 余計な処理・メモリを必要とする

• 実装が面倒

Page 22: GCの話 @Niigata.LL

3つの基本アルゴリズム

•マークスイープ

•参照カウント

•コピーGC

Page 23: GCの話 @Niigata.LL

コピーGC•ヒープを半分ずつ2つの領域に分割

•生きているオブジェクトだけを使用していない方の領域にコピー

•元の領域を全て破棄

Page 24: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Page 25: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Aさん

Page 26: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Aさん

Bさん

Page 27: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Aさん

Bさん

Dさん

Page 28: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Dさん

Page 29: GCの話 @Niigata.LL

Aさん

元となる場所

Bさん

Dさん

先頭からキレイに敷き詰められている

Page 30: GCの話 @Niigata.LL

コピーGC•長所

•ヒープが断片化しない

•アロケーションが速い

•短所

•ヒープを半分しか使えない

Page 31: GCの話 @Niigata.LL

発展的なアルゴリズム•基本的な3つのGCを組み合わせる

•新しいオブジェクトを優先的にGC対象にする=世代別GC

•プログラムの実行が止まらないように少しずつGCする=インクリメンタルGC

Page 32: GCの話 @Niigata.LL

まとめ

•GCといってもいろいろある

•どれも長所短所があって万能のアルゴリズムは無い