jvmガベージコレクター(G1)
***************************
g1はじめに
g1ガベージコレクターは、ヒープメモリ全体に対してガベージコレクションを実行し、ヒープメモリを複数の領域に分割し、新世代と旧世代の概念を保持し、次の特性を備えています。
並列処理:ガベージコレクション中に、複数のガベージスレッドが同時に実行され、収集の効率が向上します。
同時実行性:ガベージコレクション中に、ユーザースレッドと同時に動作できます。
スペースの並べ替え: g1ガベージコレクション中に、オブジェクトはスペースの残骸を避けるために移動されます
予測可能性: g1は、メモリが大きい領域を優先的に再利用し、すべての領域を再利用することはないため、ガベージコレクションの一時停止時間が短縮されます。
***************************
ガベージコレクションプロセス:新世代のガベージコレクション、同時マーキングサイクル、混合コレクション、フルGC
********************
新世代のガベージコレクション
新世代のガベージコレクションは、主にエデンと生存者をリサイクルします。
ガベージコレクションの前後に、エデンエリアは空になり、スペースの一部もサバイバーエリアで回復されます。
新世代のオブジェクトが高齢者エリアに入る可能性があるため、高齢者エリアが増加する可能性があります
********************
同時マークサイクル
初期マーキング:ルートノードから直接到達可能なオブジェクトをマークします。初期マーキングがガベージコレクションの新世代をトリガーする前に、初期マーキング中にユーザースレッドは実行を停止します
ルート領域のスキャン:サバイバー領域で直接到達可能な古い世代のオブジェクトをマークします。若い世代のgcがサバイバーを変更するため、若い世代のgcはこの段階で停止しますが、ユーザースレッドは正常に機能します
同時マーキング:残っているオブジェクトのヒープ全体をスキャンしてマークするこの時点で、若い世代のgcを実行でき、ユーザースレッドは正常に動作できます。
再マーキング:ユーザースレッドは同時マーキングフェーズ中に実行できるため、再マーキングによりマーキング結果が変更され、再マーキング前にスナップショットが作成され、再マーキングプロセスが高速化されます。このとき、ユーザースレッドは停止します。
専用の事前クリーニング:ユーザースレッドが停止した時点で、混合リカバリフェーズでのリサイクルのために、リサイクル可能なスペースのサイズに従って各領域をソートしてマークを付けます
同時クリーンアップ:残っているオブジェクトがない領域を回復します(残っているオブジェクトがある場合、それらは収集されません。それらのほとんどは混合回復フェーズで収集されます)。
edenエリア:若い世代のgcは最初のマークの前に実行され、edenは空になります。ユーザースレッドはリカバリ中に作業できるため、並行マークサイクルの後もedenエリアが使用されます。
エリアG:混合リカバリーフェーズでリカバリーされたエリア
********************
混合回復段階
同時マーキングサイクルはスペースの一部を再利用し、ガベージコレクションの作業の大部分は混合コレクションの段階で実行されます。
混合リサイクルは、必ずしもgとしてマークされたすべての領域をリサイクルするわけではなく、最大のメモリを持ついくつかの領域のみを最初にリサイクルできます
生き物は他のスペースに移動し、スペースの残骸を減らします
混合リサイクルは、十分なメモリ領域が解放されるまで複数回実行され、その後、新しい若い世代のGC、同時マーキングサイクルがトリガーされます
********************
フルGC
トリガー条件:新しい世代がリサイクルされる場合、生存者と古い世代は生存しているオブジェクトを格納できません。混合リサイクル段階では十分なメモリ領域を再利用できません
***************************
関連パラメーター
-XX:+ UseG1GC: g1ガベージコレクターを使用
-XX:MaxGCPauseMillis = value:GCが一時停止する最大時間
-XX:ParallelGCThreads = value:ガベージコレクションスレッドの数
-XX:InitiatingHeapOccupancyPercent =値:ヒープ使用量が同時マーキング期間をトリガー、設定値に達すると、この値があまりにも簡単にフルGCにつながるされ、頻繁に同時マーク・サイクルをトリガする小さすぎる、デフォルト値は45です