HProf 在 Android Studio 中的展示詳解胎围,基于我對(duì)其的理解悠砚,我將其根據(jù) heap,count,size,其他將其分成了 4 個(gè)層次酝陈。
第一層 Heap 分類
Heap 共分為:
zygote heap: 與 android zygote 進(jìn)程共享的 heap
image heap: 與系統(tǒng)共享的 heap
app heap: 應(yīng)用本身的 heap
第二層 引用次數(shù)?total count陶耍,heap count
total count : 表示該類在以上 3 個(gè) Heap 中被引用的次數(shù)之和犯戏,也即等于上面三個(gè) Heap 的 heap count 之和
heap count : 表示該類在當(dāng)前 Heap 中被引用的次數(shù)
第三層 各種size的含義,?sizeof,shallow size,retained size固蚤,dominatin size
sizeof : 類的大小娘汞,相當(dāng)于 c 語(yǔ)言中的 sizeof 運(yùn)算符。不過颇蜡,在 android/java 中价说,就是各成員變量加起來之和了。一個(gè)空對(duì)象的大小為 8 鳖目,因?yàn)槠淅^承的 Object 大小就是 8扮叨。再比如,String的sizeof 就是 16领迈,其大小就是自己的兩個(gè)整型成員變量的大小加上Object的大小彻磁。另外,一個(gè)引用其大小本身是 4 狸捅,基本數(shù)據(jù)類型的大小就是 Java 中的定義的衷蜓,數(shù)組沒有大小。
shallow size : 表示該類或者類的實(shí)例的所占用的實(shí)際內(nèi)存大小尘喝。類的 shallow size 等于該類的所有實(shí)例的 shallow size?大小之和磁浇。而實(shí)例的shallow size 一般就是 sizeof 的大小⌒嗤剩基本類型是沒有 shallow size 的置吓。
retained size : 表示能被該類直接和間接引用到的類的 shallow size 之和,且包括自身的 shallow size.當(dāng)一次 GC并發(fā)生內(nèi)存回收后缔赠,能被虛擬機(jī)回收的最大內(nèi)存大小衍锚。只是說是最大,不能完全回收掉嗤堰,因?yàn)榭赡苡行╊愡€會(huì)被別的類引用到戴质,就不能進(jìn)行回收。
dominatin size:表示該對(duì)象能管理到的內(nèi)存大小踢匣,為實(shí)例的 shallow size大小與其成員的shallow size之和告匠,注意 shadow$_klass_是沒有被計(jì)算在內(nèi)的
第四層 instance,level,Refrence Tree
instance :?表示類所對(duì)應(yīng)的實(shí)例的個(gè)數(shù)
level : 引用級(jí)數(shù)
Refrence Tree : 引用的樹形鏈,跟 TraceView 中的差不多符糊。根據(jù)引用鏈可以找出這個(gè)實(shí)例是如何被分配的凫海。