ガベージコレクションのボトルネック 従来の世代別ガベージ コレクション方式では、ある程度、アプリケーションに対するガベージ コレクションの負担が最小限に抑えられ、アプリケーションのスループットが限界まで押し上げられていました。しかし、彼が解決できない問題の 1 つは、Full GC によって引き起こされるアプリケーションの停止です。リアルタイム要件が高い一部のアプリケーション シナリオでは、GC 一時停止によって発生する要求の蓄積と要求の失敗は許容されません。このようなアプリケーションでは、リクエストの戻り時間が数百ミリ秒、場合によっては数十ミリ秒以内であることが求められる場合があります。世代別ガベージ コレクション方式でこの指標を達成するには、最大ヒープ設定を比較的狭い範囲に制限することしかできません。ただし、これによりアプリケーション自体の処理能力が制限されるため、これも受け入れられません。 世代別ガベージ コレクション方式では、リアルタイム要件が考慮され、最大一時停止時間の設定をサポートする同時実行コレクターが提供されます。ただし、世代別ガベージ コレクションのメモリ パーティショニング モデルの制限により、その効果はあまり理想的ではありません。 リアルタイム要件を満たすために (実際、Java 言語の元の設計は組み込みシステムにも適用されていました)、短い一時停止時間と大きなメモリ空間の割り当ての両方をサポートする新しいガベージ コレクション メソッドが登場しています。従来の生成方法によって引き起こされる問題を効果的に解決できます。 増分収集の進化 増分コレクション方式は、従来の世代別方式によって発生する問題を理論的に解決できます。インクリメンタルコレクションは、ヒープスペースを一連のメモリブロックに分割します。使用時には、まずその一部が使用されます(すべてが使用されるわけではありません)。ガベージコレクション中、以前使用された部分の生き残ったオブジェクトは、最後にある未使用スペースに移動されます。これにより、使用しながらコレクションする効果が得られ、従来の世代別方法では、全体が使用された後に回復が中断される状況を回避できます。 もちろん、従来の世代別コレクション方式でも並行コレクションは提供されますが、ヒープ全体をメモリ ブロックとして扱うという致命的な欠陥があります。一方では、断片化が発生します (圧縮できません)。他方では、各コレクションはヒープ全体のコレクションであり、選択を行うことはできません。一時停止時間の制御は依然として非常に弱いです。インクリメンタル方式では、メモリ空間をブロックに分割することで上記の問題を解決できます。 ガーベッジファイアスト(G1) この部分の内容は主にこちらを参考にしています。この記事はG1アルゴリズム論文の解釈です。何も追加しませんでした。 ターゲット 設計目標の観点から見ると、G1 は大規模なアプリケーションに完全に対応しています。 非常に高いヒープ スループットをサポート-- 複数の CPU とガベージ コレクション スレッドをサポート -- メイン スレッドが一時停止しているときに並列コレクションを使用 -- メイン スレッドの実行中に同時コレクションを使用リアルタイム目標: N ミリ秒以内に最大 M ミリ秒のガベージ コレクションを実行するように構成可能 もちろん、リアルタイム要件を満たすために、G1 では従来の世代リサイクル アルゴリズムに比べてパフォーマンスが多少低下します。 アルゴリズムの詳細な説明 G1は多くの企業の強みを学び、完璧を目指して努力してきたと言えます。増分コレクションを活用し、ヒープ全体を同じサイズの領域に分割します。メモリの回復と分割はリージョンに基づいています。同時に、CMS の特性も吸収し、ガベージ コレクション プロセスをいくつかの段階に分割して、ガベージ コレクション プロセスを分散します。さらに、G1 は世代別ガベージ コレクションの考え方にも賛同しており、異なるオブジェクトには異なるライフ サイクルがあり、異なる方法で収集できると考えています。そのため、世代別ガベージ コレクションもサポートしています。リサイクル時間の予測可能性を実現するために、G1 は領域をスキャンした後、その中のアクティブ オブジェクトのサイズをソートし、最初にアクティブ オブジェクトが小さい領域を収集して、スペースをすばやく再利用します (コピーするアクティブ オブジェクトが少ない)。アクティブ オブジェクトは小さいため、そのほとんどはガベージと見なすことができます。そのため、この方法は Garbage First (G1) ガベージ コレクション アルゴリズム、つまりガベージ優先コレクションと呼ばれます。 リサイクル手順: 初期マーキング G1 は各領域に 2 つのマーキング ビットマップを保存します。1 つは前のマーキング ビットマップ、もう 1 つは次のマーキング ビットマップです。ビットマップには、オブジェクトの開始点を指すアドレス情報のビットが含まれています。 初期マーキングを開始する前に、まず次のマーキング ビットマップを同時にクリアし、すべてのアプリケーション スレッドを停止し、各領域でルートから直接アクセスできるオブジェクトをスキャンして識別し、領域のトップ値をマーク開始時の次のトップ (TAMS) に入れて、すべてのアプリケーション スレッドを再開します。 このステップの実行をトリガーする条件は次のとおりです。
同時採点 前回の初期マーキングによってスキャンされたオブジェクトは、これらのオブジェクトの基になるオブジェクトのアクティブ ステータスを識別するためにトラバースされます。この期間中にアプリケーション スレッドによって同時に変更されたオブジェクトの依存関係は、記憶セット ログに記録されます。新しく作成されたオブジェクトは、トップ値よりも高いアドレス範囲に配置されます。これらの新しく作成されたオブジェクトのデフォルト ステータスはアクティブであり、トップ値は同時に変更されます。 最終採点一時停止 アプリケーション スレッドの記憶セット ログがいっぱいでない場合は、いっぱいになった RS バッファーには格納されません。この場合、これらの記憶セット ログに記録されたカードの変更は更新されるため、この手順が必要になります。この手順で実行する必要があるのは、アプリケーション スレッドで記憶セット ログの内容を処理し、それに応じて記憶セットを変更することです。この手順では、アプリケーションを一時停止して並行して実行する必要があります。 ライブデータのカウントとクリーンアップ G1 では、クリーンアップ ステップは必ずしも最終マーキング一時停止の実行後に実行されるわけではないことに注意してください。このステップではアプリケーションを一時停止する必要があるため、準リアルタイム要件を満たすには、G1 はユーザーが指定した最大 GC 一時停止時間に基づいてクリーンアップをいつ実行するかを適切に計画する必要があります。さらに、このステップの実行をトリガーする状況は他にもいくつかあります。
見通し 将来的には、JVM のチューニングでは G1 アルゴリズムにさらに重点を置く必要があるかもしれません。 オリジナルリンク: http://pengjiaheng.iteye.com/blog/548472 【編集者のおすすめ】
|
>>: JVM チューニングの概要: 基本的なガベージ コレクション アルゴリズム
世界の人工知能(AI)市場は2027年までに2,670億ドルに達すると予想されています。しかし、テク...
新しいツールは、件名や URL に基づいてソーシャル エンジニアリング攻撃を検出するのではなく、テキ...
基本概念データストレージの観点から見ると、配列ストレージとツリーストレージは相互に変換できます。つま...
[[193126]] Keras は、独自のディープラーニング モデルを迅速に構築およびトレーニング...
大規模言語モデルは優れたパフォーマンスを持ち、ゼロショットまたは少数ショットのプロンプトで新しいタス...
[[279415]]この記事のイラストはすべて、AIアートの第一人者であるドイツ人アーティスト、マ...
12月20日、2023年百度クラウドインテリジェンスカンファレンスおよびインテリジェントコンピューテ...
アルゴリズムの中心的な問題はソートと検索です。これら 2 つの分野は最も広く使用され、最も徹底的に研...
(北京、2018 年 4 月 17 日) 本日、異種コンピューティング加速の総合的なソリューションの...
Google、Facebook、Twitterなど、世界中の大手テクノロジー企業が人工知能ソリュー...
[[417396]]上海にある新エネルギー車を製造する全自動立体倉庫では、受注から製品出荷までの時間...
人工知能(AI)技術の環境への影響は最近、幅広い注目を集めていますが、これは今後10年間でAIの中心...
過去 10 年間で、食品業界では 3D プリント食品、食用センサー、ロボット調理、AR ダイニングな...