1. 程式人生 > >Android 內存管理中的 Shallow heap Retained heap

Android 內存管理中的 Shallow heap Retained heap

內存 gc roots str 對象大小 數組元素 jprofiler 數組元素對 語言 profile

所有包含Heap Profling功能的工具(MAT,Yourkit,JProfiler,TPTP等)都會使用到兩個名詞,一個是Shallow heap Size,另一個是 Retained heap Size.

shallow heap:

Shallow heap size =對象自身占用的內存大小,不包括它引用的對象。 還會包括一些java語言特性的數據存儲單元。
       對於數組對象,它的大小是數組元素對象內存的總和。

Retained heap:

Retained heap size = 當前對象大小+當前對象可直接或間接引用到的對象的大小總和。
          (間接引用的含義:A->B->C, C 就是間接引用)
          Retained Size就是當前對象被GC後,從Heap上總共能釋放的內存大小。
          釋放大小需要減去被GC Roots直接或間接引用的對象。

技術分享圖片

假如虛線不存在:

shallow size 縮寫:ss

retained size 縮寫:rs

GC root 直接引用了A,B對象

ssA = rsA 同理D,E對象也如此

rsB = ssB + ssD + ssC + ssE

rsC= ssC+ ssE

虛線如果存在:

rsB = ssD + ssC

rsC= ssC

Android 內存管理中的 Shallow heap Retained heap