Android使用Profiler查看應(yīng)用內(nèi)存分析的操作步驟
內(nèi)存分析是Profiler中的一個組件,
可以顯示應(yīng)用內(nèi)存使用情況實時圖表,幫助我們捕獲堆轉(zhuǎn)儲、強制執(zhí)行垃圾回收以及跟蹤內(nèi)存的分配情況。
打開內(nèi)存分析步驟:
1、依次點擊View→Tool Window→Profiler
2、從Profiler工具欄中選擇要分析的設(shè)備以及應(yīng)用進程。(需要優(yōu)先確保設(shè)備通過USB正常連接IDE)
3、點擊MEMORY時間軸上的任意位置可以打開內(nèi)存分析。
一、分析應(yīng)用內(nèi)存的目的
當(dāng)應(yīng)用存在不再使用的某些對象時,垃圾回收器會將未使用的內(nèi)存釋放。如果應(yīng)用分配內(nèi)存的速度比系統(tǒng)回收的速度快時,回收器要釋放足夠的內(nèi)存來滿足應(yīng)用的分配需要時,應(yīng)用可能會產(chǎn)生延遲,從而可能導(dǎo)致應(yīng)用跳幀,使應(yīng)用明顯變慢。
即使應(yīng)用使用過程中未表現(xiàn)出變慢,但如果存在內(nèi)存泄漏,應(yīng)用掛在后臺運行時,依然會保留相應(yīng)的內(nèi)存。從而導(dǎo)致系統(tǒng)強制執(zhí)行不必要的垃圾回收時間,從而拖慢系統(tǒng)其余部分的內(nèi)存性能,最終使系統(tǒng)被迫終止應(yīng)用進程以回收內(nèi)存。致使用戶返回應(yīng)用時,必須重啟。影響到用戶體驗。
因此可以通過以下幾種操作從而防止這些問題:
1、在時間軸上查找可能會導(dǎo)致性能問題的不理想內(nèi)存分配進行查看;
2、轉(zhuǎn)儲java堆以便查看在任何給定時間內(nèi)有哪些對象在占用內(nèi)存。在一個較長的時間段內(nèi)進行多次堆轉(zhuǎn)儲有助于分析內(nèi)存泄漏點,常用該種方式檢測;
3、記錄正常與極端情況下用戶交互期間的內(nèi)存分配情況。從而準(zhǔn)確識別代碼中可能存在的短時間內(nèi)分配過多對象而出現(xiàn)泄漏的情況。
二、Profiler概覽

打開Profiler后,選擇設(shè)備以及應(yīng)用,則可以看到時間軸界面,其中包含CPU、MEMORY、ENERGY的情況。其中MEMORY為內(nèi)存分析器、ENERGY為電池分析器;
其中我們主要是用內(nèi)存分析器工具。

當(dāng)中有三項選擇:Capture heap dump:獲取堆轉(zhuǎn)儲,該為目前主要檢測手段,稍后講解;
Record native allocations:獲取設(shè)備上錄制原生分配情況;
Record Java/Kotlin allocations:獲取錄制Java和Kotlin分配情況;
三、查看內(nèi)存分配情況
1、內(nèi)存分配情況表可以顯示內(nèi)存中每個java對象和JNI引用的分配方式。因此,內(nèi)存分析器可以顯示有關(guān)對象分配情況信息如下:
--分配了哪些類型的對象以及他們使用了多少空間;
--每個分配堆棧的軌跡,包括在哪些線程中;
--對象何時被取消分配等;
如果需要中Android 10以及更高版本的設(shè)備上錄制原生分配情況,需要選擇Record native allocations,然后點擊Record,錄制會持續(xù)到點擊Stop為止,之后內(nèi)存分析界面會轉(zhuǎn)換到顯示原生錄制的屏幕中。

注意:低于android10,record native allocations選項不可使用。
如果需要錄制java和kotlin分配情況,請選擇record java/kotlin allocations,然后選擇record。如果設(shè)備搭載的是android8+,則內(nèi)存分析將可以轉(zhuǎn)換顯示就行錄制的界面,可以按緊選中某一塊區(qū)域進行查看。

四、捕獲堆轉(zhuǎn)儲
堆轉(zhuǎn)儲顯示捕獲堆轉(zhuǎn)儲時應(yīng)用中對象正在使用的內(nèi)存,尤其是在長時間的操作中,堆轉(zhuǎn)儲會顯示認為不應(yīng)該再存在的內(nèi)存對象,從而幫助識別內(nèi)存泄漏。
如果需要捕獲堆轉(zhuǎn)儲,需要選擇capture heap dump,然后選擇record。一段時間后,就會生成heap dump,可進行查看,也可以通過第三方工具Memory Analyzer進行查看。

由于新版IDE剔除了Memory Analyzer工具,因此,目前查看需要通過eclipse中的插件工具memory analyzer進行查看。可通過工具下載進行試驗:[http://www.eclipse.org/mat/downloads.php]
通過工具打開phrof文件,進入主界面

點擊leak suspects可查看疑似內(nèi)存泄漏的地方,點擊detail可以查看分析出ArryList存放對象Person出了問題。

也可以在overview中點擊dominator_tree查看堆占比,可以看出一個線程占比過高,集合中對象的數(shù)量過多等。

以上就是Android使用Profiler查看應(yīng)用內(nèi)存分析的操作步驟的詳細內(nèi)容,更多關(guān)于Android Profiler查看應(yīng)用內(nèi)存分析的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android實現(xiàn)讓圖片在屏幕上任意移動的方法(拖拽功能)
這篇文章主要介紹了Android實現(xiàn)讓圖片在屏幕上任意移動的方法,實例分析了Android拖拽功能的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2016-08-08
Android仿Flipboard動畫效果的實現(xiàn)代碼
這篇文章主要介紹了Android仿Flipboard動畫效果的實現(xiàn)代碼,本文圖文并茂給大家介紹的非常詳細,需要的朋友可以參考下2018-01-01
android 手機SD卡讀寫操作(以txt文本為例)實現(xiàn)步驟
要完成SD卡讀寫操作首先對manifest注冊SD卡讀寫權(quán)限其次是創(chuàng)建一個對SD卡中文件讀寫的類寫一個用于檢測讀寫功能的的布局然后就是UI的類了,感興趣的朋友可以參考下,希望可以幫助到你2013-02-02

