私のアプリケーションでは、ほとんどの場合、PS サバイバー スペースがほぼいっぱい (98%) になっています。PSサバイバースペースとは何かわかりません。これは正常ですか?そのようなシナリオでは何をすべきですか?
1 に答える
まず、たとえばここを参照してください:サバイバースペースとは?
通常、ヒープの YoungGeneration 部分には 2 つのサバイバー スペースがあります (例: Hostpot VM 用)。それらは、オブジェクトを古い世代に昇格させる前に成熟させるために存在します。古い世代をクリーンアップするには、よりコストがかかるためです。
いくつかの統計を収集して、ほとんどの場合、生存者スペースが実際にいっぱいになっているかどうかを確認してください。1 つが常に空で、もう 1 つが入力されていることがわかります。たとえば、GC 統計の収集については、この質問を参照してください。
データを取得したら、次を探します。
サバイバー スペース オーバーフロー- これは、サバイバー スペースが小さすぎて、YoungHeap コレクション間でオブジェクトを成熟させることができず、オブジェクトが成熟する時間がないまま OldGeneration にオーバーフローしている (昇格される前に終了している) 場合に発生します。
また、 を使用して在職期間の分布を監視し
-XX:+PrintTenuringDistribution
ます。オブジェクトが成熟する速さを確認するため。
更新: Hotspot Memory Management Whitepaperを読んで 、セクションSerial Collectorを参照してください。Survivorスペースの優れた説明があります。
注: Toスペースがいっぱいになると、コピーされていないEdenまたはFromからのライブ オブジェクトは、生き残った若い世代のコレクションの数に関係なく、Tenuredになります。ライブ オブジェクトがコピーされた後にEdenまたはFromスペースに残っているオブジェクトは、定義上、ライブではなく、調べる必要はありません。