一绣的、簡介
Heap Viewer是android studio自帶的內(nèi)存分析小工具,5.0及其以上系統(tǒng)可使用。
二、使用介紹
2.1 Heap Viewer的使用面板介紹
操作順序即按圖中的字母順序画切。
可以看到數(shù)據(jù)分為兩個部分:
總覽:
字段說明:
列名 | 含義 |
---|---|
Heap Size | 堆棧分配給App的內(nèi)存大小 |
Allocated | 已分配使用的內(nèi)存大小 |
Free | 空閑的內(nèi)存大小 |
%Used | Allocated/Heap Size,使用率 |
Objects | 對象數(shù)量 |
詳情:
字段說明:
類型 | 含義 |
---|---|
free | 空閑的對象 |
data object | 數(shù)據(jù)對象,類類型對象,最主要的觀察對象 |
class object | 類類型的引用對象 |
1-byte array(byte[],boolean[]) | 一個字節(jié)的數(shù)組對象 |
2-byte array(short[],char[]) | 兩個字節(jié)的數(shù)組對象 |
4-byte array(long[],double[]) | 4個字節(jié)的數(shù)組對象 |
non-Java object | 非Java對象 |
下面是每一個對象都有的列名含義:
列名 | 含義 |
---|---|
Count | 數(shù)量 |
Total Size | 總共占用的內(nèi)存大小 |
Smallest | 將對象占用內(nèi)存的大小從小往大排囱怕,排在第一個的對象占用內(nèi)存大小 |
Largest | 將對象占用內(nèi)存的大小從小往大排霍弹,排在最后一個的對象占用的內(nèi)存大小 |
Median | 將對象占用內(nèi)存的大小從小往大排,拍在中間的對象占用的內(nèi)存大小 |
Average | 平均值 |
當我們點擊某一行時娃弓,可以看到如下的柱狀圖:
橫坐標是對象的內(nèi)存大小典格,這些值隨著不同對象是不同的,縱坐標是在某個內(nèi)存大小上的對象的數(shù)量台丛。
2.2 Heap Viewer 如何分析內(nèi)存問題
上小節(jié)我們了解了詳細的面板信息耍缴,下面我們來看看如何分析內(nèi)存問題:
Heap Viewer中的數(shù)值會自動在每次發(fā)生GC時會自動更新,這是個檢測前提齐佳。通過反復操作,觀察數(shù)值的變化债沮,來確認是否存在內(nèi)存問題炼吴。如何確認呢?
原則上Heap Viewer用來處理兩類內(nèi)存問題:
1)內(nèi)存泄漏
觀察data object一欄的total size(也可以觀察Heap Size/Allocated內(nèi)存的情況)疫衩,多次操作后硅蹦,只要data object的total size是穩(wěn)定在某個值,那么說明沒有內(nèi)存泄漏闷煤,如果發(fā)現(xiàn)它在每次GC后童芹,都在增長,不管是慢增長還是快速增長鲤拿,都說明有內(nèi)存泄漏的可能性假褪。
2)內(nèi)存抖動
因為內(nèi)存抖動的時候,會頻繁發(fā)生GC近顷,不需要手動觸發(fā)GC生音,就能看到數(shù)據(jù)在頻繁更新。
筆者認為窒升,你如果是app開發(fā)缀遍,當前工具可以比較方便的讓你針對項目的頁面進行內(nèi)存泄漏和內(nèi)存抖動的初步排查,但是不提供問題具體定位饱须。
參考:https://blog.csdn.net/zhangfei2018/article/details/49154479