2016-10-08 12 views

答えて

3

オブジェクトは、マイナーGC(若い空間)またはフルGC(すべて)のいずれかで、若い場所から公表された場所に移動できます。メジャーGCコレクションは、テニュアされたスペースにのみ収集されます。

小さいオブジェクトは、エデンスペースを作成しています。テナントスペースのアレイ。

エデンスペースがクリアされると、生き残っているオブジェクトが生存スペースにコピーされます。それらは、年齢(コピー回数)がテンリングしきい値に達するまで2つの生存スペースの間で前後にコピーされ、その場合にはテンテッドスペースにコピーされます。

エデンスペースに余りにも多くのオブジェクトが残存スペースにコピーされると、完全なGCがトリガーされ、すべてのライブオブジェクトがテナントスペースにまっすぐに移動します。サイズを考慮

(survivorRatio)生存サイズは常に生存率は、生存者空間がエデンスペースよりどれだけ小さい

エデンよりも大きくなります。例えば-XX:SurvivorRatio=8は、生存者のスペースが若い世代の1/10であることを意味します。生存者のスペースがエデンよりも大きい場合でも、生存者のスペースは、生存者のスペース(1/10th)が2つあり、エデンスペースは8倍(8/10)です。

。例えば、最後のN個のコレクションからのオブジェクトを持っているので、90%の完全な生き残りスペースを持つことができます。

このオブジェクトをedenからOldに直接コピーするシナリオはありますか?ifオブジェクトのサイズは小さくなります(巨大ではありません)?

毎回完全なコレクションをトリガするのに十分な生き残りスペースを作成すると、オブジェクトはEdenからTenuredに移行します。私はこれに行くことをお勧めしません。

+0

最後の点はそうではありません。オブジェクトはOld Gen GCなしで単純に保留されます。 –

+0

@MarkoTopolnikそのすべてのオブジェクトをチェックするフルGC。私はそれがそうでなければそれを見たことがない。 –

+0

@peterlawreyあなたの答えをありがとう。これに関する詳細を教えてください。 - マイナーGC - 旧世代の宇宙管理を担当するメジャーGCであるヤングジェネレーションの管理を担当します。私はフルGCの仕事に混乱​​しています、いくつかのリンクはそれがヒートスペース(ヤング+オールドジェネレーション)を管理していると言います。 – user6941347

1

マイナーGCはこれに責任を負いますか?またはメジャーGC?

どちらも、若い世代から古い世代へ移動するオブジェクトを担当しています。

は、 "一般的なガベージコレクションプロセス" セクションの@オラクルを見てください garbage collection tutorial

enter image description here

概要:

  1. まず、任意の新しいオブジェクトがEden領域に割り当てられています。両方の生存者空間は空になる。エデン・スペースがいっぱいになると

  2. は、マイナーなガベージコレクションが

  3. 参照しているオブジェクトが最初にSurvivor領域に移動されているトリガされます。参照されていないオブジェクトは、エデンスペースがクリアされると削除されます。

  4. 次のマイナーGCでは、eden空間でも同じことが起こります。参照されていないオブジェクトは削除され、参照されたオブジェクトはサバイバー空間に移動されます。しかし、この場合、それらは第2の生き残り空間(S1)に移動される。

  5. 次のマイナーGCでは、同じプロセスが繰り返される。しかし、今回は生存者のスペースが切り替わります。参照されたオブジェクトはS0に移動されます。生存するオブジェクトはエージングされます。エデンとS1はクリアされます。

  6. マイナーGCの後、エージング対象が特定の年齢しきい値(この例では8)に達すると、若い世代から古い世代に昇格されます。

  7. マイナーなGCが引き続き発生するため、オブジェクトは古い世代の空間に引き続き昇格されます。

  8. 最終的に、古い世代で大規模なGCが実行され、その世代はその領域をクリーンアップし、圧縮します。

関連する問題