ガベージコレクションのボトルネック 従来の世代別ガベージ コレクション方式では、ある程度、アプリケーションに対するガベージ コレクションの負担が最小限に抑えられ、アプリケーションのスループットが限界まで押し上げられていました。しかし、彼が解決できない問題の 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 チューニングの概要: 基本的なガベージ コレクション アルゴリズム
電子データ交換 (EDI) の歴史は、企業がより効率的に電子的にデータを交換する方法を模索し始めた ...
[[411760]] Vol.1 背景ドローンの開発は大きな技術的進歩です。ドローンは、娯楽や商業用...
1 月 10 日、マイクロソフトとパシフィック・ノースウエスト国立研究所 (PNNL) は AI の...
2017年5月に世界保健機関が発表したデータによると、世界中で毎年約125万人が交通事故で亡くなって...
ディープラーニングは、教師なし特徴学習または特徴学習とも呼ばれ、人工知能の研究分野の 1 つであり、...
Appleの技術と製品は現在、製造業で広く利用されています。同社は最近、アジア太平洋地域の製造チェ...
現代の AI 界で最も有名な巨匠の一人であり、Meta の AI 研究所の魂である Yann LeC...
LLM アーキテクチャに固有のメモリ制限により、生成は遅く、コストがかかります。この点に関して、多く...
[[230142]] 「リトルビー」殺人ロボットの背後にあるブラックテクノロジー学生たちが席に座っ...
ビッグモデルの発展、特に最近のさまざまなオープンソースのビッグモデルのリリースにより、さまざまなモデ...
[[201234]]編集者注: 人工知能は多くの人の仕事を奪うだろう、これはメディアの報道でも事実...
[元記事は51CTO.comより]「アリスマートスピーカーTmall Genie原価499元、クーポ...
編集者注: Amazon の Echo スマート スピーカーや自動運転車などのスクリーンレス ユーザ...
近年、多くの物事の成功はテクノロジーの進歩によるものと言えます。その一つは、気候変動のリスクから地球...