我使用 jprofiler 检测客户端代码的内存泄漏。在启动时 java.util.hashmap$entry 使用的内存急剧增加到 1700KB。之后它也减少了。堆转储显示 java.lang.ref.finalizer 正在使用最大内存。它得出什么结论?当我尝试在我的源代码中找到 finalize() 时,它不存在。在 HTML 文件中 finalize() 是这样使用的。 finalize,是什么意思?原因是 finalize() 还是引用 hashmap$entry 导致了泄漏?
问问题
1735 次
2 回答
2
如果要查找内存泄漏,则应查看 Full GC 后使用了多少内存,如果有很多可终结的引用,则应查看两次,否则您可能会看到很多无关紧要的临时对象。
我怀疑您看到的两种数据类型都不是问题,尤其是如果它们定期使用量下降。寻找只会上升的消费。
于 2012-10-31T06:51:46.373 回答
0
它得出什么结论?
首先,你所谓的“证据”是乱码,不清楚应该是什么无乱码的版本。但是,基于一些猜测......我根本看不到内存泄漏的明显迹象。
相反,如果你有一个大的,要么变得无法访问,要么因为 GC 注意到堆太满而被清除, 看起来会发生什么。WeakHashMap
但是,我的猜测可能是错误的,这里可能有泄漏......
原因是 finalize() 还是引用 hashmap$entry 导致了泄漏?
也不一定。(事实上,如果真的存在存储泄漏,那么其中任何一个都不太可能是直接原因。)
于 2012-10-31T07:00:58.413 回答