私のアプリケーションでは、PSサバイバースペースはほとんどの時間(98%)使用されています。 PSサバイバースペースとは何ですか。これは正常ですか?そのようなシナリオでは何をすべきですか?誰かが説明できますか?前もって感謝します :)
まず、例を参照してください。ここ: サバイバースペースとは
通常、ヒープのYoungGeneration部分には2つのサバイバースペースがあります(たとえば、Hostpot VMの場合)。オブジェクトがmature旧世代に昇格する前。旧世代をクリーンアップするのはコストがかかるため。
いくつかの統計を収集して、サバイバースペースがほとんどの時間本当にいっぱいであるかどうかを確認します。 1つは常に空で、もう1つはデータが入力されていることがわかります。たとえば、 collecting GC stats に対するこの質問。
データを入手したら、次を探します。
サバイバースペースオーバーフロー-これは、サバイバースペースが小さすぎてオブジェクトがYoungHeapコレクション間で成熟できず、オブジェクトがOldGenerationにオーバーフローしない場合に発生します成熟する(そして昇進する前に死ぬ)時間。
また、-XX:+PrintTenuringDistribution
を使用してtenuring distributionを監視します。オブジェクトが成熟する速さを確認します。
UPDATE:ホットスポットメモリ管理ホワイトペーパー を読み、セクションシリアルコレクター、生存者スペースの素敵な説明があります:
注:Toスペースがいっぱいになると、EdenのライブオブジェクトまたはFromにコピーされていない場合、tenuredに関係なく彼らが生き残った若い世代のコレクションの数。 EdenまたはFromスペースにライブオブジェクトが残った後に残っているオブジェクトコピーは、定義上、ライブではなく、検査する必要はありません。