Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
ガーベジコレクション⼊⾨ (1)
Sakai Lab B4 / Rei Shimizu(@_iy4)
ガーベジコレクションの⽬的
´ ヒープ領域に配置されたオブジェクトの管理
1. 参照されていないオブジェクトを開放する
2. ポインタの貼り替えを⾏う
3. ヒープ領域の拡張
ヘッダフィールド
参照されていないオブジェクト
ルートオブジェクト
´ 全てのオブジェクトの起点となるオブジェクト
´ 静的領域 / スタック領域 に存在
ヘッダフィールド
ヒープ領域
マークアンドスイープGC
´ ⽣きているオブジェクトを回収するマークフェーズ
1. ルートオブジェクトから再帰的にポインタを辿る → 辿れるということは⽣存している
2. ⽣存しているオブジェクトにはマークビットを⽴てる
´ ヒープ領域の再配置...
ヘッダフィールド
ヒープ領域
ヘッダフィールド
ヒープ領域
✔ ✔
✔ ✔
ヘッダフィールド
ヒープ領域
フリーリスト
アロケーション / チャンクの結合
´ アロケーション
• フリーリストをたどり、要求されているオブジェクトサイズより⼤きいサイズのチャンクを返す
• 返されたチャンクを分割し、要求されるオブジェクトサイズのみ割当を⾏い、残りはフリーリストに戻...
マークアンドスイープGCのデメリット
´ フラグメンテーション問題
• アロケーション時にチャンクはどんどん細分化される
• ⼩さすぎるチャンクは割り当てられない → フラグメンテーションの発⽣
• 同様の問題はファイルシステムでも⾒られる
´...
複数フリーリストの利⽤
´ 通常のフリーリストには任意のサイズのチャンクが接続されている
´ サイズ毎に複数のフリーリストを容易することでチャンクの探索時間を削減
´ サイズをキーとしたハッシュマップのような感じ
´ ある⼤きさ以上のフリーリス...
BiBOP法
´ ヒープ領域をサイズに従ってブロック化
´ ⼀つのブロックには同⼀のサイズのオブジェ
クトしか存在しない
´ サイズに従ってフリーリストを⽤意 → 複数フ
リーリストとの組み合わせ
フリーリスト
(ワード⻑1)
フリーリスト
(...
ビットマップマーキング
´ ヒープ領域内のオブジェクトヘッダを書き換えるとコピーが発⽣する → ヒープ領
域外でマーク情報を管理
´ 外部のビットマップテーブルでマーキング情報を管理
´ オブジェクトが参照されている場合はフラグビットを⽴てる
...
遅延スイープ
´ アロケーション時にフリーリストを線形探索せずに、スイープ操作を実⾏して要
求されるサイズ以上のチャンクが⾒つかったらそれを返す
´ いわゆる遅延評価のようなものなので、GCの最⼤停⽌時間が短縮
参照カウント式GC
´ 各オブジェクトは参照カウンターを持つ
´ 参照カウンターは「そのオブジェクトを指し⽰すポインタの数」を⽰している
´ 参照カウンターが0になった瞬間、死んだオブジェクトとしてフリーリスト⼊り
´ 死んだオブジェクトの⼦オ...
ヒープ領域
1 1
1 1 1
ヒープ領域
0 1
1 1 1
1
ヒープ領域
0 1
1 1 1
1
ヒープ領域
0 1
1 1 1
1
フリーリスト
参照カウント式GCのデメリット
´ ポインタの更新頻度が増えるとカウンタの増減処理も増える → 無視できないオー
バーヘッド、特にルートのポインタは頻繁に更新される
´ 最悪ケースでは、ヒープ上の全てのオブジェクトから参照される → カウンター...
遅延参照カウント法
´ ルートからの参照オブジェクトが変化しても、カウンターを即座にインクリメン
トしない
´ デクリメント時に、参照カウンターが0になったオブジェクトをゼロカウントテー
ブルに繋ぐ
´ オブジェクトの追加時に、フリーリストから...
ヒープ領域
1 1
1 1 1
ヒープ領域
0 1
1 1
0
インクリメントしない
・・・ゼロカウントテーブル
1
ヒープ領域
0 1
1 1
1
インクリメント
・・・ゼロカウントテーブル
割り当て時
フリーリスト
ゼロカウントテーブルからフリーリスト拡張
0
0
ヒープ領域
1
1 1
1
・・・ゼロカウントテーブル
割り当て時
0
1
遅延参照カウント⽅式のデメリット
´ ゴミがすぐに回収されない
´ ゼロカウントテーブルのスキャンによる最⼤停⽌時間の増⼤
Sticky 参照カウント法
´ カウンタービットを多めに確保する必要がある問題を解決する
´ ビット数を制限、オーバーフローしても無視
´ 多くのオブジェクトは⽣成された直後に死ぬと⾔われるので、オーバーフローす
るほど参照されるオブジェクト...
参考⽂献
´ 中村成洋, 相川光, ガーベジコレクションのアルゴリズムと実装, 秀和システム,
p12-54
Nächste SlideShare
Wird geladen in …5
×

von

ガーベジコレクション入門 その1 Slide 1 ガーベジコレクション入門 その1 Slide 2 ガーベジコレクション入門 その1 Slide 3 ガーベジコレクション入門 その1 Slide 4 ガーベジコレクション入門 その1 Slide 5 ガーベジコレクション入門 その1 Slide 6 ガーベジコレクション入門 その1 Slide 7 ガーベジコレクション入門 その1 Slide 8 ガーベジコレクション入門 その1 Slide 9 ガーベジコレクション入門 その1 Slide 10 ガーベジコレクション入門 その1 Slide 11 ガーベジコレクション入門 その1 Slide 12 ガーベジコレクション入門 その1 Slide 13 ガーベジコレクション入門 その1 Slide 14 ガーベジコレクション入門 その1 Slide 15 ガーベジコレクション入門 その1 Slide 16 ガーベジコレクション入門 その1 Slide 17 ガーベジコレクション入門 その1 Slide 18 ガーベジコレクション入門 その1 Slide 19 ガーベジコレクション入門 その1 Slide 20 ガーベジコレクション入門 その1 Slide 21 ガーベジコレクション入門 その1 Slide 22 ガーベジコレクション入門 その1 Slide 23 ガーベジコレクション入門 その1 Slide 24 ガーベジコレクション入門 その1 Slide 25 ガーベジコレクション入門 その1 Slide 26 ガーベジコレクション入門 その1 Slide 27
Nächste SlideShare
What to Upload to SlideShare
Weiter
Herunterladen, um offline zu lesen und im Vollbildmodus anzuzeigen.

0 Gefällt mir

Teilen

Herunterladen, um offline zu lesen

ガーベジコレクション入門 その1

Herunterladen, um offline zu lesen

ガーベジコレクションのお話

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen
  • Gehören Sie zu den Ersten, denen das gefällt!

ガーベジコレクション入門 その1

  1. 1. ガーベジコレクション⼊⾨ (1) Sakai Lab B4 / Rei Shimizu(@_iy4)
  2. 2. ガーベジコレクションの⽬的 ´ ヒープ領域に配置されたオブジェクトの管理 1. 参照されていないオブジェクトを開放する 2. ポインタの貼り替えを⾏う 3. ヒープ領域の拡張 ヘッダフィールド 参照されていないオブジェクト
  3. 3. ルートオブジェクト ´ 全てのオブジェクトの起点となるオブジェクト ´ 静的領域 / スタック領域 に存在 ヘッダフィールド ヒープ領域
  4. 4. マークアンドスイープGC ´ ⽣きているオブジェクトを回収するマークフェーズ 1. ルートオブジェクトから再帰的にポインタを辿る → 辿れるということは⽣存している 2. ⽣存しているオブジェクトにはマークビットを⽴てる ´ ヒープ領域の再配置を⾏うスイープフェーズ 1. ヒープ領域を⾛査する。ここでマークビットが⽴っているオブジェクトは次のGCに備えてマークビット を外す 2. ⽴っていないオブジェクトは「フリーリスト」に繋ぐ。アロケーション時にフリーリストを辿ることで チャンクを再利⽤
  5. 5. ヘッダフィールド ヒープ領域
  6. 6. ヘッダフィールド ヒープ領域 ✔ ✔ ✔ ✔
  7. 7. ヘッダフィールド ヒープ領域 フリーリスト
  8. 8. アロケーション / チャンクの結合 ´ アロケーション • フリーリストをたどり、要求されているオブジェクトサイズより⼤きいサイズのチャンクを返す • 返されたチャンクを分割し、要求されるオブジェクトサイズのみ割当を⾏い、残りはフリーリストに戻す ´ チャンクの結合 • スイープ時に死滅オブジェクトが連続していた場合、それらを繋げてフリーリストにつなげる
  9. 9. マークアンドスイープGCのデメリット ´ フラグメンテーション問題 • アロケーション時にチャンクはどんどん細分化される • ⼩さすぎるチャンクは割り当てられない → フラグメンテーションの発⽣ • 同様の問題はファイルシステムでも⾒られる ´ 遅い • 参照関係にあるオブジェクトが遠くに配置される → 参照局所性の低下 • フリーリストを線形探索するためアロケーションが遅い ´ Copy On Writeとの相性が悪い • Linuxカーネルにおいては、⼦プロセスに書き込みが発⽣するまで親プロセスとメモリを共有 • マークビットの存在により、マーク時にかならずメモリのコピーが発⽣する
  10. 10. 複数フリーリストの利⽤ ´ 通常のフリーリストには任意のサイズのチャンクが接続されている ´ サイズ毎に複数のフリーリストを容易することでチャンクの探索時間を削減 ´ サイズをキーとしたハッシュマップのような感じ ´ ある⼤きさ以上のフリーリストはまとめて扱う → メモリ空間の節約 ´ ⼤きなサイズのアロケーションはほとんど発⽣しないため、これで問題ない
  11. 11. BiBOP法 ´ ヒープ領域をサイズに従ってブロック化 ´ ⼀つのブロックには同⼀のサイズのオブジェ クトしか存在しない ´ サイズに従ってフリーリストを⽤意 → 複数フ リーリストとの組み合わせ フリーリスト (ワード⻑1) フリーリスト (ワード⻑2)
  12. 12. ビットマップマーキング ´ ヒープ領域内のオブジェクトヘッダを書き換えるとコピーが発⽣する → ヒープ領 域外でマーク情報を管理 ´ 外部のビットマップテーブルでマーキング情報を管理 ´ オブジェクトが参照されている場合はフラグビットを⽴てる 10 0 001・・・ビットマップテーブル ヒープ領域 obj_num = 何番⽬のオブジェクトか︖ Index = obj_num / WORD_SIZE offset = obj_num / WORD_SIZE 実際は⼆次元配列のようになっており、indexとoffsetでアクセス
  13. 13. 遅延スイープ ´ アロケーション時にフリーリストを線形探索せずに、スイープ操作を実⾏して要 求されるサイズ以上のチャンクが⾒つかったらそれを返す ´ いわゆる遅延評価のようなものなので、GCの最⼤停⽌時間が短縮
  14. 14. 参照カウント式GC ´ 各オブジェクトは参照カウンターを持つ ´ 参照カウンターは「そのオブジェクトを指し⽰すポインタの数」を⽰している ´ 参照カウンターが0になった瞬間、死んだオブジェクトとしてフリーリスト⼊り ´ 死んだオブジェクトの⼦オブジェクトも全て死んだオブジェクトとなる
  15. 15. ヒープ領域 1 1 1 1 1
  16. 16. ヒープ領域 0 1 1 1 1 1
  17. 17. ヒープ領域 0 1 1 1 1 1
  18. 18. ヒープ領域 0 1 1 1 1 1 フリーリスト
  19. 19. 参照カウント式GCのデメリット ´ ポインタの更新頻度が増えるとカウンタの増減処理も増える → 無視できないオー バーヘッド、特にルートのポインタは頻繁に更新される ´ 最悪ケースでは、ヒープ上の全てのオブジェクトから参照される → カウンター ビットを多めに確保する必要がある ´ 循環参照が回収出来ない 1 1 N 循環参照
  20. 20. 遅延参照カウント法 ´ ルートからの参照オブジェクトが変化しても、カウンターを即座にインクリメン トしない ´ デクリメント時に、参照カウンターが0になったオブジェクトをゼロカウントテー ブルに繋ぐ ´ オブジェクトの追加時に、フリーリストからチャンクが取得出来なかった場合は ゼロカウントテーブルをスキャンしてフリーリストを拡張 → ここが遅延要素 ´ スキャン時にルートから参照されているオブジェクトのインクリメントを⾏う
  21. 21. ヒープ領域 1 1 1 1 1
  22. 22. ヒープ領域 0 1 1 1 0 インクリメントしない ・・・ゼロカウントテーブル 1
  23. 23. ヒープ領域 0 1 1 1 1 インクリメント ・・・ゼロカウントテーブル 割り当て時 フリーリスト ゼロカウントテーブルからフリーリスト拡張 0 0
  24. 24. ヒープ領域 1 1 1 1 ・・・ゼロカウントテーブル 割り当て時 0 1
  25. 25. 遅延参照カウント⽅式のデメリット ´ ゴミがすぐに回収されない ´ ゼロカウントテーブルのスキャンによる最⼤停⽌時間の増⼤
  26. 26. Sticky 参照カウント法 ´ カウンタービットを多めに確保する必要がある問題を解決する ´ ビット数を制限、オーバーフローしても無視 ´ 多くのオブジェクトは⽣成された直後に死ぬと⾔われるので、オーバーフローす るほど参照されるオブジェクトが⽣まれることは稀 ´ 少量の死滅オブジェクトの残留は許容 ´ マークアンドスイープGCとのあわせ技
  27. 27. 参考⽂献 ´ 中村成洋, 相川光, ガーベジコレクションのアルゴリズムと実装, 秀和システム, p12-54

ガーベジコレクションのお話

Aufrufe

Aufrufe insgesamt

165

Auf Slideshare

0

Aus Einbettungen

0

Anzahl der Einbettungen

7

Befehle

Downloads

1

Geteilt

0

Kommentare

0

Likes

0

×