JVMのガベージコレクションアルゴリズム-GC

《深入理解Java虚拟机 第3章》

1、マーク - スイープアルゴリズム

最も基本的なコレクションアルゴリズム、2つの段階にマークとスイープ:最初のマークすべてのオブジェクトは、すべて統一されたオブジェクトは、標識後の回復が完了するとマークされ、回復する必要があります。

その後のアルゴリズムは、収集、および不十分な改善は、この考えに基づいて得られます。

二つの主要な問題があります。
図1は、効率は、二つのプロセスのマーキングおよび除去効率が高くありません
2、スペースの問題は、十分な連続したメモリを見つけることができない、実行中のプログラムに大きなオブジェクトを割り当てる将来のニーズにあまりにも多くの時間を引き起こす可能性があるスペースデブリをクリアした後に個別のメモリの断片化のマークの多くを生成し、別の前進をトリガしなければならなかっただろうガベージコレクションのアクション。

2、複製アルゴリズム

理解するためには、効率の問題が生じます。使用可能なメモリ容量は同じサイズの2で割って、それらの一方のみを使用しています。メモリのこの部分がなくなると、コピーはまた、上記の別の部分にオブジェクトを生き残る、その後、メモリ空間はきれい出たら、次に使用されてきました。全メモリリコールのすべての半分の領域について、またメモリ、割り当てるために、スタックポインタの動きのトップ限り、メモリの断片化アイソクロナスメモリ割り当ての複雑さを考慮していないというような簡単な、効率的な動作を。このアルゴリズムのコストは、元の半分にメモリを削減することである少し高すぎるだろう。

今、商用の仮想マシンは、新世代を回復するために、このコレクションのアルゴリズムを使用しています。

メモリ空間を分割する1の比率が、メモリが大きなスペースと2エデンに分かれています。同社は、オブジェクトの新しい世代の98%が夜の学生に向かって死んでいることを示した、それが1を必要としないIBMの専門店小さなスペース、および各時間エデンサバイバーサバイバー。

リサイクルすると、エデンとサバイバーはサバイバーエデンだけ使用されている領域外にも生きているオブジェクトワンオフサバイバーの部分は別のスペースにコピーされ、最終的にはきれい。

HotSpot VMのデフォルトのサイズとサバイバーエデン比は8:1である、すなわち、新世代の全容量の90%に利用可能なメモリ空間の各新世代、メモリのわずか10%が無駄になります。

もちろん、回復可能なデータの唯一の98%は、一般的にシーン内のオブジェクト、それぞれが唯一の生存空間が他のメモリに依存する必要性が、十分に(ここ歳ともいう)していないときに、ライブオブジェクトの10%以上を回復していることではない保証することができます保証を割り当てを

割り当て保証はこれです:もう一つは、収集ダウンを保存するのに十分なスペースの新世代のサバイバースペースオブジェクトを生存しなかった場合は、これらのオブジェクトは、保証メカニズムを割り当てることによって、古い年に直接移動します。

3、マーク - 照合アルゴリズム

コピーコレクションアルゴリズムは、効率が低くなり、高い生存率でより多くのレプリケーションオブジェクトを行います。あなたは宇宙の50%を無駄にするだけでなく、極端な状況に対処するために追加のスペース割り当ての保証を必要としない場合、すべてのメモリの100%の生存率が使用されている、それは古い年で直接、このアルゴリズムを選択することはできません一般的です。

よるの古いアルゴリズム- 「仕上げマーク」の特徴、それがあることが示唆されました。

ラベリング処理と「マーク - スイープ」アルゴリズムは同じですが、その後の工程は、直接クリーンアップするオブジェクトを再利用されるのではなく、すべての生存オブジェクトに直接外部メモリ末端境界出て、その後きれいな、最後に移動されます。

4、世代コレクションアルゴリズム

現在のガベージコレクションの事業の仮想マシンは、「世代コレクション」のアルゴリズムを実装しています。

オブジェクトに応じて、生きているメモリ・サイクルは、いくつかの作品に分かれています。あなたは、各時代の特徴に基づいて、最も適切な収集方法を使用できるようにJavaヒープは、一般的に、古いものと新しい世代のに分かれています。

新世代では、我々は、ほんの数が生き残る、すべてのゴミが死亡し多数のオブジェクトを発見した後、コレクション選択した複製アルゴリズムを、唯一のコレクションを完了するために、ライブオブジェクトの複製コストの少量を支払う必要があります。

回復するアルゴリズム - または「仕上げマーク」 - 理由はオブジェクトの高い生存率の古い時代には、彼を確保するために追加のスペースがない、「クリーンアップマーク」を使用する必要があります。

新生代
レプリケーションのアルゴリズム マーク - クリーンアップまたはマークする - 仕上げ

ガベージコレクタ

このアルゴリズムは、収集の方法論のメモリの回復がある場合は、ガベージコレクタは、実装のメモリを回復することです。

  1. シリアルコレクター

    レプリケーションのアルゴリズム

世界を停止!

シングルスレッドのコレクター、ガベージコレクションは、仕事は彼のコレクションの最後まで、すべての他のスレッドを中断する必要がある場合。

利点:

Clientモードで仮想マシンを実行するためのシンプルで効率的に良い選択です

  1. ParNewコレクタ

    レプリケーションのアルゴリズム

実際には、シリアルコレクタのマルチスレッド・バージョンは、ガベージコレクションのために複数のスレッドを使用することに加えて、他の行為はシリアルコレクタ利用できるコレクションアルゴリズムを全ての制御パラメータを含む、ストップザワールドは、オブジェクト割り当てルールなど回復戦略とシリアルコレクターもかなりのシェアコードを達成するために、まったく同じ。

利点:

コレクターの新世代のための選択のサーバーモードで実行している仮想マシンは、一つの重要な理由は、シリアル・コレクターに加えて、それが現在のみCMSコレクタで動作する、ということです。

  1. パラレル清掃をコレクタ

    レプリケーションのアルゴリズム

新しいコレクタの世代だけでなく、コピーアルゴリズムコレクタを使用するだけでなく、並列、マルチスレッドコレクタ。

そして、他のさまざまなポイントコレクター

他のコレクターが集中する時間からの時間のユーザーにできるだけ休止時間ガベージコレクションのスレッドを短縮することです

並列スカベンジオブジェクトのコレクターです:制御特定を達成するために。

合計の一定割合は、CPU時間の経過時間と呼ばれ、CPUは、ユーザコード、すなわち、ユーザコード= /(ユーザコード+ガベージコレクション時間を実行する時間)を実行するための特定の時間に実行されています。

これは、特定の正確な制御のための2つのパラメータを提供します

パラメータ 説明
-XX:MaxGCPauseMillis 最大のガベージコレクションの休止時間を制御します
-XX:GCTimeRatio サイズスループットに直接配置
  1. シリアル・オールド・コレクター

    マーク - 照合アルゴリズム

シリアル古いコレクターズ・エディションシングルスレッド

主な意義は、仮想マシンがクライアントモードで使用するということです

サーバーモードの下に2つの目的
1、JDK 1.5およびパラレルの清掃を用いてコレクタに以前
バックアップ計画CMSコレクターが並行モード・故障時に使用される2、同時コレクションが起こります。
  1. パラレルオールド・コレクター

    マーク - 照合アルゴリズム

昔の並列スカベンジコレクタのバージョンでは、マルチスレッド、JDK 1.6が提供する中で始まりました

スループットとCPUリソースに敏感なアプリケーションに焦点は、パラレルオールド・パラレルスカベンジコレクタを追加するために優先順位を与えることができます。

  1. CMSコレクタ

    フルネーム:並行マークスイープ

マーク - スイープアルゴリズム

一時停止の種類は、最短の目標復旧時間コレクタを得ます。

最短は、ユーザーにより良い体験を提供するために、一時停止し、システムをしたい、サーバ側またはB / Sシステム上のインターネットサイト、サービスの応答速度に注意を払うに適用されます。

4つのステップ

  1. 初期マーク
  2. 並行マーク
  3. ラベルを変更
  4. 同時クリア

利点:

同時コレクション、低一時停止

短所:

  1. CPUリソースに非常に敏感
  2. 我々は、フローティングごみを処理することができません

    新しいプログラムが生成ゴミを実行していきますと、仕上がりをクリーンアップすることはありません。

  3. 「マーク - スイープ」に基づくアルゴリズム、スペースデブリがたくさんあるだろう

  1. G1コレクタ

    コレクター今日開発の成果を収集するための最先端技術のごみ、第1

ガベージコレクタは、サーバーアプリケーション用に設計されて

特長:

  1. 並列並行
  2. 世代別コレクション
  3. 空間統合
  4. 予測可能な一時停止

おすすめ

転載: www.cnblogs.com/ffeiyang/p/12171474.html