我使用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