ガベージコレクションを行きます

A.ガベージコレクションとは何ですか
むかしむかし、メモリ管理は、アプリケーションを開発するための主要な問題のプログラマーです。伝統的なシステムレベルのプログラミング言語(主にC / C ++)、一つは、メモリ管理操作の注意がアプリケーションを制御し、メモリを解放しなければなりません。わずかなミスが、それを見つけるのは困難で、見つけることが困難な、悪夢に悩まさ開発されていることをメモリリークの問題を発生させることが可能です。どのようにこの頭痛の問題を解決するには?
過去にわたり、一般的に2つのメソッドを使用します。
メモリリーク検出ツール。このツールの原理は、一般に、静的コード走査、メモリリークのコードセグメントは、スキャナが検出を介して生じることができるです。しかし、検出ツールは、必然的にのみサポート的な役割を再生することができ、記載漏れや不備となります。(Valgrindの)
スマートポインタ。これは、C ++で導入された自動メモリ管理方法で、自動メモリ管理機能を持つオブジェクトポインタが参照するオブジェクトは、プログラマは、自動リリースの目的を達成するために、メモリの解放、およびメモリについてあまり心配する必要はありません。この方法は、最も広く採用されている練習ですが、プログラマは、いくつかの学習費(ないネイティブ言語サポートのレベルを)持っている、と一度シーンはまだメモリリークを回避することはできません使用することを忘れています。
この問題を解決するため、以降のほぼすべての新しい言語(Java等、パイソン、PHPは、)自動メモリ管理の言語レベルを導入して開発するには - つまり、言語のユーザーは、メモリの解放を心配することなく、メモリとの唯一の懸念を適用しますメモリは、仮想マシン(仮想マシン)によって管理またはランタイム(実行時)に自動的に解除されます。そして、このメモリリソースはもはや行動の自動回復のために使用されていないガベージコレクションとして知られています。
 
II。一般的なガベージコレクションアルゴリズム
①参照カウント
これは最も単純なガベージコレクションアルゴリズム、スマートポインタの種類や前述と同様です。各オブジェクトの参照カウント、オブジェクトが破棄されたオブジェクトへの参照オブジェクト参照を維持またはデクリメント参照カウント、参照カウントを更新する際に参照されるオブジェクトが作成またはインクリメントされる他のオブジェクトへの割り当て。参照カウントがゼロである場合には、すぐに回復します。
この方法の利点は、メモリのシンプルかつタイムリーな回復です。このアルゴリズムは、メモリに広く使用されているようなので、上のIOSココアフレームワーク、PHP、Pythonやとしてタイト比較的高いリアルタイムシステム、です。
単純な参照カウントアルゴリズムは、重大な欠点を持っています:
頻繁に更新参照カウントは、パフォーマンスが低下します。意志がカウントされない一時的な変数頻繁に参照するための方法があるが、0に達する参照してスタックを走査することによって確認し、簡単な解決策は、次の更新に組み込まれ、隣接する基準カウント更新をコンパイラにありますそこに、一時的なオブジェクト参照があると解放するかどうかを決定します。など、他の多くの方法があります。
循環参照問題:循環参照がオブジェクトのチェーン内のオブジェクト参照との間に発生した場合に放出することができません。最も明白な解決策は、このような強力なココア弱いポインタ及びポインタポインタ型の二種類の導入として循環参照を回避することです。またはサイクルを打破するためのシステム基準サイクルの検出およびアクティブチェーン。もちろん、これはまた、ガベージコレクションの複雑さを増します。
②ラベルをクリア
何のためにマークされていない、操作が完了した後、フラグがクリアされ、すべてのオブジェクトを介してルート・タグ変数反復から始まる2段階の方法は、オブジェクトが「参考」としてマークされているアプリケーションを横断してアクセスすることができ、参照されていますメモリは、(回復が同時デフラグ操作を伴うことがある)を回収します。
このアプローチは、参照カウントの問題を解決するが、明らかな問題があります:あなたは、ガベージコレクションを起動するたびに、現在のすべての通常のコードの実行を一時停止し、回収システムの応答性が大幅に削減されます!もちろん、フォローアップを、多くの変種マーク&スイープアルゴリズム(このような三色の表記など)の最適化問題がありました。
③世代コレクション
本当の多くはそれを観察した後、オブジェクト指向プログラミング言語で、オブジェクトの大半のライフサイクルが非常に短いです。世代別コレクションの基本的な考え方は、スタックが2以上と呼ばれる世代(ジェネレーション)のスペースに分かれているということです。新しく作成されたオブジェクトがガベージコレクションの実装の繰り返しで、新生代(若い世代)(一般的には、新世代のサイズが古いのよりもはるかに小さくなります)と呼ばれるに格納され、長いライフサイクルオブジェクトが促進されます(古い時代に昇進)。そのため、新世代のガベージコレクションと二つの異なる古い時代のガベージコレクションのガベージリコールは、その空間オブジェクトのガベージコレクションのために、それぞれ、されて入ってきました。ほとんどのオブジェクトのライフサイクルは短命であるため、新世代のガベージコレクションが大きさ、さらに高い周波数新世代のガベージコレクションの古い年間数桁よりも速く、非常に高速であり、効率は、古いもののガベージコレクションよりも依然強く、 、古い時代にアップグレードする必要はありません。
 
三。GCメカニズムを行きます
ゴーGCは、多くの人々から批判当初は、開発の非常に多くの年後に行くGCはGCアルゴリズムのマイルストーンが行くで、次の、非常に良いとなっていて以来、
V1.1 STW(世界を停止します)
V1.3マークSTW、スイープパラレル
三色ラベリングV1.5
V1.8ハイブリッド・ライト・バリア
 
行く言語GCアルゴリズムは主に、マークとスイープ(マークがクリア)のアルゴリズムに基づいており、改善され、これに基づいて最適化されました。
 
①マークアンドスイープ
 
マークアンドスイープ(フラグクリア)アルゴリズム主に以下の2つのステップ
マーク(マーク):すべての到達不能のオブジェクトを検索して、マークを調理
クリア(スイープ):ラベルされたオブジェクトが回復します
 
私たちは、アルゴリズムがどのように機能するかを明確に次の図記号で説明しました:
1.フラグは、STWプログラムが中断され、及び目的プログラムとの間のこの時間関係は、以下に示すように
2.すべての到達可能なオブジェクトを見つけ、そしてマーク
3.スタート清算の完了をマーキングした後のタグなし
図に示すようにパージした後4は、オブジェクト完了する。
 
クリアラベリング問題次のアルゴリズム
プログラムを中断する必要がある場合に1.STWプログラムカトン(主な問題)を引き起こす、マークされたオブジェクトを(世界を停止)
2.マーク・ヒープ全体をスキャンする必要
3. [オブジェクトヒープの断片が生成されます
STWは、すべてのオブジェクトが変更されないこと、スキャンには、この時間は絶対に安全であるように、ユーザー・ロジックは、中断されていることを意味し、全てのコルーチンが凍結されているランタイムを指します。
 
②トライカラーマーキング
次のように明確な標識によって引き起こされる算術問題点を解決するために、GC処理を最適化するためのアルゴリズムに基づいてマーキングマーク(三色表記)アルゴリズムが提案トライ色をクリアに進み、一般的なプロセスであります
 
1.最初に、全てのオブジェクトは白です
灰色でマークされたすべての到達可能なオブジェクトを、スキャンを開始2.GC
3.オブジェクトを見つけ、その基準マークは、グレーのオブジェクトから灰色で、それ自体が黒でマーク
4.監視対象の変更、無グレーオブジェクトまで循環工程3
白いオブジェクトのリサイクル5.GC
6.白オブジェクトに最後に、すべての黒
 
三色のラベルSTW最適化問題は、それは主に以下の2点である方法です。
1.マーク・並列動作し、ユーザー・ロジック:ロジックユーザーは、多くの場合、ユーザーがマークしていることを確認し、それを並列ロジックにする方法、オブジェクト参照を生成したり、変更するのでしょうか?書き込みバリア機構の導入が変更GC中にメモリ内のオブジェクトを監視し、再マークオブジェクトをこの問題を解決するために行く、この時間は、ユーザはまた、(実際には、STW非常に短く、ロジックを実行することができ、その後、再ターゲットマーカー)、マーキング動作がある程度とユーザロジックと平行に行うことができます。
並列に2クリアとユーザ論理演算:我々は、三色の黒と白のオブジェクトは、最終的表記を残したことを知って、そして黒は、オブジェクトが黒、白クリアのみオブジェクトに触れない場合は、プログラムの目的は、次に、復元するために使用され、確かにそれは、プログラムロジックに影響を与えるので、並列に白いオブジェクトとユーザー・ロジックを削除しません。
マークアンドスイープ操作で並列処理を実現する全体的なGCの性能を向上させるために時間をSTWロジックを短縮するためにユーザを可能にすることによって。
 
オリジナルリンクします。https://blog.csdn.net/chenguolinblog/article/details/90665034

おすすめ

転載: www.cnblogs.com/leadership/p/11598875.html