10

アプリケーションでpermgenエラーをデバッグしようとしています。VisualVMを実行してアプリのプロファイルを作成し、メモリスナップショットのヒープダンプを取得しました。

分析のためにスナップショットをVisualVMにロードすると、現在、クラスリストに複数のクラスが複数回表示され、すべてが0インスタンス、0サイズでリストされていることがわかります-これらのクラスの1つだけを期待しています(おそらくそのクラスローダーにリンクされています)-ありますかインスタンスなしでこれらのクラスへの参照をまだ保持しているものを判別する方法はありますか?ダンプ(.hprof)をロードして、参照を保持しているものを分析できる場合は、別のツールを使用してください。

ありがとう!

4

2 に答える 2

43

ええと、「MATを使う」と言っても、実際には質問に答えられません!

VisualVMでこれを行うには、サンプラービューまたはプロファイラービューに「ヒープダンプ」というラベルの付いたボタン(右上)があります。これをクリックすると、ヒープアナライザーが開きます。[クラス]タブの下に、ロードされているすべてのクラスが表示されます。下部に検索ボックスがあり、興味のあるクラス名を入力します。フィルターされたビューで、問題のクラスをダブルクリックします。

これにより、インスタンスビューが開きます。左側のペインでインスタンスを右クリックし、[最も近いGCルートを表示]を選択して、オブジェクトを参照しているものを見つけます。

バーニー

于 2015-12-06T17:29:59.157 に答える
7

私はこのようなものにMATを使用します。大きなヒープでもうまく機能します。

于 2013-01-15T15:56:44.607 に答える