MAT 不是一個萬能工具,它並不能處理全部類型的堆存儲文件。java
首先,啓動安裝配置好的 Memory Analyzer tool , 而後選擇菜單項 File- Open Heap Dump(eclipse會自動載入)來加載須要分析的堆轉儲文件。android
文件加載完成後,你能夠看到以下圖所示的界面瀏覽器
經過上面的概覽,咱們對內存佔用狀況有了一個整體的瞭解。多線程
另外,MAT 工具提供了一個很貼心的功能,將報告的內容壓縮打包到一個 zip 文件,並把它存放到原始堆轉儲文件的存放目錄下,這樣若是您須要和同事一塊兒分析這個內存問題的話,只須要把這個小小的 zip 包發給他就能夠了,不須要把整個堆文件發給他。而且整個報告是一個 HTML 格式的文件,用瀏覽器就能夠輕鬆打開。eclipse
接下來咱們就能夠來看看生成的報告都包括什麼內容,能不能幫咱們找到問題所在吧。您能夠點擊工具欄上的 Leak Suspects 菜單項來生成內存泄露分析報告,也能夠直接點擊餅圖下方的 Reports->Leak Suspects 連接來生成報告。工具
一般咱們都會採用下面的「三步曲」來分析內存泄露問題:優化
下面將用一個基本的例子來展現如何採用「三步曲」來查看生產的分析報告。spa
如今,讓咱們開始真正的尋找內存泄露之旅,點擊「Details 」連接,能夠看到以下圖所示對可疑對象的詳細分析報告。線程
咱們能夠很清楚的看到整個引用鏈,內存匯集點是一個擁有大量對象的集合,若是你對代碼比較熟悉的話,相信這些信息應該能給你提供一些找到內存泄露的思路了。對象
接下來,咱們再繼續看看,這個對象集合裏到底存放了什麼,爲何會消耗掉如此多的內存。
在這張圖上,咱們能夠清楚的看到,這個對象集合中保存了大量圖片對象的引用,可能就是它致使的內存泄露等問題。
再仔細看......
實際上這些位圖真正佔用的內存只有一丁點,可是java虛擬機爲其保留了70%的內存備用,這些內存沒有被回收,因此利用率幾乎爲 0 !
今後處你們均可以知道了,應用裏面圖片多了實際上是一件悲劇的事,至少可能會給應用帶來許多不可預知的問題,並且在圖片方面的內存優化是比較麻煩的,哎,最近搞內存泄露,涉及到動態庫,JNI,多線程,資源同步與競爭等,蛋疼的事 ......
有些圖片爲Android預加載部分的,具體可參看下面網址:http://stackoverflow.com/questions/9653457/locating-and-remedying-cause-of-large-heap-size
@成鵬致遠
(blogs:lcw.cnblogs.com)
(email:wwwlllll@126.com)
(qq:552158509)