JVMのガベージコレクションのアルゴリズム[3]

記事はので、どのようにリサイクルゴミの上で、このガベージコレクタをまとめるために、オブジェクトを再利用することが可能なメモリをまとめました。

次のように効率的なJVMのガベージについては、ガベージコレクションのアルゴリズムは、要約されています。

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

ここに画像を挿入説明
クリアラベル付けアルゴリズムであるベースのガベージコレクションアルゴリズム、シンプルですが、スペースデブリの深刻な問題があるでしょう上記のように、この時点で3Mサイズのオブジェクトを作成する場合は、ではなく> = 3Mの連続したメモリ空間、GCが発生します。

第二に、複製アルゴリズム

ここに画像を挿入説明
アルゴリズムは、アルゴリズムフラグは、二つの部分、のみ使用するのいずれかに分割された第1のメモリ領域をクリアに基づいています。メモリ使用量の1が終了したときにすると、別のものにコピーされたオブジェクトを生き、そしてその後、このいずれかを空にします。こうして全体の半分の面積のメモリリコールのためのたびに、順次、簡単、効率的な動作に割り当てられたスタックポインタ移動の上部限り、等のメモリの断片化の複雑さを考慮していません。このアルゴリズムは、スペースデブリマークスイープアルゴリズムのメモリの問題を解決するが、メモリの使用率はわずか50%です。

現在主流の商用仮想マシンは新しい世代を回復するために、複製アルゴリズムに基づいており、オブジェクトの98%の新世代は「死に向けて生の夜」ですので、何も1:1のメモリ空間を分割し、しかし8に分割されています1 :エデン領域と二つの小さな領域それぞれがサバイバーエデン領域とゾーンを使用する、請求サバイバー1、。マイナーGC生存サバイバーエリアを格納するのに十分なスペース上の別の部分の下では、オブジェクトが、これらは時間に戻って良いの信用と賃金のような(割り当て保証機構を介して直接お金をオブジェクトいない場合は、すべての時間は、固定されていないのならば人々は、ここに古い時代に)昔の保証と同等です。

第三に、マーク - 照合アルゴリズム

ここに画像を挿入説明
最初のライブオブジェクトは、一端に明確移動し、ゴミオブジェクトをクリアする直前のように照合アルゴリズムマークマークマークとスイープアルゴリズムプロセス。このアルゴリズムは、アルゴリズムメモリスペースデブリ問題アルゴリズムとコピースペース利用をローに整理するタグの問題を解決します。効率が非常に低いのでしかし、このアルゴリズムは、仕上げ工程のすべてのライブオブジェクトのメモリアドレスを整理する必要があります。

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

世代コレクションアルゴリズムは、実際には、特定の状況下で、上記の3つのアルゴリズムの組み合わせです。スイープやマーク - - ソートアルゴリズムこのメモリ領域をヒープに対応するの古いマークを使用して、レプリケーションアルゴリズムの新世代を使用した、古いものと新しい世代のに分かれています。

メモリモデル:

ここに画像を挿入説明
1の新旧世代のデフォルトのサイズ比:2、エデンS0とS1、及び比は8:1:1には、パラメータを変更することができます。
ここに画像を挿入説明

アクションのサバイバーの領域は、すべてのマイナーGC、エデンは、オブジェクトが古い年はすぐに満たされる歳に移動します生き残れないこの部分場合、バッファの役割を果たしています。

古いメモリが大きく、より良いではないので、旧地区、より多くのメモリに長い時間がかかり(ストップの世界 - - )旧ゾーンがフルGCの発生時にロングSTWが起こります。ソートアルゴリズム - 何のメモリ領域旧保証ポリシーが存在しないため、旧地区は、それはスペースの無駄複製アルゴリズムであれば、それは簡単にマークを使用するので、OOMにつながることができ、「古い愚か者のオブジェクトの数が多いです。

オブジェクト割り当てプロセス:
実際には、それらのほとんどはメモリ内の死に向けて生の夜のオブジェクトである、生存時間が非常に短いです。新しいオブジェクトは、一般的に作成されたエデン地区十分なメモリ空間の場合、JVMは面積が動くライブオブジェクトのクリアという、マイナーGCを行っエデンエリアとS0または空S1、エデンエリアとS0またはS1ます、メモリ空間エデンの領域を確保しますその面積S0またはS1アイドルに、ライブオブジェクトの上に移動する年齢+ 1の面積は、(原因割り当て保証機構に)行かせすることはできませんし、移動オブジェクトは、15歳までの年齢のデフォルト値に達しました。歳に適合しない場合エデンはその後、まだ、大きなオブジェクトは、オブジェクトは古い時代に直接になることを示し、オブジェクトに合わせた場合、JVMは全GCになり、その後、ストアは劣らず、OOMが発生し、それが下に格納されていない場合預金。
図:(ネットワークから以下)
ここに画像を挿入説明

古い年を入力します3つのオブジェクトがあります。

ラージオブジェクト
ラージオブジェクトは、オブジェクトを参照するには、連続したメモリ空間の多くを必要とします。-XX:PretenureSizeThresholdはラージオブジェクトのサイズを設定することができ、複数のオブジェクトのサイズが大きい場合よりも、これはシリアルとParNew 2つのコレクタに少ないパラメータです。

長期生存ターゲット
仮想マシン定義(件名ヘッダ内の)各オブジェクト(AGE)カウンタの対象年齢。オブジェクトは、通常の状況下からとToサバイバー領域動き、各領域での経験サバイバーマイナーGC内のオブジェクトとの間の領域に継続されます、1歳、年齢の増加となりました。年齢が15歳に増加すると、この時間は、古い時代に転送されます。年齢ができJVMパラメータ-XX:MaxTenuringThresholdを設定します。

年齢動的なオブジェクト
の仮想マシンは、対象が15歳歳でなければならないことを必要としないスペースサバイバー(年齢含む)一定の年齢以下のオブジェクトサバイバースペースの半分よりも大きい合計サイズであれば、古いエリアを置く、熟成より大きいか等しいですあなたが高齢者の地域へ直接行くことができます対象年齢は、動的なメカニズムはマイナーGCの時代の後にトリガ。

公開された11元の記事 ウォンの賞賛0 ビュー614

おすすめ

転載: blog.csdn.net/fei1234456/article/details/104736912