若い世代で生存していたオブジェクトは、GCの多くのサイクルの後、古い世代のメモリ空間に移動されます。オブジェクトが若い世代から旧世代に移動する原因
マイナーGCはこれに責任を負いますか?またはメジャーGC?
若い世代で生存していたオブジェクトは、GCの多くのサイクルの後、古い世代のメモリ空間に移動されます。オブジェクトが若い世代から旧世代に移動する原因
マイナーGCはこれに責任を負いますか?またはメジャーGC?
オブジェクトは、マイナーGC(若い空間)またはフルGC(すべて)のいずれかで、若い場所から公表された場所に移動できます。メジャーGCコレクションは、テニュアされたスペースにのみ収集されます。
小さいオブジェクトは、エデンスペースを作成しています。テナントスペースのアレイ。
エデンスペースがクリアされると、生き残っているオブジェクトが生存スペースにコピーされます。それらは、年齢(コピー回数)がテンリングしきい値に達するまで2つの生存スペースの間で前後にコピーされ、その場合にはテンテッドスペースにコピーされます。
エデンスペースに余りにも多くのオブジェクトが残存スペースにコピーされると、完全なGCがトリガーされ、すべてのライブオブジェクトがテナントスペースにまっすぐに移動します。サイズを考慮
(survivorRatio)生存サイズは常に生存率は、生存者空間がエデンスペースよりどれだけ小さい
エデンよりも大きくなります。例えば-XX:SurvivorRatio=8
は、生存者のスペースが若い世代の1/10であることを意味します。生存者のスペースがエデンよりも大きい場合でも、生存者のスペースは、生存者のスペース(1/10th)が2つあり、エデンスペースは8倍(8/10)です。
。例えば、最後のN個のコレクションからのオブジェクトを持っているので、90%の完全な生き残りスペースを持つことができます。
このオブジェクトをedenからOldに直接コピーするシナリオはありますか?ifオブジェクトのサイズは小さくなります(巨大ではありません)?
毎回完全なコレクションをトリガするのに十分な生き残りスペースを作成すると、オブジェクトはEdenからTenuredに移行します。私はこれに行くことをお勧めしません。
マイナーGCはこれに責任を負いますか?またはメジャーGC?
どちらも、若い世代から古い世代へ移動するオブジェクトを担当しています。
は、 "一般的なガベージコレクションプロセス" セクションの@オラクルを見てください garbage collection tutorial概要:
まず、任意の新しいオブジェクトがEden領域に割り当てられています。両方の生存者空間は空になる。エデン・スペースがいっぱいになると
は、マイナーなガベージコレクションが
参照しているオブジェクトが最初にSurvivor領域に移動されているトリガされます。参照されていないオブジェクトは、エデンスペースがクリアされると削除されます。
次のマイナーGCでは、eden空間でも同じことが起こります。参照されていないオブジェクトは削除され、参照されたオブジェクトはサバイバー空間に移動されます。しかし、この場合、それらは第2の生き残り空間(S1)に移動される。
次のマイナーGCでは、同じプロセスが繰り返される。しかし、今回は生存者のスペースが切り替わります。参照されたオブジェクトはS0に移動されます。生存するオブジェクトはエージングされます。エデンとS1はクリアされます。
マイナーGCの後、エージング対象が特定の年齢しきい値(この例では8)に達すると、若い世代から古い世代に昇格されます。
マイナーなGCが引き続き発生するため、オブジェクトは古い世代の空間に引き続き昇格されます。
最終的に、古い世代で大規模なGCが実行され、その世代はその領域をクリーンアップし、圧縮します。
最後の点はそうではありません。オブジェクトはOld Gen GCなしで単純に保留されます。 –
@MarkoTopolnikそのすべてのオブジェクトをチェックするフルGC。私はそれがそうでなければそれを見たことがない。 –
@peterlawreyあなたの答えをありがとう。これに関する詳細を教えてください。 - マイナーGC - 旧世代の宇宙管理を担当するメジャーGCであるヤングジェネレーションの管理を担当します。私はフルGCの仕事に混乱しています、いくつかのリンクはそれがヒートスペース(ヤング+オールドジェネレーション)を管理していると言います。 – user6941347