里面的isactive什么意思_Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思?

原文在这里:Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思?

MAT是一款非常强大的JVM内存映像分析工具,对分析内存相关的问题非常有用,MAT报告中对对象大小的描述有两个相关的概念:

  1. SHALLOW HEAP
  2. RETAINED HEAP

本文就来介绍一下他们之间的区别。

首先我们来看下,这两个size是如何来计算的。

假如内存中存在以下的对象以及他们之间的引用关系,A引用了B和C,B引用了D、E,C引用了F、G,我们假设每一个对象本身在内存中是占10个字节,如下图所示:

b5d2a2857f81dc43672fc087306905e9.png

SHALLOW HEAP大小:

一个对象的SHALLOW HEAP大小就是这个对象自己在内存中所占的字节数,本例中,每一个对象在内存中都是占用10个字节,因此这些对象的SHALLOW HEAP大小都是10字节。

对象B的RETAINED HEAP大小:

上图中得知,B引用了D和E,如果B被垃圾回收掉以后,D和E就没用引用,因此就可以被一起回收掉了,RETAINED HEAP的意思是当一个对象被回收以后总共可以释放的总的内存数量,因此对象B的RETAINED HEAP就等于B+D+E 的SHALLOW HEAP=30字节。

同理,C的RETAINED HEAP =C+F+G的SHALLOW HEAP =30字节。

同理,A的RETAINED HEAP = A+ B+ C + D + E+ F + G=70字节。

现在,我们修改下对象的引用关系,如下:

a4c40a0b380a3400d282ef94d3bc03c4.png

上图中,A的RETAINED HEAP是多少呢?答案是40字节!有木有大吃一斤?为啥呢?因为A被回收以后,只有C、F和G是可以一起被回收的,因此A的RETAINED HEAP = A + C + F + G的SHALLOW HEAP=40字节。

希望本文对你理解MAT的RETAINED 和 SHALLOW有所帮助,你也可以考虑使用另一款非常强大的内存分析工具HeapHero,它还可以分析出来由于不合理编程导致的内存浪费情况,比如:重复分配对象、没有充分使用的数据结构、非最优化的数据定义等等。

英文原文在这里:https://blog.gceasy.io/2019/01/03/shallow-heap-retained-heap/

如果感觉有用,欢迎扫码加关注:

34030063d92313997efedd6984120efa.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值