JVM チューニングの概要: 新世代のガベージ コレクション アルゴリズム

JVM チューニングの概要: 新世代のガベージ コレクション アルゴリズム

ガベージコレクションのボトルネック

従来の世代別ガベージ コレクション方式では、ある程度、アプリケーションに対するガベージ コレクションの負担が最小限に抑えられ、アプリケーションのスループットが限界まで押し上げられていました。しかし、彼が解決できない問題の 1 つは、Full GC によって引き起こされるアプリケーションの停止です。リアルタイム要件が高い一部のアプリケーション シナリオでは、GC 一時停止によって発生する要求の蓄積と要求の失敗は許容されません。このようなアプリケーションでは、リクエストの戻り時間が数百ミリ秒、場合によっては数十ミリ秒以内であることが求められる場合があります。世代別ガベージ コレクション方式でこの指標を達成するには、最大ヒープ設定を比較的狭い範囲に制限することしかできません。ただし、これによりアプリケーション自体の処理能力が制限されるため、これも受け入れられません。

世代別ガベージ コレクション方式では、リアルタイム要件が考慮され、最大一時停止時間の設定をサポートする同時実行コレクターが提供されます。ただし、世代別ガベージ コレクションのメモリ パーティショニング モデルの制限により、その効果はあまり理想的ではありません。

リアルタイム要件を満たすために (実際、Java 言語の元の設計は組み込みシステムにも適用されていました)、短い一時停止時間と大きなメモリ空間の割り当ての両方をサポートする新しいガベージ コレクション メソッドが登場しています。従来の生成方法によって引き起こされる問題を効果的に解決できます。

増分収集の進化

増分コレクション方式は、従来の世代別方式によって発生する問題を理論的に解決できます。インクリメンタルコレクションは、ヒープスペースを一連のメモリブロックに分割します。使用時には、まずその一部が使用されます(すべてが使用されるわけではありません)。ガベージコレクション中、以前使用された部分の生き残ったオブジェクトは、最後にある未使用スペースに移動されます。これにより、使用しながらコレクションする効果が得られ、従来の世代別方法では、全体が使用された後に回復が中断される状況を回避できます。

もちろん、従来の世代別コレクション方式でも並行コレクションは提供されますが、ヒープ全体をメモリ ブロックとして扱うという致命的な欠陥があります。一方では、断片化が発生します (圧縮できません)。他方では、各コレクションはヒープ全体のコレクションであり、選択を行うことはできません。一時停止時間の制御は依然として非常に弱いです。インクリメンタル方式では、メモリ空間をブロックに分割することで上記の問題を解決できます。

ガーベッジファイアスト(G1)

この部分の内容は主にこちらを参考にしています。この記事はG1アルゴリズム論文の解釈です。何も追加しませんでした。

ターゲット

設計目標の観点から見ると、G1 は大規模なアプリケーションに完全に対応しています。

非常に高いヒープ スループットをサポート-- 複数の CPU とガベージ コレクション スレッドをサポート -- メイン スレッドが一時停止しているときに並列コレクションを使用 -- メイン スレッドの実行中に同時コレクションを使用リアルタイム目標: N ミリ秒以内に最大 M ミリ秒のガベージ コレクションを実行するように構成可能

もちろん、リアルタイム要件を満たすために、G1 では従来の世代リサイクル アルゴリズムに比べてパフォーマンスが多少低下します。

アルゴリズムの詳細な説明

G1は多くの企業の強みを学び、完璧を目指して努力してきたと言えます。増分コレクションを活用し、ヒープ全体を同じサイズの領域に分割します。メモリの回復と分割はリージョンに基づいています。同時に、CMS の特性も吸収し、ガベージ コレクション プロセスをいくつかの段階に分割して、ガベージ コレクション プロセスを分散します。さらに、G1 は世代別ガベージ コレクションの考え方にも賛同しており、異なるオブジェクトには異なるライフ サイクルがあり、異なる方法で収集できると考えています。そのため、世代別ガベージ コレクションもサポートしています。リサイクル時間の予測可能性を実現するために、G1 は領域をスキャンした後、その中のアクティブ オブジェクトのサイズをソートし、最初にアクティブ オブジェクトが小さい領域を収集して、スペースをすばやく再利用します (コピーするアクティブ オブジェクトが少ない)。アクティブ オブジェクトは小さいため、そのほとんどはガベージと見なすことができます。そのため、この方法は Garbage First (G1) ガベージ コレクション アルゴリズム、つまりガベージ優先コレクションと呼ばれます。

リサイクル手順:

初期マーキング

G1 は各領域に 2 つのマーキング ビットマップを保存します。1 つは前のマーキング ビットマップ、もう 1 つは次のマーキング ビットマップです。ビットマップには、オブジェクトの開始点を指すアドレス情報のビットが含まれています。

初期マーキングを開始する前に、まず次のマーキング ビットマップを同時にクリアし、すべてのアプリケーション スレッドを停止し、各領域でルートから直接アクセスできるオブジェクトをスキャンして識別し、領域のトップ値をマーク開始時の次のトップ (TAMS) に入れて、すべてのアプリケーション スレッドを再開します。

このステップの実行をトリガーする条件は次のとおりです。

G1 は、JVM ヒープ サイズのパーセンテージしきい値 h と、(1-h)*ヒープ サイズである別の H を定義します。現在、h の値は固定されていますが、G1 は将来的にこれを動的に変更し、JVM の動作に応じて動的に調整する可能性があります。世代モードでは、G1 は u とソフト リミットも定義し、ソフト リミットの値は Hu*ヒープ サイズです。ヒープで使用されるメモリがソフト リミット値を超えると、クリーンアップが完了した後、アプリケーションで許可されている GC 一時停止時間内にこのステップができるだけ早く実行されます。純粋モードでは、G1 はマーキングとクリーンアップでリングを形成し、クリーンアップがマーキング情報を十分に活用できるようにします。クリーンアップがリサイクルを開始すると、最初にメモリ スペースを最も多く使用できる領域がリサイクルされます。クリーンアップを複数回実行した後、スペースの少ない領域がリサイクルされると、G1 はマーキングとクリーンアップで構成される新しいリングを再初期化します。

同時採点

前回の初期マーキングによってスキャンされたオブジェクトは、これらのオブジェクトの基になるオブジェクトのアクティブ ステータスを識別するためにトラバースされます。この期間中にアプリケーション スレッドによって同時に変更されたオブジェクトの依存関係は、記憶セット ログに記録されます。新しく作成されたオブジェクトは、トップ値よりも高いアドレス範囲に配置されます。これらの新しく作成されたオブジェクトのデフォルト ステータスはアクティブであり、トップ値は同時に変更されます。

最終採点一時停止

アプリケーション スレッドの記憶セット ログがいっぱいでない場合は、いっぱいになった RS バッファーには格納されません。この場合、これらの記憶セット ログに記録されたカードの変更は更新されるため、この手順が必要になります。この手順で実行する必要があるのは、アプリケーション スレッドで記憶セット ログの内容を処理し、それに応じて記憶セットを変更することです。この手順では、アプリケーションを一時停止して並行して実行する必要があります。

ライブデータのカウントとクリーンアップ

G1 では、クリーンアップ ステップは必ずしも最終マーキング一時停止の実行後に実行されるわけではないことに注意してください。このステップではアプリケーションを一時停止する必要があるため、準リアルタイム要件を満たすには、G1 はユーザーが指定した最大 GC 一時停止時間に基づいてクリーンアップをいつ実行するかを適切に計画する必要があります。さらに、このステップの実行をトリガーする状況は他にもいくつかあります。

G1 はコピー方式を使用して収集し、その都度「to space」のスペースが十分であることを確認する必要があります。そのため、G1 が採用する戦略は、使用済みメモリ スペースが H に達したときに Cleanup ステップを実行することです。完全ヤング世代モードと部分ヤング世代モードの G1 では、Cleanup の実行をトリガーする状況もあります。完全ヤング モードでは、G1 はアプリケーションの許容可能な一時停止時間とヤング リージョンのリサイクルに必要な時間に基づいて、ヤング リージョンの数を推定します。JVM 内のオブジェクトに割り当てられたヤング リージョンの数がこの値に達すると、Cleanup が実行されます。部分ヤング モードでは、アプリケーションの許容可能な一時停止時間の範囲内で可能な限り頻繁に Cleanup が実行され、ヤングでないリージョンの Cleanup は最大限に実行されます。

見通し

将来的には、JVM のチューニングでは G1 アルゴリズムにさらに重点を置く必要があるかもしれません。

オリジナルリンク: http://pengjiaheng.iteye.com/blog/548472

【編集者のおすすめ】

  1. JVM チューニングの概要: 一般的な構成例
  2. JVM チューニングの概要: 世代別ガベージ コレクションの詳細
  3. JVM チューニングの概要: ガベージ コレクションが直面する問題
  4. JVM チューニングの概要: 基本的なガベージ コレクション アルゴリズム
  5. JVM チューニングの概要: いくつかの概念

<<:  簡単なアルゴリズムからアセンブリ言語の予備的研究

>>:  JVM チューニングの概要: 基本的なガベージ コレクション アルゴリズム

ブログ    
ブログ    
ブログ    

推薦する

AIを活用してよりスマートな電子データ交換を実現

電子データ交換 (EDI) の歴史は、企業がより効率的に電子的にデータを交換する方法を模索し始めた ...

ドローンの脅威と脆弱性評価に関する簡単な説明

[[411760]] Vol.1 背景ドローンの開発は大きな技術的進歩です。ドローンは、娯楽や商業用...

自動運転の4つの主要技術の簡単な分析

2017年5月に世界保健機関が発表したデータによると、世界中で毎年約125万人が交通事故で亡くなって...

ディープラーニングとデータセンターの関係

ディープラーニングは、教師なし特徴学習または特徴学習とも呼ばれ、人工知能の研究分野の 1 つであり、...

Appleは、インダストリー4.0の発展を加速するために韓国で初の中小企業スマート製造フォーラムを開催した。

Appleの技術と製品は現在、製造業で広く利用されています。同社は最近、アジア太平洋地域の製造チェ...

LeCun は AGI を予測します: 大規模モデルと強化学習はどちらもランプです!私の「世界モデル」は新しい道です

現代の AI 界で最も有名な巨匠の一人であり、Meta の AI 研究所の魂である Yann LeC...

...

推理力が2倍にアップ!プリンストン大学と北京大学の卒業生がロング「メデューサ」を提供、33Bモデルは13Bと同等の速さ

LLM アーキテクチャに固有のメモリ制限により、生成は遅く、コストがかかります。この点に関して、多く...

軍用殺人ロボットは人類の救世主か悪魔か?

[[230142]] 「リトルビー」殺人ロボットの背後にあるブラックテクノロジー学生たちが席に座っ...

DAMOアカデミーが大規模モデルテストベンチマークを発表: GPT-4はかろうじて合格、他のモデルはすべて不合格

ビッグモデルの発展、特に最近のさまざまなオープンソースのビッグモデルのリリースにより、さまざまなモデ...

2030年にAIは人間のためにどんな仕事を創出できるでしょうか?

[[201234]]編集者注: 人工知能は多くの人の仕事を奪うだろう、これはメディアの報道でも事実...

百度、599ドルのスマートビデオスピーカーを発売

[元記事は51CTO.comより]「アリスマートスピーカーTmall Genie原価499元、クーポ...

アクセンチュア:AIが新しいUIとなり、7年後にはスクリーンレス時代が到来

編集者注: Amazon の Echo スマート スピーカーや自動運転車などのスクリーンレス ユーザ...

ビッグデータが地球を救う10の方法

近年、多くの物事の成功はテクノロジーの進歩によるものと言えます。その一つは、気候変動のリスクから地球...