一、概述
Memory AnalyzerTool是一個快速且功能豐富的Java堆分析器,可幫助您查找內存泄漏並減少內存消耗。使用Memory Analyzer分析具有數億個對象的高效堆轉儲,快速計算對象的保留大小,查看誰阻止垃圾收集器收集對象,運行報告以自動提取泄漏嫌疑者。
二、工具使用
1)heap dump文件介紹
Heap Dump,它也叫堆轉儲文件,是java進程在某個時間內的快照。它在觸發快照的時候保存了很多信息:java對象和類信息。通常在寫Heap Dump文件前會觸發一次Full GC。
2)獲取heapdump文件
通過jvisualVM工具中的jmx連接,在項目運行之前和運行之后,分別右擊生成堆dump文件*. hprof文件,並將其下載到本地;用於mat分析;
3)mat內存分析工具使用
l 打開heapdump文件
通過菜單【file ---open heapdump】打開heapdump文件,並生成多個分析結果文件;
l Overview頁簽
展示進程當前內存的使用情況信息
l Histogram
點擊overview頁簽下方的histogram,可打開histogram頁簽,展示內存中的對象,對象的個數及大小;
Class Name : 類名稱,java類名
Objects : 類的對象的數量,這個對象被創建了多少個
Shallow Heap :一個對象內存的消耗大小,不包含對其他對象的引用
Retained Heap :是shallow Heap的總和,也就是該對象被GC之后所能回收到內存的總和;
選擇其中某個對象,右擊打開菜單選擇 list objects ->with incoming refs 將列出該類的實例:
快速找出某個實例沒被釋放的原因,可以右健 Path to GC Roots–>exclue all phantom/weak/soft etc. reference;
l Leak Suspects
點擊【overview】頁簽下方的leaksuspects,打開leaksuspects頁簽,自動分析內存內存泄漏的原因,可以直接定位到Class和行數;
l Dominator Tree
點擊【OverView】頁簽下方的Domainator,可打開domainator頁簽;列出線程的樹結構,及線程下面對象占用內存的空間。
l Top Comsumers
點擊【OverView】頁簽下方的TopComsumers,打開TopComsumers頁簽;通過圖形列出內存使用最大的對象;