VisualVM + VisualGC を使用して、このツールのメモリ使用量を分析しています。JVM とヒープ ダンプに関する私の誤解を明らかにしていると思われる、予期していなかったことに気付きました。
完全なコンテキストを提供するために、私がプロファイリングしているアプリケーションは、シリアライズされた巨大なブロブのルックアップを行い、その後、jammを使用してサイズを出力しています。その後、アプリはそのまま待機し、中止されるまで待機します。
VisualVM を使用すると、ヒープ使用量が予想どおりに増加していることがわかります。操作が完了し、アプリがスリープ状態になったら、VisualVM を使用して GC (または複数の GC、ボタンをクリックすることに夢中になります) をトリガーします。
- その時点での使用ヒープは
1,849,825,472 bytes
で、PermGem の使用スペースは25,864,448 bytes
です。 その時点で、明らかにしばらく時間がかかるヒープ ダンプを実行しますが、ヒープ ダンプが完了すると、使用されたヒープは
1,944,542,296 bytes
PermGen でほぼ同じになり25,892,800 bytes
ます。ここにパンチがあります: ヒープ ダンプは合計バイト数を示しています
2,299,816,089
。
そのような不一致を説明できるものは何ですか? 実験を数回繰り返しましたが、常に同じ結果が得られます。