ガベージコレクションの実装って考えること多い
さて、
最近遅く帰ることが多くなりました。
まぁ忙しい時期なので仕方ありませんが。
ブログは腐らず続けていきたいので、頑張って更新します。
今日はガベージコレクション、GCについて簡単に書きます。
仕事で、あるシステムを作成していて、そこでGCのようなアルゴリズムを書いたので、ふと書こうかなと思いました。
…
ガベージコレクションとは?
wiki参照!以上!
=====○)д`);.・;゛;ブッ
=====○)д`);.・;゛;ブッ
=====○)д`);.・;゛;ブッ
…
とりあえずでwiki見てみましたが、完成度高すぎてビックリしましたね(当たり前か)
とりあえず話は戻って、
ガベージコレクションとは!
不要になって使わなくなったメモリ領域を開放する仕組みのこと
ですね。
最初にガベージコレクションを実装したのはlispだとかなんだとか。
ガベージコレクションは常にオブジェクトを見張っているため、
それなりに時間がかかる重い処理です。
C言語なんかはガベージコレクションを実装していない(ライブラリで追加可能)ので、そんじょそこらの言語よりは高速となっています。
それ故、組み込み系のシステムではC言語がよく使われていますね。
…
それではガベージコレクションって
どんなアルゴリズムで動いているのか?
代表的な例を記載しておきます。
リファレンスカウント
※時間制限ではなくカウント制ですし、爆発はしません。
予め、オブジェクトが参照される回数を記憶しておき、
その回数がゼロになったときにゼロになったオブジェクトを開放する方式
仕事で作成したGCもどきもこの方式を採用しています。
わりと単純なアルゴリズムですよね。
マークアンドスイープ
どこからも参照されていないオブジェクトを開放する方式
これは確か下記の本でも取り扱われていたアルゴリズムだったと思います、
これも単純かつ有名ですね。
プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識
- 作者: 矢沢久雄
- 出版社/メーカー: 日経ソフトウエア
- 発売日: 2007/04
- メディア: 単行本(ソフトカバー)
- 購入: 45人 クリック: 646回
- この商品を含むブログ (74件) を見る
※この本わかりやすくておすすめです。プログラムが動く仕組みを知るって大事ですよね。
コピーGC
メモリ領域を二つ用意し、片方にオブジェクトをプールし、片方に使っているオブジェクトをコピーしてから、プールしてある領域を解放する方式
これは実は知らなかったです。
2つの領域のうち、アプリが使えるのは片方のみで、
その使える片方にオブジェクトが溜まると、コピーGCの処理が走ります。
そうすると、使っていないもう片方の領域に、
使用中のオブジェクトをコピーして、使っていた領域を解放します。
そして、コピー元とコピー先の領域を入れ替えて
再びオブジェクトがいっぱいになれば、同じことが起きる。
こんな感じのアルゴリズムらしいですね。
オブジェクトを順々にコピーしていくため、
メモリの断片化が起きないのがメリットらしいです。
中々面白いなぁと思いました。
他にも世代別GCというものもあり、
これはコピーGC+マークアンドスイープのアルゴリズムのようです。
なんとなくイメージは湧きますね!
…
アルゴリズムを知っておくと、思わぬところで役に立つので、
引き出しはたくさん持っておきたいですね。
アルゴリズムイントロダクションを完読しよう!