JVMGCアルゴリズムおよび対応するガベージコレクタ

4個のアルゴリズム

参照カウント(循環参照を解決できません)

コピー(新世代)

マーク - 仕上げ

マーク - クリア

4つの主なガベージコレクタ

シリアルシリアルリサイクル:シングルスレッドの設計と生産環境リサイクルのためのスレッドを使用して、我々はサーバー環境に適していないすべてのユーザー・スレッドをサスペンドします

 ツバルのマルチヒット!

パラレルパラレル・リカバリ:複数のガベージコレクタスレッドを並列に実行し、ユーザのスレッドが中断され、大規模なデータに適用される科学技術計算

 

 

CMS並行マーク - スイープ:ユーザースレッドとガベージコレクションスレッドを同時に実行、ユーザスレッドを停止する必要はありませんが、高い応答時間要件のためにインターネットを使用していました。

アルゴリズム、およびいくつかのコレクターのフロントに関してはその動作過程が複雑で、全体のプロセスが分かれている - 、CMSコレクタは「スイープマーク」に基づいている上(「マークスイープ」を含む)の名前から見ることができ初期マーク(CMS初期マーク)並行マーク(CMS並行マーク)発言初期マークは、この2つのステップは、まだ「世界を停止する必要が発言(CMSの発言)同時クリア(CMS同時スイープ):を含む4つのステップ、 。 " 最初のマークがちょうどGCのルーツに直接リンクすることができますどのようなオブジェクトをマークし、非常に高速で、コンカレントマークフェーズが進行GC RootsTracingであり、かつ再マークフェーズが原因である補正期間並行マークのためのユーザプログラムはマークの変更にリードを操作し、生成し続けますその記録マークオブジェクトの一部、通常は少し長い初期マークフェーズのいくつかよりも、この段階での滞留時間が、同時マーク時間よりも短いです。全体のプロセスは、一般に、同時マークとユーザスレッドと一緒に働くことができる同時スレッドを収集するクリア処理最長ので、かかるので、メモリ回復処理CMSコレクタは並行スレッドを実行するユーザです。私たちは、より明確に図3-10で一時停止する手順CMSコレクタと同時必要時間の動作を見ることができます。

 

三つの異なる短所:

  • CMSコレクタがCUPに非常に敏感です。実際には、プログラムの並行設計のためのCPUリソースに対してより敏感です。同時段階では、ユーザスレッドの一時停止につながらないが、しかし理由遅いアプリケーションによって引き起こされるスレッド(またはCPUリソース)の一部の占有、総スループットが減少します。回復スレッドCMSの数はデフォルト/ 4(CPU 3の数)、つまり、CPUリソースの25%以上のCPUが4を超えている、コンカレントガベージコレクションのスレッドによってその数の増加やCPUで有効になっています下落。CPU未満4である場合には、元のCPU負荷が比較的大きい場合(例えば、2)、CMSのユーザプログラムへの影響が大きくなることがなく、コレクタ・スレッドを実行するための半コンピューティングパワーの分離、それにつながる可能性急に50%減少、ユーザプログラムの実行速度は、実際には、受け入れられません。このような状況に対処するには、仮想マシンは、「増分同時コレクター」(インクリメンタル並行マークスイープ/ I-CMS)と呼ばれるCMSコレクタバリアント、物事が行われ、シングルCPUのPCのオペレーティングシステムを提供しますGCスレッドの時間をクリアし、並行マークである同じことをシミュレートするために考えプリエンプティブマルチタスク機構の使用は、ユーザスレッドが交互に実行し、全体のガベージコレクションプロセスが長くなるように、時間に排他的資源のGCスレッドを最小限に抑えるが、ユーザプログラムへの影響は減少率がそれほど明白ではありませんしている、非常に少なくなります。練習は、増分効果は、現在のバージョンでは、I-CMSは、「非推奨」として宣言された、非常に一般的であるCMSコレクターが、それはユーザーを促進しなくなった、ということを証明しました。
  • CMSのガベージコレクタは、(フローティングごみを)浮動扱うことができない、完全なGCの別を生成するために、故障による「同時モード故障を」表示されることがあります。CMS同時ユーザスレッドのクリーンアップ相は、まだプログラムが実行されていると、実行されている通り、自然に新しいゴミを発生させるためにそこ続ける、ゴミがマーキングプロセスのこの部分の後に表示され、CMSコレクションが次回まで待たなければならなかった時間でそれらを処分することはできません再びGC離れてクリア。ごみのこの部分は、「浮動ゴミ」と呼ばれています。また、ユーザスレッドのためには、ガベージコレクションのフェーズを実行する必要があり、あなたはまた、ユーザー・スレッド用に確保十分なメモリ空間を設定する必要がありますので、CMSコレクタは、他のコレクターのほぼ完全その後、満たさなどの老後のために待つことができませんコレクション、宇宙プログラムの一部を脇に設定する必要がありますが、並行コレクションの動作使用を提供します。JDK 1.5、デフォルトの設定では、CMSコレクタのパラメータを高めるために適切なことができ、アプリケーションの古いの成長が速すぎていない場合は古いが、保守的な設定であるスペースの68%後に活性化されるときに使用されます-XX:トリガーの割合を増加させるためCMSInitiatingOccupancyFraction値は、JDK 1.6でより良いパフォーマンスを得るために、メモリの回復の数を削減するために、開始閾値CMSコレクタは92%に引き上げられました。CMSプログラム中に実行するための予約メモリがニーズを満たすことができない場合は、「並行モード・失敗」失敗があるでしょうし、仮想マシンは、バックアップ計画を開始します:シリアル旧一時の再古いガベージコレクションなので、一時停止にコレクターを有効にします非常に長い時間。だから、パラメータ-XX:CM SInitiatingOccupancyFractionが高すぎる設定は簡単に失敗しました「並行モード・故障」の数が多い、より低いパフォーマンスにつながることができます。
  • 読者は以前、このアルゴリズムが導入された印象を持っている場合、それは、このコレクションの終わりを意味と思うかもしれない、アルゴリズムのコレクタ - 最後に欠点があり、このセクションの冒頭で述べた、CMSは「スイープマーク」に基づいていますスペースデブリの多くがあるでしょう。ときにあまりにも多くのスペースデブリ、常に歳残りの部屋がたくさんあるでしょう、大きなオブジェクトの割り当てに大きなトラブルをもたらすでしょうが、現在のオブジェクトを割り当てるための十分な大きさの連続したスペースを見つけて、事前に全GCをトリガしなければならなかったことはできません。この問題を解決するために、CMSコレクタは-XXを提供する:+ UseCMSCompactAtFullCollectionスイッチパラメータ(それはデフォルトでオンになって)、CMSコレクタに合わせオープンメモリの断片化のための仕上げ処理がFullGC、メモリの統合のプロセスであることを我慢できませんスペースデブリの問題によって複雑にされていないが、同じ長い一時停止を行ったが、されていません。帯域圧縮に続いて、非圧縮のフルGCの実行回数は、(デフォルトの値は意味、あなたは完全なGCの設定を入力するたびに0であるとき、このパラメータが使用され、CMSFullGCsBeforeCompaction:仮想マシンの設計者はまた、別の引数の-XXを提供します)デフラグされています。

G1:G1のガベージコレクタは、サーバーアプリケーション用に設計されています。

  • 並列並行:G1は、マルチCPUにおけるハードウェアの完全な利点は、マルチコア環境では、複数のCPU(CPUやCPUコア)の使用が停止-世界休止時間を短縮することができ、他のコレクターのいくつかは、元のJavaスレッドの実行を一時停止する必要がありますGCアクションは、G1のコレクターはまだ道による同時Javaプログラムが継続することができます。
  • 世代別コレクション:他のコレクターと同じように、世代概念がまだG1に保存されます。G1は、他のコレクターで必要とされないかもしれないが、独立して全体のGCヒープを管理できるようになりますが、それは新しく作成されたオブジェクトに対処するためのさまざまな方法を使用することができ、より良い得るためにGC古いオブジェクトを介して取得するいくつかの時間のために複数回を生き延びました結果を収集。
  • 空間統合:CMSとコレクタアルゴリズムローカル(の間に2つのリージョン)ビューから「コピー」アルゴリズムに基づいています - - G1は、全体の「フィニッシュマークは」に基づいており、異なるアルゴリズムを「マークがクリーンアップ」どのような場合には、これら2つのアルゴリズムは、G1の動作中に何のメモリスペースデブリを意味しないが、コレクションが可能な通常のメモリを提供しています。この機能は、彼らが大きなオブジェクトを割り当てるとき途中で次のGCをトリガ連続したメモリ空間を見つけることができないではないので、長時間実行されるプログラムを助長しています。
  • 予測可能な一時停止:これは、CMSの他の大きな利点にG1の相対的で、G1は、滞留時間とCMS共通の関心事を低減されますが、低G1ポーズの追求に加えて、休止時間モデルは、予測可能な、許可使用を確立することができますそれが明示的にM秒のセグメントの時間の長さを指定され、ガベージコレクションにかかる時間は、ガベージコレクタのほぼリアルタイムのJava(RTSJ)を特徴とするNミリ秒を超えることはできません。

G1の前に、他のコレクターのコレクションの範囲は全く新しい世代のか古いのではない、とG1はもはやケースです。G1コレクタを使用する場合も、新世代の概念および老年が保持されているが、Javaヒープメモリのレイアウトは、それが全体のJavaヒープは同じサイズ(地域)の複数の独立した領域に分割されるであろう、他のコレクターによって大きく変化するであろうしかし、新世代と旧年は、もはや物理的に分離されていない、と彼らは地域(必ずしも連続していない)のコレクションの一部であります

G1コレクタでは、コレクタと新世代の古い引用符の間の領域と他のオブジェクト間のオブジェクト参照は、仮想マシンは、ヒープのフルスキャンを避けるために思い出しセットを使用しています。各領域は、データ書き込み動作の種類で対応思い出しセット、リファレンスの仮想マシン発見手順でG1は、一時的な中断が障壁オブジェクトが操作を書く生成されます、引用検査基準は異なる領域にあるました(オブジェクトは、オブジェクトの新しい世代の古い時代への参照であるかどうかをチェック世代の例の場合)の中で、もしそうであれば、その後、CardTableにより、関連する参照情報が参照されたオブジェクトが属する地域の思い出しセットに記録されています。メモリの回復は、保証することはできません列挙範囲GCのルートノードに設定して思い出しまし追加するときに、ヒープ全体のスキャンを欠けがないだろう。

思い出しセットメンテナンス動作を除く、動作G1コレクタは、以下のステップに分けることができます。

初期ラベル(初期マーキング)

並行マーク(並行マーキング)

最終マーク(最終マーキング)

リサイクル(ライブデータのカウントと避難を)フィルター

プロセスの操作に精通し読者のためにCMSコレクタは、プロセスの動作はG1の最初の数ステップを発見しなければならず、CMSは多くの類似点を持っています。初期マークフェーズはちょうどマーキングについては、GCのルーツは、直接にリンクすることができますオブジェクト、およびユーザプログラムの次の段階を同時に実行するように、TAMS(マーク・スタートで次の上位)の値を変更し、地域内の正しい利用可能で、新しいオブジェクトを作成することができていますこのフェーズは、停止スレッドが必要ですが、それは非常に短くなります。並行マークがライブオブジェクトを見つけ、GCルートからのヒープオブジェクトの到達可能性解析の初期段階で、この段階では、長い時間がかかりますが、ユーザプログラムの実行によって複雑にすることができます。最終段階は、仮想マシン、原因生成された記録マークの部分の著しい変化をもたらし、ユーザプログラムの継続動作に並行マーク中に行われた改正のためにマークされ、この時間の間に内部設定ログ思い出しスレッドで記録されたオブジェクトの変更、思い出しへのニーズの最終段階をマーキングセットログデータは、スレッドステージを一時停止する必要が思い出しセット、にマージされるが、並行して実行することができます。まず、情報の中から、ユーザ所望のGC休止時間に応じてリサイクルプログラムを開発するために、スクリーニング段階でリサイクルソートするリサイクル各領域の最終的なコストの値は、ビューのサンの点を明らかにし、このフェーズは、実際にユーザプログラムを用いて行うことができます実行と同時に、唯一の地域の一部を回収するので、時間はユーザ制御可能であるが、停止したユーザスレッドが大幅に収集効率を向上させます。我々は、より明確ステップG1のコレクタと図3-11によってステージを一時停止する必要同時の動作を見ることができます。

 

 

デフォルトのJavaのガベージコレクタ:-XX:+ UseParallelGC

  • UseSerialGC(UseSerialOldGCが破棄されます)
  • UseConcMarkSweepGCを
  • UseParallelGC
  • UseParallelOldGC
  • UseParNewGC
  • UseG1GC

 

おすすめ

転載: www.cnblogs.com/shemlo/p/11666233.html