我使用jprofiler为我的客户端代码检测内存泄漏。启动java.util.hashmap $ entry所使用的内存急剧增加至1700KB。之后它也下降了。堆转储显示java.lang.ref.finalizer正在使用最大的内存。它的结论是什么?当我尝试在我的源代码中查找finalize()时,它不在那里。在HTML文件finalize()中使用像这样。 finalize,这是什么意思?原因是finalize()或引用hashmap $条目导致泄漏?java中的内存泄露
回答
如果你想查找内存泄漏,你应该看看完整的GC后使用了多少内存,如果你有很多finalisable引用,则要两次,否则你很可能会看到很多临时对象,没关系。
我怀疑你看到的数据类型都不是问题,尤其是如果他们定期使用它们。寻找消费只会增加。
谢谢彼得。事实上,几乎每个数据数据类型的内存消耗值都在增加。我的意思是说,如果10分钟后消耗现在为50kb,则为56kb,执行gc后消耗为53kb意味着10分钟后3kb内存增加,并且周期性地仅以这种方式增加。它确认我的应用程序有内存泄漏吗? –
完整GC后许多MB增加可能是泄漏。我不担心几KB,因为它可能是“噪音”。如果一切都在增加,则指向一个共同的因素,例如一个持有所有这些增长阶层的集合。 –
非常感谢彼得。 –
它是什么结论?
首先,你所谓的“证据”是乱码,不清楚什么是不应该的。然而,基于一些猜测...我可以看到没有任何明显的内存泄漏迹象。
相反,它看起来如果你有一个大WeakHashMap
,要么成为不可达,或者说得到了清理掉,因为GC注意到堆是越来越太饱会发生什么。
然而,我猜测可能是错误的,而且有可能在这里泄漏...
原因是敲定()或参考的HashMap $项导致泄漏?
也不一定。 (事实上,如果有确实是一个存储泄漏的话,那是不可能,要么这些是直接原因。)
谢谢斯蒂芬。事实上,几乎每个数据数据类型的内存消耗值都在增加。我的意思是说,如果10分钟后消耗现在为50kb,则为56kb,执行gc后消耗为53kb意味着10分钟后3kb内存增加,并且周期性地仅以这种方式增加。它确认我的应用程序有内存泄漏吗? –
单个数据点不是内存泄漏的证据。一致的长期趋势将是泄漏的证据。 –
- 1. java中的内存泄露
- 2. java中的内存泄露
- 3. java liferay项目中的内存泄露
- 4. layoutsubviews中的内存泄露
- 5. Swing中的内存泄露
- 6. jdk1.7.0中的内存泄露
- 7. perl中的内存泄露
- 8. libxml2.2中的内存泄露
- 9. Three.js中的内存泄露
- 10. simpleftp中的内存泄露
- 11. tomcat中的内存泄露
- 12. Apache内存泄露
- 13. tomcat8内存泄露
- 14. JAXBContext.newInstance内存泄露
- 15. PrincipalSearcher.FindByIdentitiy()内存泄露
- 16. NSAutorelease内存泄露
- 17. CGContextDrawPDFPage内存泄露
- 18. mod_perl内存泄露
- 19. Beautifulsoup内存泄露
- 20. BHO内存泄露
- 21. android内存泄露
- 22. IronPython内存泄露?
- 23. Grails内存泄露
- 24. CIContext内存泄露
- 25. JDOPersistenceManager内存泄露
- 26. mscorwks.dll内存泄露
- 27. avplayer内存泄露
- 28. NSNotificationCenter内存泄露
- 29. SubstringToIndex内存泄露
- 30. Valgrind的内存泄露
有没有这样的事情'java.lang.ref.finalizer'或'$的java.util.HashMap entry'。请使用REAL类名称或方法名称或任何它们更新问题。 –
你为什么认为有内存泄漏?你的应用程序是否给你一个'OutOfMemoryException'?也许你只需要改变启动应用程序的内存量。 – radimpe