原文在这里: 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个字节,如下图所示:

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字节。
现在,我们修改下对象的引用关系,如下:

上图中,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/

Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思?相关推荐

  1. MAT工具学习,incoming reference和outgoing reference,Shallow Heap和Retained Heap

    MAT工具学习 incoming reference和outgoing reference Shallow Heap和Retained Heap 常用工具 一般思路 incoming referenc ...

  2. eclipse菜单里面的clean和build是干什么用的

    eclipse的build和clean的说明 关于eclipse的build: 1.在eclipse的project菜单下有build automatically.选中这个的话.每次在保存以后就会编译 ...

  3. eclipse菜单里面的clean是干什么用的?

    由于eclipse的编译是基于时间戳的判断机制的. 因此当你按build   all的时候有些eclipse认为时间戳没有改变的类不会被编译. 因此你可以先clean一下再编译.这个时候eclipse ...

  4. Memory Analyzer Tool 1 Shallow heap Retained heap dominator tree(控制树)

    文章目录 1. shallow heap 2. retained heap 3. dominator tree(控制树) 1. shallow heap 引用原文介绍 :Shallow heap is ...

  5. eclipse MAT分析heap dump

    官方参考文档:http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Ftasks%2Fanalyzingth ...

  6. 关于JS里面的Call Stack and Heap

    关于JS里面的Call Stack and Heap Abstract What is the Call Stack and Heap in JS What is the difference bet ...

  7. Eclipse MAT 安装及使用

    Eclipse MAT官方网页:https://www.eclipse.org/mat/downloads.php 一.MAT是什么? MAT(Memory Analyzer Tool),一个基于Ec ...

  8. Eclipse MAT 内存分析工具

    Exlipse MAT 是一款强大的 Java 堆内存分析工具,我们可以通过该工具实现对 Java 堆内存的分析. 官网.实现查找内存泄漏以及查看内存消耗的情况. MAT 使用 首先去官网下载对应的软 ...

  9. eclipse中报错:java.lang.OutOfMemoryError: Java heap space

    问题: 在eclipse中执行java程序.去重100多万的数据,报例如以下错误: java.lang.OutOfMemoryError: Java heap space 异常原因: 在JVM中假设9 ...

最新文章

  1. 要毁灭人类、喷马斯克、还获得公民身份的Sophia,是假的
  2. 游戏设计、原型与开发:基于Unity与C#从构思到实现pdf
  3. LiveVideoStack线上分享第五季(五):用FFmpeg搭建基于CNN的视频分析方案
  4. 专访 | PP云技术副总监:如何使用机器学习算法优化分发链路
  5. 跳跃问题(Java)
  6. HBase数据存储格式
  7. atcoder A - Frog 1(DP)
  8. 详细介绍 安装ns3步骤
  9. 公司官网无法通过域名访问,原来是tomcat配置出了问题
  10. 零基础怎么开启编程之路 -(第1期)
  11. MongoDB学习(黑马教程)-4-数据库MongoDB的更新(修改)文档操作
  12. python中arcpy_如何使用ArcPy?
  13. 如何将其他注册商处的域名申请转出并转入阿里云(图文教程)
  14. wangEditor + vue双向绑定(光标游走问题)
  15. 新浪微博API错误代码说明对照表
  16. HDU3665Seaside(最短路径)
  17. Linux 远程联机服务(二)- Rsh服务器
  18. c语言 英语试卷,英语听力试题及答案
  19. 关于CDN和DNS技术的解析以及搭建智能DNS的方法
  20. 攻城略地mysql充值_攻城掠地充值有巨惠!平台折扣5.0超划算

热门文章

  1. android 5寸屏分辨率是多少钱,720p精细分辨率
  2. 解决Cannot fit requested classes in a single dex file
  3. 数据结构与算法题目集(中文) - 7-32 哥尼斯堡的“七桥问题”(25 分)
  4. Ubuntu虚拟机磁盘容量不足
  5. GBase 8c如何启动/停止数据库集群组件
  6. notepad批量转换文件编码utf8、gbk
  7. java并行处理集合_java多线程并行处理List集合数据
  8. 迅雷X 10.1.7.262正式版去广告本地SVIP 落尘之木修改便携版竖屏版2018.12.17更新
  9. 如何组装属于自己的台式电脑
  10. shineblink控制全彩RGB LED