Android內(nèi)存分析:profiler + MemoryAnalyzer (MAT)

一些內(nèi)存泄漏的場景:

1 非靜態(tài)內(nèi)部類的靜態(tài)實例
2 多線程相關(guān)的匿名內(nèi)部類/非靜態(tài)內(nèi)部類
3 Handle內(nèi)存泄漏
4 未正確使用 Context
5 靜態(tài)View
6 WebView
7 資源對象未關(guān)閉
8 集合中對象沒清理
9 Bitmap對象
10 監(jiān)昕器未關(guān)閉

根據(jù)內(nèi)存泄漏場景1苞七,寫一個內(nèi)存泄漏的Activity:

public class MemoryTestActivity extends AppCompatActivity {

    static Inter mInter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_memory_test);
        mInter = new Inter();
    }

    class Inter{
    }
}

運行app豫领,使用AndroidStudio(v4.0.2)的profiler工具進行分析:

打開這個MemoryTestActivity喊熟,然后finish,使用AndroidStudio底部的profiler工具查看app運行狀態(tài)怜浅,如下圖:


0.png

點擊MEMORY


1.png

點擊 Dump Java heap,會生成下面的堆信息(手動選中下圖的1,2處)


2.png

從上圖可以看到MemoryTestActivity有內(nèi)存泄漏,泄漏內(nèi)存272字節(jié)位他。

這里的代碼比較簡單吧黄,是主動寫的一個泄漏情景來測試用的部服,在實際開發(fā)中,可能即使找到了內(nèi)存泄漏的Activity拗慨,也并不容易分析出內(nèi)存泄露的原因廓八,就需要使用MAT工具對這個HeapDump數(shù)據(jù)進行分析

使用MAT工具分析這個 HeapDump 數(shù)據(jù)

1 保存 HeapDump 數(shù)據(jù)

在上圖標記3處,右鍵-->Export...-->保存到電腦中赵抢,命名為a.hprof

2 使用hprof-conv工具轉(zhuǎn)換數(shù)據(jù)格式

hprof-conv是androidSDK中的一個工具剧蹂,在platform-tools目錄中:$(SDK_HOME)\platform-tools\hprof-conv.exe,使用CMD命令:

E:\temp>hprof-conv -z a.hprof a-mat.hprof

3 使用 MemoryAnalyzer (MAT) 分析a-mat.hprof

打開MemoryAnalyzer烦却,點擊左上角File-->Open Heap Dump...宠叼,打開a-mat.hprof


3.png

點擊Histogram,查看柱狀圖其爵,在Class name下面輸入MemoryTestActivity冒冬,回車,進行過濾摩渺,可以看到內(nèi)存泄漏的Activity
(也可以使用上面的OQL進行查詢)


4.png

在MemoryTestActivity(標記2處)上右鍵-->Merge Shortest ... -->exclude all ... 简烤,進入merge_shortest_paths視圖


5.png

在上面的上圖中,可以看到mInter的引用摇幻,由于mInter是靜態(tài)的横侦,所以MemoryTestActivity退出后不會銷毀,而這個Inter類是非靜態(tài)內(nèi)部類囚企,會持有MemoryTestActivity的引用丈咐,所以MemoryTestActivity不會被回收。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末龙宏,一起剝皮案震驚了整個濱河市棵逊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌银酗,老刑警劉巖辆影,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徒像,死亡現(xiàn)場離奇詭異,居然都是意外死亡蛙讥,警方通過查閱死者的電腦和手機锯蛀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來次慢,“玉大人旁涤,你說我怎么就攤上這事∑认瘢” “怎么了劈愚?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闻妓。 經(jīng)常有香客問我菌羽,道長,這世上最難降的妖魔是什么由缆? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任注祖,我火速辦了婚禮,結(jié)果婚禮上均唉,老公的妹妹穿的比我還像新娘是晨。我一直安慰自己,他們只是感情好浸卦,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布署鸡。 她就那樣靜靜地躺著,像睡著了一般限嫌。 火紅的嫁衣襯著肌膚如雪靴庆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天怒医,我揣著相機與錄音炉抒,去河邊找鬼。 笑死稚叹,一個胖子當著我的面吹牛焰薄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扒袖,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼塞茅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了季率?” 一聲冷哼從身側(cè)響起野瘦,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鞭光,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吏廉,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年惰许,在試婚紗的時候發(fā)現(xiàn)自己被綠了席覆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡汹买,死狀恐怖佩伤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晦毙,我是刑警寧澤畦戒,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站结序,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纵潦。R本人自食惡果不足惜徐鹤,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邀层。 院中可真熱鬧返敬,春花似錦、人聲如沸寥院。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秸谢。三九已至凛澎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間估蹄,已是汗流浹背塑煎。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留臭蚁,地道東北人最铁。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像垮兑,于是被迫代替她去往敵國和親冷尉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359