1

完全な GC が発生したときに古い世代で圧縮を行うように CMS コレクターに指示することを理解しています。

しかし、それを正しく理解しているかどうかを確認したい (さまざまな情報源からつなぎ合わせた):

完全な GC は、ワールドを一時停止し、(CMS のリマーク フェーズの結果を使用して) 古い世代を収集して圧縮し、次に若い世代を収集し、オブジェクト (存在する場合) を昇格させ、世界を再開します。

この時点で、古い gen にゴミが浮遊している可能性があり、UseCMSCompactAtFullCollectionそれらをクリーンアップして古い gen を再度圧縮します (基本的に古い gen の別の GC)。とにかく世界が止まっているので、もう少し圧縮する価値があるかもしれません。

この説明は正しいですか?重要な詳細を見逃していませんか? ありがとう

4

1 に答える 1

0

このチケットは良い答えです: https://bugs.openjdk.java.net/browse/JDK-8027132

基本的に、私の理解は正しいです。割り当てエラーが発生したときにバックグラウンド モードから引き継ぐフォアグラウンド CMS モードがありました (システムはエラーが解決されるまで続行できないため)。

-XX:+UseCMSCompactAtFullCollectionserial old を使用して圧縮を実行するようにフォアグラウンド モードに指示します。フル GC では効果がありません。

フォアグラウンド モードは Java 8 で非推奨になりました (現在、完全な GC を実行することが唯一のオプションです)。フラグも同様です。

結論

フラグは無効であり、使用しないでください。

于 2015-12-31T18:17:16.887 に答える