Android Studio Profiler ?檢查內(nèi)存簡(jiǎn)單介紹
如何使用?
第一步:點(diǎn)擊Profiler按鈕
?第二步:選擇
?第三步:選擇Capture heap dump 并點(diǎn)擊Record
解釋相關(guān)按鈕的功能
-
垃圾桶按鈕:用于強(qiáng)制執(zhí)行垃圾回收事件的按鈕,也就是GC。需要進(jìn)行強(qiáng)制GC時(shí)可以點(diǎn)擊。
-
Capture heap dump:抓取堆棧:(可以用來分析普通內(nèi)存泄露問題)
-
Record native allocations:抓取原生內(nèi)存(C/C++)分配
-
Record Java/Kotlin allcations:抓取Java/Kotlin 內(nèi)存分配
?
-
Record:點(diǎn)擊抓取一段時(shí)間的內(nèi)存分配信息。
-
Others:應(yīng)用使用的系統(tǒng)無法確定如何分類的內(nèi)存。
-
Code:應(yīng)用用于處理代碼和資源(如 dex 字節(jié)碼、經(jīng)過優(yōu)化或編譯的 dex 代碼、.so 庫(kù)和字體)的內(nèi)存。
-
Stack:應(yīng)用中的原生堆棧和 Java 堆棧使用的內(nèi)存。這通常與應(yīng)用運(yùn)行多少線程有關(guān)。
-
Graphics:圖形緩沖區(qū)隊(duì)列為向屏幕顯示像素(包括 GL 表面、GL 紋理等等)所使用的內(nèi)存。(請(qǐng)注意,這是與 CPU 共享的內(nèi)存,不是 GPU 專用內(nèi)存。)
-
Native:從 C 或 C++ 代碼分配的對(duì)象的內(nèi)存。
即使應(yīng)用中不使用 C++,即使編寫的代碼采用 Java 或 Kotlin 語言,Android 框架仍使用原生內(nèi)存代表您處理各種任務(wù),如處理圖像資源和其他圖形。
-
Java:從 Java 或 Kotlin 代碼分配的對(duì)象的內(nèi)存。
-
Allocated:應(yīng)用分配的 Java/Kotlin 對(duì)象數(shù)。此數(shù)字沒有計(jì)入 C 或 C++ 中分配的對(duì)象。
查看內(nèi)存分配情況
選擇Capture heap dump選項(xiàng),點(diǎn)擊Record。
?Leaks:當(dāng)存在泄露時(shí),會(huì)提示相應(yīng)的類,可以點(diǎn)擊跳轉(zhuǎn)??梢允褂靡逊峙鋵?duì)象列表上方的三個(gè)菜單選擇需檢查的堆以及如何組織數(shù)據(jù)。
選擇需檢查的堆:
-
image heap:系統(tǒng)啟動(dòng)映像,包含啟動(dòng)期間預(yù)加載的類。此處的分配確保絕不會(huì)移動(dòng)或消失。
-
zygote heap:寫時(shí)復(fù)制堆,其中的應(yīng)用進(jìn)程是從 Android 系統(tǒng)中派生的。
-
app heap:您的應(yīng)用在其中分配內(nèi)存的主堆。
選擇如何安排分配
Arrange by class:根據(jù)類名稱對(duì)所有分配進(jìn)行分組。這是默認(rèn)值。
Arrange by package:根據(jù)軟件包名稱對(duì)所有分配進(jìn)行分組。
Arrange by callstack:將所有分配分組到其對(duì)應(yīng)的調(diào)用堆棧。
選擇如何安排分配
-
Show all classes:展示所有Class類(包括系統(tǒng)類),這是默認(rèn)值。
-
Show activity/fragment Leaks:展示泄露的activity/fragment。
-
Show project class:展示項(xiàng)目的Class類。
-
Allocations:對(duì)象個(gè)數(shù) , new一個(gè)對(duì)象就代表一個(gè)。如果出現(xiàn)多個(gè) , 就要考慮是否有內(nèi)存泄漏了。
-
Native Size:此對(duì)象類型使用的原生內(nèi)存總量(以字節(jié)為單位)。只有在使用 Android 7.0 及更高版本時(shí),才會(huì)看到此列。
-
您會(huì)在此處看到采用 Java 分配的某些對(duì)象的內(nèi)存,因?yàn)?Android 對(duì)某些框架類(如 Bitmap)使用原生內(nèi)存。
-
Shallow Size:此對(duì)象類型使用的 Java 內(nèi)存總量(以字節(jié)為單位)。
-
Retained Size:為此類的所有實(shí)例而保留的內(nèi)存總大小(以字節(jié)為單位)。
-
Depth:從任意 GC 根到選定實(shí)例的最短跳數(shù)。
分析問題關(guān)注:Allocations? 與 Shallow Size
實(shí)戰(zhàn)的泄露問題分析
?
NewMeFragment發(fā)生了內(nèi)存泄露。
可以點(diǎn)擊如圖Show nearest GC root only 按鈕,這時(shí)候就可以看到離他最近GC引用有兩條。文章來源:http://www.zghlxwxcb.cn/news/detail-416323.html
private final ArrayList<Fragment> mFoldFragments = new ArrayList<>(4);
所以需要在合適的地方釋放。文章來源地址http://www.zghlxwxcb.cn/news/detail-416323.html
到了這里,關(guān)于Android Studio Profiler 檢查內(nèi)存的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!