所有包含Heap Profling功能的工具(MAT, Yourkit, JProfiler, TPTP等)都会使用到两个名词,一个是Shallow Size,另一个是 Retained Size.

这是两个在平时不太常见的名词,本文会对这两个名词做一个详细的解释。

Shallow Size

对象自身占用的内存大小,不包括它引用的对象。

针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。

针对数组类型的对象,它的大小是数组元素对象的大小总和。

Retained Size

Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)

换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。

不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。

看图理解Retained Size


上图中,GC Roots直接引用了A和B两个对象。

A对象的Retained Size=A对象的Shallow Size

B对象的Retained Size=B对象的Shallow Size + C对象的Shallow Size

这里不包括D对象,因为D对象被GC Roots直接引用。

如果GC Roots不引用D对象呢?

此时, B对象的Retained Size=B对象的Shallow Size + C对象的Shallow Size + D对象的Shallow Size

Shallow heap Retained heap相关推荐

  1. 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 ...

  2. Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思?

    原文在这里: Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思? MAT是一款非常强大的JVM内存映像分析工具,对分析内存相关的问题非常有用,MAT报告中对 ...

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

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

  4. 【JVM笔记】浅堆(Shollow Heap)与深堆(Retained Heap)

    目录 浅堆(Shollow Heap) 保留集(Retained Set) 深堆(Retained Heap) 对象实际大小 浅堆(Shollow Heap) 浅堆(Shallow Heap)是指一个 ...

  5. HEAP: Free Heap block XXXX modified at XXXX after it was freed

    开发过程中,有时候会遇到堆异常的情况 这时,VS的调试输出窗口会提示: HEAP[MemTest.exe]: HEAP: Free Heap block 39b998 modified at 39b9 ...

  6. Shallow and retained sizes

    转载自:http://www.yourkit.com/docs/90/help/sizes.jsp YourKit Java Profiler is capable of measuring shal ...

  7. HEAP: Free Heap block xxxxxxxx modified at xxxxxxxx after it was freed

    <诸子百家>发布后,发现游戏在有些情况下会崩溃.偶然崩溃. 由于我是负责主框架,网络协议和登录,数据等,所以这个修正bug的任务主要就落在我头上了. 一.bug 1.最头疼的bug HEA ...

  8. HEAP: HEAP: Free Heap block xx modified at xxafter it was freed 堆内存出现野指针错误

    首先看下问题提示: HEAP[SimEng.exe]: HEAP: Free Heap block 000002CA51FC08A0 modified at 000002CA51FC0950 afte ...

  9. 深入理解JVM干货教学 - 【Shallow、Retained 、Deep Object Size 计算】

  10. HEAP: Free Heap block XXXX modified at XXXX after it was freed详解

    测试代码: char* testP(char*pfuck) { static char chardd[123]; strcpy(chardd,pfuck); delete pfuck; return ...

最新文章

  1. React编写一个简易的评论区组件
  2. Enterprise Library之错误处理部分
  3. 一款jQuery实现重力弹动模拟效果特效,弹弹弹,弹走IE6
  4. 汇编语言--转移指令的原理
  5. 为何 epoll 的 ET 模式一定要设置为非阻塞IO
  6. c语言程序中的注释必须单独占一行,C语言习题第一章
  7. react避免子组件渲染_如何与React一起使用正确的方法来避免一些常见的陷阱
  8. JMeter响应断言详解
  9. 工厂方法(FactoryMethod)模式
  10. C语言系列(二):最近重拾C语言的想法,谈到C中易错点,难点;以及开源代码中C语言的一些常用技巧,以及如何利用define、typedef、const等写健壮的C程序...
  11. 一:学习Linux前准备工作
  12. 最全的CSS浏览器兼容整理
  13. 15kw科比服务器型号,伺服蜗轮蜗杆减速机枫信永磁同步11KW15KW型号涡轮蜗杆减速电机15.5KW7.5KW...
  14. 是时候抛弃 Svelte、React 和 VUE 了吗?
  15. 企业级地理数据库(2)创建并加载企业级地理数据库
  16. 19、ADS使用记录之窄带F类功放设计
  17. 中缀表达式X=A+B*(C-(D+F))/E转后缀表达式之后是什么?
  18. 虹科教您 | 一分钟了解视距通信,虹科提供快速有效的视距验证解决方案
  19. opa学习1--开发环境搭建
  20. JetpackCompose从入门到实战学习笔记2——Modifier的简单使用

热门文章

  1. angularJs监控页面加载完毕
  2. 支招:如何提高芝麻信用分到800以上
  3. c++ 头歌实训 第四关 日历打印
  4. Linux centos7 mysql 配置支持emoji表情包,笔记
  5. WINVNC源码阅读(七)
  6. manjaro 亮度调节
  7. matlab 三角函数 积化和差,瞬间记住三角函数和差化积积化和差公式
  8. 什么是java mvc模式_什么是MVC?
  9. java和python哪个运行速度快_python和java学哪个比较简单点
  10. html鼠标经过状态,HTML5 - 让Canvas内部元素实现鼠标移入、移出效果(Tooltip提示效果)...