GCの話 @Niigata.LL

Post on 24-Jun-2015

303 views 1 download

description

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

Transcript of GCの話 @Niigata.LL

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

Niigata.LL 2013/3/23

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

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

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

• NUT

• Objective-C, Python

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

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

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

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

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

3つの基本アルゴリズム

•マークスイープGC

•参照カウント

•コピーGC

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

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

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

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

辿り着けるオブジェクト

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

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

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

生きてる

死んでる

Aさん

元となる場所

Bさん

Dさん

マークスイープGC•長所

•実装が容易

•短所

•ヒープが断片化する

•アロケーションが遅い

3つの基本アルゴリズム

•マークスイープ

•参照カウント

•コピーGC

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

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

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

1

1

2

1

1

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

1

1

2

1

1

Bを参照するのやめるわ

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

1

1

2

1

1

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

0

1

2

1

1

!!

Aさん

元となる場所

Cさん

Dさん

Eさん

1

2

1

1

参照カウント• 長所

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

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

• 短所

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

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

• 実装が面倒

3つの基本アルゴリズム

•マークスイープ

•参照カウント

•コピーGC

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

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

•元の領域を全て破棄

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Aさん

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Aさん

Bさん

Aさん

元となる場所

Bさん

Cさん

Dさん

Eさん

Aさん

Bさん

Dさん

Aさん

元となる場所

Bさん

Dさん

Aさん

元となる場所

Bさん

Dさん

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

コピーGC•長所

•ヒープが断片化しない

•アロケーションが速い

•短所

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

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

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

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

まとめ

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

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