通過jmap分析內存泄漏


jmap -histo:live pid

首先應該明確的是,jmap命令只能為內存泄漏提供一些線索和依據,但是不能確切的排查出代碼中哪一行真正的出現了問題。

舉個例子:一個池子有1000L的容量,前面的800L紅色的水一直沒有問題,這時向其中倒入了201L藍色的水,池子里面的水溢出了,我能確切的說是這800L紅色的水的問題導致的嗎?我能確切的說是這201L藍色的水導致的嗎?只能說懷疑是800L的問題然后去看。

通過jmap能夠幫我們排查問題提供一些依據,讓我們對於排查問題更加的有跡可循

下面看下通過簡單的Demo尋找問題的例子

image.png

image.png

image.pngimage.png

通過上圖,我在不同的時刻執行了jmap命令,可以看到instances是一直在不停的上升的,這樣我們懷疑,會不會是com.nanjing.NanJing28Suo這個類創建了過多的實例,而沒有被釋放導致的內存溢出呢?這時候就需要到代碼中尋找,哪里進行了實例化這個類。

image.png

通過idea的抖索功能等找到類實例化的地方,可以看到我這里就是在LIst中不停的添加NanJing28Suo這個實例,因為list中持有這些個NanJing28Suo的引用,而代碼執行結束的時候也沒有對該l


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM