2016-02-22 8 views
5

GCについて少し混乱させます.GCが実行すると、すべてのスレッドが停止し、ガベージリファレンスが収集されます。GCの後にオブジェクト参照が変更される

GC後、jvmは圧縮を実行しますか?

コンパクション:終了参照

によって引き起こされる穴を排除するための「使用中」のメモリ領域を移動手段はいその後、JVMは、古い参照を維持するか、それが残りのすべてのオブジェクトへの新しい参照を割り当てない場合はどうなりますか?

+1

JVMについて言及して以来、私はJavaを言語として追加しました。ただし、別のもの(Scalaなど)を参照している場合は、適切なタグを付けてください。 – Bathsheba

+0

あなたの提案に感謝します –

答えて

7

コンパクションについて:使用されるアルゴリズムによって異なります。若い世代のGCはすべてコレクターをコピーしています:はい、彼らはキャンプアクションを行い、残りのすべてのオブジェクトを別のメモリー領域に再配置します。旧世代のコレクタでは、どのコレクションアルゴリズムが使用されているかによって異なります。 CMS-collector(並行マークスイープ)は、通常、マーク - スイープ - コンパクトコレクタの標準化が圧縮されていますが(通常、コンパクト化されているため)、通常はコンパイルは行われません。断片化。

オブジェクトが移動されたとき(コピーコレクタを使用しているため、または圧縮のために)、既存の参照は新しいメモリ位置を指すように更新されます。

関連する問題