Android 内存管理中的 Shallow heap Retained heap

所有包含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

原文地址:https://www.cnblogs.com/polo/p/9969835.html