2

jprofilerを使用して、クライアントコードのメモリリークを検出しました。開始時に、java.util.hashmap$entryによって使用されるメモリは1700KBまで大幅に増加していました。その後も減少しました。ヒープダンプショーjava.lang.ref.finalizerは最大のメモリを使用していました。それは何を結論付けますか?ソースコードでfinalize()を見つけようとすると、そこにありませんでした。HTMLファイルではfinalize()がこのように使用されました。 ファイナライズ、それはどういう意味ですか?原因はfinalize()であるか、参照hashmap $ entryがリークを引き起こしていますか?

4

2 に答える 2

2

メモリリークを探したい場合は、フルGC後に使用されているメモリの量を確認する必要があります。ファイナライズ可能な参照がたくさんある場合は2回、そうでない場合は、問題ではない一時オブジェクトがたくさん表示される可能性があります。

定期的に使用量が減少している場合は特に、表示されているデータ型のどちらも問題ではないと思います。上がるだけの消費を探してください。

于 2012-10-31T06:51:46.373 に答える
0

それは何を結論付けますか?

まず、いわゆる「証拠」が文字化けしており、文字化けしていないバージョンがどうあるべきかが明確ではありません。ただし、いくつかの推測に基づいて...メモリリークの明確な兆候はまったく見られません。

むしろ、到達不能になった、またはヒープがいっぱいになりすぎていることにGCが気付いたためにクリアされ たラージがあった場合、どうなるかと思われます。WeakHashMap

しかし、私の推測は間違っている可能性があり、ここでリークが発生する可能性があります...

原因はfinalize()であるか、参照hashmap $ entryがリークを引き起こしていますか?

必ずしもどちらでもありません。(実際、実際にストレージリークが発生した場合、それらのいずれかが直接の原因である可能性はほとんどありません。)

于 2012-10-31T07:00:58.413 に答える