2012-02-21 10 views
1

GCはもはや参照を持たないオブジェクトのメモリを解放しますが、使用されなくなったオブジェクトへの参照があるかどうかを確認する有効な方法はありますか?Java GCとメモリ使用量のトラッキング

もう使用されていないオブジェクトへの参照を残さないようにする方法のヒントは、大きく強化されています。

この状況でWindowsタスクマネージャを使用していますか?もしそうなら、それを使って私のプログラムを批判する方法のヒントも助けになるでしょう。

ありがとうございました。

答えて

3

チェックは簡単です。あなたはまだ参照しているすべてのオブジェクトを使用しています。

"メモリリーク"のよくある問題は、コレクションにオブジェクトを追加し、オブジェクトが不要になったときにそれらをクリーンアップすることを忘れることです。この問題を回避する方法は、WeakReferenceまたはこれらを使用するコレクションを使用することです。弱いハッシュマップ。これらは、参照が他の場所になくなったときにクリーンアップされます。

IMHO、Windowsタスクマネージャは、ここのヘルプよりも混乱する可能性があります。 ;)

YoursKitのようなVIsualVMまたは商用メモリプロファイラを使用すると、メモリ消費量を調べるのに最適な方法です。

1

「使用されなくなった」オブジェクトはガベージコレクションされます。 「使用する」とは、強い参照を保持することを意味します。この問題は、使用するつもりはないオブジェクトで起こりますが、それでも誤って参照されることがあります。

これらのオブジェクトの検索には、VisualVMやJProfilerなどのJavaプロファイラーのみが役立ちます。

JProfilerでメモリリークを見つける方法を示すスクリーンキャストはhereです。

免責事項:私の会社はJProfilerを開発しています。

1

What is a “Memory leak” in Java?という記事が便利です(私はここで宣伝しているツールについてはわかりません)。

参照されているが使用されていないオブジェクトの検索方法はわかりませんが、ガベージコレクションできるオブジェクトもプログラムに影響を与えます。

GCアクティビティを追跡するには、Java non standard option-Xloggc:<file>を簡単に使用できます。これにより、GCアクティビティが指定されたファイルに記録されます。ガベージコレクションでアプリケーションがどの程度ビジーであるかを最初に感じ取ることができます。

私はあなたの質問に答えなかったが、これはあなたにとって有益な情報であることを願っています。