ガベージコレクションアルゴリズムの視覚化

ほとんどの開発者は、ガベージコレクションを当然のことと考えています。 これは、不要なオブジェクトを削除して定期的にメモリを解放する標準プロセスです。 しかし、アメリカのプログラマーであるケンフォックス(ケンフォックス)は、最新のガベージコレクターの「内部」を完全に理解し、見たいと考えていました。



ケンは、5種類のガベージコレクションアルゴリズムで「遊んで」、その作業を明確に示す小さなアニメーションを公​​開しました。



より大きなアニメーションはgithub.com/kenfox/gc-vizで入手できます。



インフォグラフィックの簡単な説明。 全体としての各画像は、プログラムに割り当てられたメモリです。 最初は黒、つまり未使用ですが、徐々に明るい黄色(書き込み操作)と明るい緑(読み取り操作)で強調表示され始めます。 時間の経過とともに、記録された断片は暗くなり、時間の経過とともにプロセスの進行を示します。



実行中にプログラムがメモリの個々のセクションを無視し始めることに気付くかもしれません。 それらは「ゴミ」と見なされます。



最初のアニメーションは、ガベージコレクタなしでプログラムがどのように動作するか、つまり最後にクリーニングする方法を示しています。 最も簡単な方法:プロセスが終了するまで待ってから、一度にすべてをクリーニングする必要があります。 プロセスを個別のタスクに分割する方法がある場合、これは驚くほど効果的な手法です、と著者は書いています。 これは、たとえばApache Webサーバーによって行われます。



対照的に、これは同じプログラムのように見えますが、リンクカウントテクニックを使用するガベージコレクターです。 これは、メモリ内のオブジェクトへの参照の数がカウントされ、ゼロに下がるとオブジェクトが削除される場合のもう1つの比較的単純な方法です。



リンクカウントは、さまざまなリソースマネージャーと互換性のある唯一のアルゴリズムです。



リンクカウント操作に対応するアニメーションに赤いピクセルが表示されました。 赤いフラッシュの直後にメモリ領域が解放された場合、コレクタの効率を評価できます。



著者のブログと彼のGithubページでは、メモリ内の周期構造の処理の問題を解決するMark-Sweep(右側のアニメーション )、メモリ内の移動オブジェクトとのMark-Compact( アニメーション )、コピーコレクターなどのコレクターアルゴリズムも学習できますメモリ内のオブジェクトが、より簡単な方法( アニメーション )でそれを行います。



トピックについて:

ガベージコレクション



All Articles