JVMシリーズII(ガベージコレクションのアルゴリズム)。

まず、マーク - スイープアルゴリズム(マークスイープ)

このアルゴリズムは、「マーク」と「クリア」2つの段階に分かれています。すべてのオブジェクトが回復する必要がある最初のマークは、すべて統一されたオブジェクトは、標識後の回復が完了するとマークされています。

マークスイープアルゴリズムは、ほぼすべてのコレクション・アルゴリズムのは、この考え方に基づいており、ギブの欠如に改善を行うされている、最も基本的なコレクションアルゴリズムです。これは、2つの大きな欠点があります。

  • 効率性。マーク及び2つの方法のスイープ効率が高くありません。
  • スペース。これは、大規模なオブジェクトを割り当てる必要が、十分な連続したメモリを検索し、事前に別のガーベッジコレクション動作をトリガしなければならなかったことができないとき、あまりにも多くを引き起こす可能性があるスペースデブリをクリアした後、メモリの断片化のマークを大量に生成されます。

第二に、複製アルゴリズム(コピー)

使用可能なメモリ容量は二つの等しいサイズに分割されていることにより、このアルゴリズムは、それらの一方のみを使用します。この1つはメモリが不足すると、それは別の上記の1、その後、ハーフエリア空間にオブジェクトの存続コピーをマークして、一回のクリーンアウトを使用します。

各エリアのためのアルゴリズムをコピーするには、半分だけ、メモリの断片化の問題に良い解決策、および簡単な、効率的な動作を回復しました。

このアルゴリズムの欠点は次のとおりです。

  • メモリは高価な、元の半分に減少し、割り当て保証を行うために追加のスペースを必要としています。
  • より多くのコピー操作は、効率を低下させる、オブジェクトのより高い生存率で行われます。

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

第三に、マーク - 照合アルゴリズム(マーク・コンパクト)

このアルゴリズムは、「マーク」に分けて、2段階の「仕上げ」されています。すべてのオブジェクトが回復する必要がある最初のマークを、そしてすべてのライブオブジェクトは、端末境界の外側に直接メモリを一掃、最後に移動されてみましょう。

マーク・コンパクトアルゴリズムは、アルゴリズムのコピースペースと効率の無駄を避けるために、メモリの断片化を解消することができます。

第四に、世代コレクションアルゴリズム(世代別コレクション)

このアルゴリズムは、生きているメモリ・サイクルが数枚、通常は新世代へのJavaヒープと旧世代に分けて別のオブジェクトに基づいています。

新世代では、我々は唯一のコレクションを完了するために、ライブオブジェクトの複製コストの少量を支払うために、アルゴリズムのコピー選択した後、わずか数が生き残る、死者多数のオブジェクトがある場合に、各ガベージコレクションを発見しました。

古い世代では、高い生存率の目標は、それを確保するために余分なスペースがない、マーク・スイープやマーク・コンパクトなアルゴリズムを使用する必要があります。

おすすめ

転載: www.cnblogs.com/jmcui/p/12044343.html