美文网首页
Shallow heap and Retained heap 在

Shallow heap and Retained heap 在

作者: 7ee4c95bcc68 | 来源:发表于2020-10-28 18:05 被阅读0次

Eclipse MAT 是一个功能强大的内存分析工具 但是我们在用它的dominator_tree的功能时候发现了Shallow Heap和Retained Heap这两列光有数字却没有单位 经过一番查找后发现是 默认是以Byte来计算的 这也太不方便了


WX20201028-194543@2x.png

如果想可视化更好一些可以这么配置


size_units_cfg.png

修改之后在看就是


size_units_sample.png

Shallow Heap和Retained Heap 是如何计算的呢

Shallow-heap-1.png

从图中看出
Object A 持有 Object B 和 Object C
Object B 持有 Object D 和 Object E
Object C 持有 Object F 和 Object G
假设每个对象占用 10 byte

Shallow Heap Size

Shallow Heap Size 的计算比较简单 就是每个对象在内存中的大小
Object A 的Shallow Heap Size 就是10 byte
Object B 的 Shallow Heap Size 也是 10 byte

Retained Heap Size

现在我们来计算Object B 的 Retained Heap Size 的大小
我们发现Object B 持有 Object D 和 Object E 并且Object D 和 Object E只被Object B 持有 如果发生内存回收Object B被回收的同时 Object D 和 Object E 也会被回收
那么Object B 的Retained Heap Size 大小为
= Object B (shallow heap size) + Object D (shallow heap size) + Object E (shallow heap size)
= 10 bytes + 10 bytes + 10 bytes
= 30 bytes
再来看一种情况


Shallow-heap-3-1.png

在这种情况下, Object A的retained heap size 的大小是 40 bytes. Surprising? Puzzling?
如果 Object A 被垃圾回收 那么只有 Object C , Object F 和 Object G会被回收 而Object B Object D 和Object E会继续存在内存中 因为他们被Object H持有
因此, Object A 的retained heap size 计算方法是:
= Object A (shallow heap size) + Object C (shallow heap size) + Object F (shallow heap size) +Object G (shallow heap size)
= 10 bytes + 10 bytes + 10 bytes + 10 bytes
= 40 bytes.

相关文章

网友评论

      本文标题:Shallow heap and Retained heap 在

      本文链接:https://www.haomeiwen.com/subject/fhjcvktx.html