在分析前可以閱讀下這篇文章,很多內容就都知道了https://www.jianshu.com/p/738b4f3bc44b,下面我來分析上一篇文章內存泄漏的為問題
1。上一篇中已經生成了hprf的文件了,現在我們就對他進行分析,確認電腦已經安裝了MAT工具,在MAT直接打開文件,就看到如下圖,在點擊
Leak Suspects 這個鏈接,查看內存泄漏
2.問題顯示,查看詳情
3.詳細信息中 這一步就很看到其實arraylist這里的占用的實際堆有些多,需堆,和保留堆,在鏈接中有解釋,
t表示GC root到內存消耗聚集點的最短路徑,如果某個內存消耗聚集點有路徑到達GC root,則該內存消耗聚集點不會被當做垃圾被回收。也定位是arraylist,這個函數有問題,查看代碼,發現list只增,不釋放,代碼已定位
4.其實有最方便的一種方式,抓取兩個文件,進行對比 查看堆的大小,如果堆的某些數據持續上升,且不下降,就可能是存在問題,在線程診斷中也有提出main 函數中存在內存泄漏