2011-01-07 9 views
0

実行中のプロセスでjmap -histoコマンドを使用すると、30分ごとに明らかに(デスクトップアプリケーションの)メモリリークであるオブジェクトが見つかりました。リーク(すなわちその数のインスタンスの時間をかけて成長し、膨大な量だけオブジェクトの種類のみ)の責任どのような種類のオブジェクトがメモリリークを引き起こしているのか、今は何ですか?

目的は、INT []あります。

BufferedImageが犯人であると思われますが、私はそれについてはわかりません(私はフラッシング/ヌル化に大変注意を払っていますが、まだ漏れがあると思います)。

しかし私はまた、プログラムの別の部分でint []を使用しています、そして、私は単に漏れがどこから来ているかについて確信していません。 jmap -histoの出力は、あまりにも私の好みに「薄い」ものです。

int[]のリークがどこで発生しているのかをどのように特定することができますか。

単純にjmap -histoがどれほどシンプルであるかを指摘したいと思います。多くのオブジェクトでは、インスタンス数と使用メモリ数を見るだけで、リークを検出するのに十分ですさらなる分析。

私の場合、私は別のものが必要です。

私の質問は、どのような種類のツールでも漏れを見つけられるとは限りません。私の質問は:私のアプリ(または私のアプリが使用しているAPI)がのint []をリークしていることを知っ

、うまくいけば、見つけるために、どのような手順Iは、(例えば、お気に入りのプロファイラを使用して)取ることができますリーク?

このツールは、Java 1.5 OS X 10.4 Apple JVMで動作する必要があります。

答えて

1

オブジェクトを「保持されたヒープ」でソートする必要があります。非常に迅速にすべてのint []を含む意味のあるオブジェクト/クラスを見つけることができます。

+0

ツールは*保持されたヒープ*でソートできますか? – NoozNooz42

+0

あなたはそれのためにeclipse MATを使うことができます:) –

1

Eclipse MATを使用することをお勧めします。個人的には、jProfilerの機能を知りません。次に、ヒープダンプをロードすると、int []の受信参照のいくつかをチェックすることができます。配列を作成したピンポイントを細くして、どの保持クラスが実際に大量に作成されているかを確認できます。

関連する問題