1

NetBeans プロファイラー (実際には組み込みの VisualVM) を使用して、Java アプリケーションのメモリ消費を監視しています。ヒープビュー、存続世代ビュー、およびメモリ ダンプを使用して、メモリ リークを追跡します。

ヒープ ビューには使用済みメモリの合計が表示されますが、ガベージ コレクタがメモリを管理する方法が原因で、少し混乱しています。グラフは本質的に鋸歯状であるため、特に読みにくいです。場合によっては、GC を強制的に実行して、実際のメモリ消費量をより正確に把握できるようにします。

私は疑問に思っていました:メモリプロファイリングにより適したガベージコレクタがあり、実際のメモリ使用量に近いヒープグラフを生成するものはありますか? -XXまたは、より一般的には、メモリリークを効率的に追跡するために、どの JVM 設定 (オプションまたはその他) を使用できますか?

ヒープグラフの例

4

2 に答える 2

4

グラフに表示されているの、アプリケーションのメモリ使用率の実際の動作です。繰り返される鋸歯状のパターンは、清掃されている短命のオブジェクトの割り当てが原因である可能性があります。メモリリークがあると思われる場合は、ヒープダンプスナップショットを作成し、ヒープに保持されているオブジェクトを確認してください。JConsoleを使用してスナップショットを作成し、 HPjmeterを使用して結果のダンプファイルを開くことができます。

于 2011-03-14T17:49:48.073 に答える
1

プロファイラーなしで使用する予定のGCを使用することをお勧めします。このアプローチを使用すると、アプリケーションがどのように動作するかに似たグラフが得られますが、常に読みやすいとは限りません。

より読みやすく、現実的ではないグラフが必要な場合は、最小メモリサイズを1GBに増やすことができます。これにより、GCが少なくなり、グラフのスパイクが少なくなりますが、グラフをより美しくする以外は役に立たない場合があります。

于 2011-03-14T17:50:20.243 に答える