Java仮想マシンの知識-GC

まず、ガベージコレクションアルゴリズム

  1. マーク-スイープアルゴリズム
      最初のマークすべては、すべてのオブジェクトが均一なリサイクルをマークされている、オブジェクトを復元する必要があります。アルゴリズムの効率は高くないが、そこにあるメモリの断片化の問題が。

  2. レプリケーションアルゴリズム
      メモリこのメモリがなくなった場合、それはまだすべてのライブオブジェクトがメモリの別のブロックにコピーする唯一つのメモリ割り当てを使用して同じサイズの2つで割った容量、および使用されるメモリスペースは、一度離れてクリア。このアルゴリズムは、効率マーク明確なアルゴリズムの問題を解決することができます。しかし、半分のメモリ、より高い価格を分割する必要があるの。

  3. マークは-ソートアルゴリズムは、
      すべてのオブジェクトが回復する必要があるので、生きているオブジェクトは、端末境界の外側に直接メモリを一掃、一方の端部に向かって移動マークします。アルゴリズムは、メモリフラグメンテーションマークスイープアルゴリズムの問題、ならびに高い生存率でオブジェクトの複製アルゴリズムを解決することができ、複数の複製効率が低くなります。

  4. 以下のための世代コレクションアルゴリズム
      新世代、それぞれが少ししか生き残る死んだオブジェクトのガベージコレクションの数が多い、あなたはそう長く有料コピーがコレクションを完了するために、ライブオブジェクトの少量のコストとして、コピーアルゴリズムを使用する必要があり、
      古い時代、オブジェクト高い生存率は、余分なスペースは、あなたはクリーンアップのアルゴリズムを整理するためのマーカーまたはタグを使用する必要が彼を保証するために割り当てられていない。
      スペースをヒープになる世代のコレクションアルゴリズムが古いと陽の歳の若い世代に分けられ、若い世代には、ゾーンとエデンサバイバーに分割されていますエリア、サバイバー領域は、面積にしてから、ゾーンに分割されています。エデン領域とサバイバー領域の1部門:8によって既定。エデン領域は、連続したメモリ空間であるため、高速なエデンにメモリ領域を割り当てられました。衝突やTLABメモリ割り当てエデンエリアを短縮し、スレッドの安全性を保証するために、ポインタを使用してのHotSpot仮想マシン。
    世代別コレクションアルゴリズムのメモリ部門

実行フロー世代コレクションアルゴリズム

  1. エデン優先配分地域の新しいオブジェクト。
  2. エデン領域がいっぱいになると、それはマイナーGCをトリガーする、ライブオブジェクトがエデンSurvivor0に移動され、エデンはクリアされます。
  3. エデンエリアが再び一杯になるというように、クリアS0とS1スイッチの役割をし、次のラウンド、無限のようされているSurvivor1、S0とエデンにコピーされますで再びライブオブジェクトマイナーGC、エデンとSurvivor0を誘発します。
  4. 2つのサバイバー領域が複数回(のHotSpot仮想マシンのデフォルト15回)に切り替えた後、まだ生きているオブジェクトは、古い時代にコピーされます。
マイナーGCトリガ条件:
  • 火災エデンエリアがいっぱいです。
フルGCのトリガ条件:
  • System.gcを呼び出すときに、システムが完全GCの実装をお勧めしますが、必ずしも実装されません。
  • トリガー歳のスペースが不十分。
  • (永久/ドルのスペースの代わりに)メソッド領域は時にスペースの不足トリガされます。
  • 古い時代古い時代に入った後にマイナーGCによってトリガ連続したメモリの平均サイズは、利用可能なよりも大きいです。
  • 時間からエデンの領域は、スペーススペースゾーン領域にコピーするには、オブジェクト空間利用可能なメモリのサイズは、オブジェクト置くダンプ歳、古い時代とオブジェクトのトリガ時間未満利用できる連続したメモリサイズよりも大きくなっています。

第二に、メモリの割り当てと回復の戦略

  • エデンでの割り当て領域に優先順位をオブジェクト
      エデン領域が十分なメモリ空間が割り当てられていない場合、仮想マシンが起動します
    マイナーGCを。

  • ラージオブジェクトが、直接、古い年に
      、このような長い文字列や配列などの連続したメモリJavaオブジェクト、多数の古い時代に直接割り当てられますし、プログラムを書くときので避けるべきです。

  • オブジェクトの長期生存率は、古い年を入力します
      2つのサバイバーエリアはまだ生きているオブジェクトは、古い時代にコピーされ、数回(のHotSpot仮想マシンのデフォルト15回)に切り替えたとき。

  • 動的オブジェクトが決定された年齢
      と同じ年齢S0空間の全ての合計と同じか、被験者の年齢が直接しきい値に到達することなく、歳入力することができますよりも古い、オブジェクト空間S0の半分のサイズよりも大きい場合。

  • スペースの割り当てを保証
      それはマイナーGCを発生する前に、この条件が満たされた場合の古い使用可能な最大連続した領域は、総容量の新世代内のすべてのオブジェクトよりも大きいかどうかをチェックするための仮想機会、そしてマイナーGCそれが安全であることを確実にします。満たされていない場合は、仮想機会がHandlePromotionFailureの設定が失敗したことを保証できるようにするかどうかを確認します。許可された場合、それは前の歳より大きいの古い最大利用可能な連続スペースがより大きい場合には、オブジェクトの平均サイズに昇進したマイナーGCにもかかわらず、マイナーGCを実施しようとするかどうかをチェックしていきます危険です。未満ならば、またはHandlePromotionFailureの設定がリスクを許可しない、それは完全なGC一度変更する必要があります。

第三に、ガベージコレクタ

  1. シリアル:シングルスレッドコレクター。== ==複製アルゴリズム
  2. ParNew:マルチスレッド版のシリアルコレクタ。== ==複製アルゴリズム
  3. パラレルスカベンジ:類似ParNewコレクタを、他のコレクターはストップザ・ワールドに焦点を当てて、できるだけ多くの時間を短縮しますが、パラレルコレクタ方式の詳細については心配スループット、適応戦略をサポートしています。== ==複製アルゴリズム
  4. 旧シリアル:シリアル古いコレクターズエディション。== ==マーク照合アルゴリズム
  5. 旧パラレル:パラレルスカベンジコレクタのの古いバージョン。== ==マーク照合アルゴリズム
  6. CMS:並行マークスイープコレクターの一種である最短目標復旧時間を一時停止取得するコレクタを。== ==マークスイープアルゴリズム

 CMS処理の動作

  • 初期マーク(初期マーク):昔の生存内部のマークオブジェクトは、これらのオブジェクトは、GCの根からのものか、直接ポイント、またはオブジェクトの生存期間は、若い世代を指摘されています。これは、STW、最速につながります。

初期マーク

  • 並行マーク(並行マーク):ライブオブジェクトをマークし、全体の古い時代を行き来し始めの段階からすべてのルートを見つけます。しかし、減速、及びプログラムを並行して実行されます。

並行マーク

  • 改称(備考、最終):前の同時マーク、並行処理として、変更するアプリケーションの速度に追いつくことができないかもしれません。マーキング全体旧世代の生存オブジェクトの完了をマークするために再マークする必要があります。これは、高速、STWにつながります。
  • クリア同時(同時スイープ):死の同時明確なターゲット。しかし、減速、及びプログラムを並行して実行されます。

同時クリア

 CMS全体のプロセス

CMSコレクタ

 CMSの欠点

  • CPUリソースが非常に敏感です。デフォルトのスレッド数は、CMS(CPU数+ 3)/ 4に回収されます。
  • 処理できないごみが浮いのフルGCの別を生成するために、故障による「同時モード故障を」表示されることがあります。CMS同時ユーザースレッドがまだプログラムが新しいゴミを生産し続ける自然に実行して、クリーンアップの段階を実行している、ごみは次のGCまで放置し、その後クリーンアップする必要があり、ときにそれらのうちコレクションCMS回で処理できない、マーキングプロセスのこの部分の後に表示されます。ごみを浮遊しているゴミのこの部分。ユーザスレッドのガベージコレクションフェーズが他のCMSコレクタが、ほとんどのコレクションで満たされた古いようなものだとは違って、実行する必要があるので、それは空間の一部を予約します-XX:CMSInitiatingOccupancyFractionは割合トリガーを設定することができます。予約された番組は、ニーズを満たすことができないメモリ、があるだろう「同時モードの失敗」の障害が表示されたら、この時点では、仮想マシンのバックアップ計画を開始します。一時的にシリアル旧を可能にします。
  • マーク-欠陥アルゴリズムを削除します。しやすいメモリの断片化解決策:CMSの構成パラメータは、圧縮のための実行を設定していない何回、プロセスメモリの断片化の並べ替えをマージするメモリの統合プロセスは、並行することはできません、STWは長い時間につながるので、別のパラメータの設定があるのフルGCで開くには全GC後、圧縮のフルGCを実行します。

7. G1:サービス指向エンドアプリケーション。

 G1の特徴

  • 並行並列:STWを短縮し、マルチCPU、マルチコアハードウェアの利点環境をフルに活用します。
  • 世代別コレクション:予約世代のコンセプトは、独立して全体のGCヒープを管理することができます。
  • 宇宙仕上げ:「マーク - 仕上げ、」に基づいて「コピー」アルゴリズムに基づいてビューのローカル(2つの地域)のポイント。だから、何のメモリスペースデブリません。
  • 予測可能なポーズ:これは、ユーザーが明示的にガベージコレクションで消費Mミリ秒、Nミリ秒を超えてはならない時間セグメントの長さを指定することができ、G1 CMSに対して大きな利点です。

 演算処理のG1

  • 初期マーク(初期マーク):類似したCMS
  • 並行マーク(並行マーク):類似したCMS
  • 最終マーク(備考):類似したCMS
  • フィルタ再生(cleanp):この段階でのオブジェクトが単一の領域に一つまたは複数の領域からコピーされ、調整および空きメモリれます。

8. ZGC:JDKの導入11は、制御着色ポインタを使用し、低遅延ガベージコレクタを有すると主張し、バリアローディング技術、STW、走査は、ガベージコレクション後に実現することができます。

第四に、ガベージコレクタの組み合わせ

パラメータ 機能
-XX:+ UseConcMarkSweepGCを + UseParNewGC:自動的に-XXを有効に
-XX:+ UseParallelGC + UseParallelOldGC:自動的に-XXを可能にしました。サーバーモードでのデフォルト。
-XX:+ UseParallelOldGC 自動的に-XXを有効に:+ UseParallelGC
-XX:+ UseParNewGC JDK8だけでは有効にすることはできません
-XX:+ UseSerialGC シリアル+シリアル古いです。クライアントモードのデフォルト。
-XX:+ UseG1GC G1ガベージコレクタを使用します

おすすめ

転載: www.linuxidc.com/Linux/2019-07/159649.htm
おすすめ