Eclipse Memory Analyzer Tool(MAT)是一個強(qiáng)大的基于Eclipse的內(nèi)存分析工具撤卢,可以幫助我們找到內(nèi)存泄露,減少內(nèi)存消耗。
下載安裝
1妻味、MAT下載地址
2、首先將eclipse安裝成功欣福。
3责球、把MermoryAnalyzer中的mat文件夾復(fù)制到eclipse安裝目錄的dropins下,重新啟動eclipse拓劝。查看Window->Preferences雏逾,出現(xiàn)Memory Analyzer代表安裝mat成功。
模擬使用
模擬內(nèi)存溢出
1郑临、測試方法
2栖博、配置運行參數(shù)
-Xms10m -Xmx10m
-XX:+HeapDumpOnOutOfMemoryError
3、執(zhí)行結(jié)果
mat分析
1厢洞、mat打開hprof文件
2仇让、內(nèi)存分析概況
Shallow Size:
對象自身占用的內(nèi)存大小典奉,不包括它引用的對象。
針對非數(shù)組類型的對象妹孙,它的大小就是對象與它所有的成員變量大小的總和秋柄。當(dāng)然這里面還會包括一些java語言特性的數(shù)據(jù)存儲單元。
針對數(shù)組類型的對象蠢正,它的大小是數(shù)組元素對象的大小總和骇笔。
Retained Size:
Retained Size=當(dāng)前對象大小+當(dāng)前對象可直接或間接引用到的對象的大小總和。(間接引用的含義:A->B->C, C就是間接引用)
換句話說嚣崭,Retained Size就是當(dāng)前對象被GC后笨触,從Heap上總共能釋放掉的內(nèi)存。
不過雹舀,釋放的時候還要排除被GC Roots直接或間接引用的對象芦劣。他們暫時不會被被當(dāng)做Garbage。
可參考:https://bjyzxxds.iteye.com/blog/1532937
3说榆、dominator_tree視圖
該視圖以實例對象的維度展示當(dāng)前堆內(nèi)存中Retained Heap占用最大的對象虚吟,以及依賴這些對象存活的對象的樹狀結(jié)構(gòu)。
4签财、Histogram視圖
該視圖以Class類的維度展示每個Class類的實例存在的個數(shù)串慰、 占用的 [Shallow內(nèi)存] 和 [Retained內(nèi)存] 大小,可以分別排序顯示唱蒸。
5邦鲫、Leak Suspects
6、OQL
OQl是對象查詢語言神汹,和SQL語句很相似庆捺,是從堆查詢對象的,類相當(dāng)于表屁魏,對象相當(dāng)于行滔以,對象屬性相當(dāng)于列。