1

10Gのヒープメモリ(メモリ内のデータ構造を表す)を消費するJava Web(Tomcat)アプリケーションがあります。ただし、Xmxを20Gに設定すると機能します。

ヒープメモリをたとえば11Gに設定すると、アプリケーションはすべてのデータをロードできません。連続したフルgcで入力されます。ガベージコレクターも完全なgcを効率的にするためにメモリを必要とするとします。正しいですか?gcの効率的な作業のためにどのくらいのメモリを追加する必要がありますか?ありがとう。

4

2 に答える 2

2

ロードするデータがたくさんあるので、永続的な生成割り当てを設定すると、より良い結果が得られます。実際、この永続的な生成は、クラスオブジェクトやメソッドオブジェクトなどのVM自体の反射データを保持するために使用されます。これらの反射オブジェクトは永続世代に直接割り当てられ、他の世代とは独立してサイズ設定されます。

-Xms10G -Xmx20G -XX:PermSize=5G -XX:MaxPermSize=12G
于 2013-03-12T15:40:32.227 に答える
2

最適なOldGenサイズを見つけるには:

  1. GCロギングを有効にする -XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion

  2. ライブデータサイズの計算=FullGC後の古いOldGenの占有率(詳細については、高度なJVMチューニングを参照してください)。ところで。平均を取得してみてください。数回のFullGCサイクル後のOldGenの占有率を観察することによって。

  3. 最適なOldGenSize ==ライブデータサイズ2倍から3倍

于 2013-03-12T19:06:59.107 に答える