この記事は、Lao Zheng 氏が執筆した WeChat パブリックアカウント「運用と保守の開発ストーリー」から転載したものです。この記事を転載する場合は、Operation and Maintenance Development Story のパブリック アカウントにお問い合わせください。 3色ラベルGC ガベージ コレクターの主な目的は、メモリのリサイクルを実現することです。このプロセスの主な 2 つのステップは、メモリのマーキングとメモリのリサイクルです。 3色ラベリング法の紹介3 色マーキング方式は、主に再利用できるメモリ ブロックを効率的にマーキングするために使用されます。 3色マーキングは推理を補助するツールとして使用されます。オブジェクト グラフのトラバース中に検出されたオブジェクトは、「訪問されたかどうか」という条件に応じて、次の 3 つの色でマークされます。
3色マーキング工程マーキングプロセス:
誤った表示誤表示とは何ですか?誤った表示は、次の両方の条件が満たされた場合に発生します。 評価者は、黒いオブジェクトから白いオブジェクトへの 1 つ以上の参照を挿入します。 評価者は、灰色のオブジェクトから白いオブジェクトへのすべての直接または間接の参照を削除します。 誤表示に対する解決策誤ったラベル付けの問題を解決するには、これら 2 つの条件のいずれかを破るだけで済みます。解決策は 2 つあります: 増分更新と Snapshot At The Beginning (STAB)。 増分更新増分更新により最初の条件が破棄されます。黒いオブジェクトが白いオブジェクトを指す新しい参照関係を挿入すると、新しく挿入された参照が記録されます。同時スキャンが完了したら、記録された参照関係の黒いオブジェクトをルートとして使用して再度スキャンします。これを簡略化すると、白いオブジェクトへの新しい参照が黒いオブジェクトに挿入されると、灰色のオブジェクトに戻ることを意味します。 オリジナルスナップショット(STAB)元のスナップショットは 2 番目の条件を破棄します。灰色のオブジェクトが白いオブジェクトを指す参照関係を削除したい場合、削除する参照が記録されます。同時スキャンが完了したら、記録された参照関係内の灰色のオブジェクトがルートとして使用され、再度スキャンされます。これを簡略化すると、参照関係が削除されているかどうかに関係なく、スキャンが開始された瞬間のオブジェクト グラフ スナップショットに従って検索が実行されることになります。 欠落と過剰入札実際には、誤ったラベル付けには、ラベルの欠落とラベルの重複の 2 種類があります。 マルチスタンダード - 浮遊ゴミマークがEに実行されると、この時点でobject.E = nullが実行される 現時点では、E/F/G は理論的にはリサイクル可能です。しかし、E は灰色に変わったため、実行は続行されます。最終結果として、それらはガベージ オブジェクトとしてマークされず、このマーク ラウンドを生き残ります。このラウンドでリサイクルされるはずのゴミがリサイクルされず、この部分を「浮遊ゴミ」と呼びます。浮遊するゴミはプログラムの正確性に影響を与えません。この「ガベージ」は、次のガベージ コレクションがトリガーされたときにのみクリーンアップされます。また、マーキング プロセス中に生成された新しいオブジェクトは、デフォルトでは黒でマークされますが、マーキング プロセス中に「ゴミ」になる可能性があります。これも浮遊ゴミの一部と考えられます。 ラベルがありません - 読み取り/書き込みバリア店舗バリアオブジェクトのメンバー変数に値を割り当てる場合、基礎となるコードは次のようになります。
いわゆる書き込みバリアは、実際には割り当て操作の前後に何らかの処理ロジックを追加するものです(AOPに似ています)
書き込みバリア + SATBオブジェクト E のメンバー変数の参照が変更された場合 (objE.fieldG = null;)、書き込みバリアを使用して、E の元のメンバー変数の参照オブジェクト G を記録できます。
[元のメンバー変数の参照が変更される前に、元の参照オブジェクトを記録する] このアプローチの考え方は、最初のオブジェクト グラフ、つまり元のスナップショット (Snapshot At The Beginning、SATB) を保持しようとすることです。ある瞬間の GC ルートが決定されると、その時点のオブジェクト グラフはすでに決定されます。たとえば、その時点で D が G を参照していた場合、後続のマーキングもその瞬間のオブジェクト グラフに従う必要があります (D は G を参照していました)。期間が変更された場合、これを記録して、マークアップが元のビューに従って維持されるようにすることができます。すべての GC ルートをスキャンする操作 (つまり、初期マーキング) には通常 STW が必要であることに注意してください。そうでない場合、同時実行中に新しい GC ルートが追加される可能性があるため、操作が完了しない可能性があります。 SATB は条件 1: [灰色のオブジェクトが白いオブジェクトの参照を切断する] を破り、ラベルが欠落しないことを保証します。 ちょっとした最適化: ガベージ コレクションの同時マーキング フェーズでない場合、またはすでにマークされている場合は、再度記録する必要がないため、簡単な判断を追加できます。
書き込みバリア + 増分更新オブジェクト D のメンバー変数の参照が変更された場合 (objD.fieldG = G;)、書き込みバリアを使用して、D の新しいメンバー変数参照オブジェクト G を記録できます。
【新しい参照が挿入されたら、新しい参照オブジェクトを記録する】このアプローチの考え方は、元のスナップショットを保持する必要はなく、新しく追加された参照については記録し、トラバーサル、つまり増分更新(Incremental Update)を待つというものです。 増分更新により条件 2: [黒いオブジェクトが白いオブジェクトを再参照する] が破られ、ラベルが失われることがなくなります。 ロードバリア
読み取りバリアは最初のステップvar objF = object.fieldG;を直接ターゲットにします。
このアプローチは保守的ですが、安全でもあります。条件 2 では、[黒いオブジェクトが白いオブジェクトを再参照する] ため、再参照の前提は、白いオブジェクトを取得する必要があることであり、この時点で読み取りバリアが作用します。 3色マーキングとガベージコレクター増分アップデート: CMS オリジナルスナップショット(STAB):G1、シェナンドー 参照ドキュメント https://www.jianshu.com/p/12544c0ad5c1 https://hllvm-group.iteye.com/group/topic/44381 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html https://tech.meituan.com/2016/09/23/g1.html 「JVM仮想マシンの徹底理解-第3版」周志明 |
<<: エッジコンピューティング、エッジネットワーキング、エッジデータ管理がどのように連携するか
>>: ガートナー:世界のパブリッククラウド支出は2022年に4,800億ドルを超える
序文:以前、「フォーラム運営シリーズ 1 (コンテンツこそが王様、それは完全な詐欺)」というタイトル...
著者は数年間、教育登録業界で働いており、10 以上の教育登録 Web サイトを管理しています。昨日、...
口コミマーケティングとは、インターネットプラットフォームを通じてオンライン口コミマーケティングの目的...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますAI、ビッ...
株洲SEO楊超は、株洲のローカルウェブサイトの最適化と百度キーワードランキングにサービスを提供してい...
Tencent QQ は、膨大なユーザーベースを持つインスタント コミュニケーション ツールとして、...
VPS (仮想プライベートサーバー) と専用サーバー (専用サーバー) の主な違いは、リソースの割り...
[[206013]]蒸気機関、発電機、コンピュータの発明からインターネットの普及に至るまで、科学技術...
BeautifulSoupはPythonを学習する際にWebページをクロールするために使用するライブ...
筆者は最近、広く流布している「ウェブサイト構築会社が儲からない理由」という記事を読み、深く感動した。...
losangelesvps には、ロサンゼルスのデータセンターに位置し、年間支払いのみで利用できる ...
クラウド コンピューティング市場はここ数年で成熟してきましたが、いくつかの問題や懸念事項により、多く...
ドバイのホスティング プロバイダーである hostsailor は、毎年恒例の VPS スーパー プ...
[[430276]]エッジ コンピューティングは、エッジ デバイス (エッジ ノードとも呼ばれます)...
【はじめに】昨日、小湘宇文はA5に「百度サーバー問題、ウェブサイトのスナップショットは実はオンライン...