`

Shallow heap & Retained heap

 
阅读更多
所有包含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
  • 大小: 84.9 KB
  • 大小: 82.3 KB
分享到:
评论
2 楼 di1984HIT 2018-02-14  
      
1 楼 wumingxingzhe 2017-07-25  
好文

相关推荐

    mat分析中文文档

    3. **Shallow Heap和Retained Heap的区别**:文档详细解释了Shallow Heap和Retained Heap的含义,指出了两者在内存分析中的重要性及计算方式。Shallow Heap反映对象自身占用的内存大小,而Retained Heap则反映出对象...

    MAT使用手册无加密.pdf

    Shallow Heap表示对象本身占用的内存总量,而Retained Heap则表示由于某个对象而保持活跃状态的内存大小,即对象的Retained Set中所有对象的Shallow Heap之和。Retained Set是指一旦对象被垃圾回收,那些也会被回收...

    Eclipse--Memory-Analyzer中文教程

    它通过Heap Dump文件提供了对象、类、垃圾回收根节点以及线程栈和本地变量的详细信息,允许开发者深入了解Java堆内存的使用情况,通过Shallow Heap、Retained Heap以及Dominator Tree等概念来识别和分析内存使用模式...

    Eclipse MAT:Java内存分析的必备中文指南

    通过理解Shallow Heap和Retained Heap的概念,可以更准确地评估内存消耗情况,并找出导致内存问题的根本原因。 ##### 4.3 Dominator Tree - **定义**:Dominator Tree是一种用于描述对象间依赖关系的可视化工具。 -...

    MemoryAnalyzer-1.10.0.20200225-win32.win32.x86-64.zip

    Retained Heap :是shallow Heap的总和(单个对象占用内存*此对象的个数),也就是该对象被GC之后所能回收到内存的总和 分析方式: 1.查找线程下占用内存较大的对象(上图右边) 2.定位对象在代码里出现的位置...

    MemoryAnalyzer-1.10.0_x86_64.zip

    5. **Shallow Heap / Retained Heap**:区分对象自身占用的内存(shallow heap)和由其间接保持的对象占用的内存(retained heap)。 通过这些功能,MAT可以帮助开发者识别和修复内存泄漏问题,从而提高Java应用的...

    MAT Java内存分析工具

    6. **Shallow Heap和Retained Heap**:MAT区分了对象的浅层堆(Shallow Heap)和保留堆(Retained Heap),前者表示对象自身占用的内存,后者包括对象及其依赖的所有对象占用的内存。 7. **哈希表分析**:对于存储...

    Heap Snapshot工具

    - **Shallow Size**:对象本身的内存占用大小,不包括它引用的其他对象。 - **Retained Size**:释放该对象后能够节省的内存大小。 此外,Android Studio的新版本还增加了更多的可视化选项,例如可以根据类名或包名...

    内存分析工具 MemoryAnalyzer-1.8.1-win32.x86-64.zip

    6. **Shallow Heap与Retained Heap**:MAT会显示每个对象的浅层堆(Shallow Heap)和保留堆(Retained Heap),前者表示对象本身占用的内存,后者则包括了由该对象直接或间接引用的所有对象的总内存。 7. **...

    java学习的一些个人总结

    - **Shallow Heap与Retained Heap**:Shallow Heap表示对象本身占用的内存,不包括其引用的其他对象。Retained Heap则是对象被GC回收后,能够释放的总内存大小,包括所有能通过该对象访问到的对象的Shallow Heap之...

    内存泄漏分析工具mat

    5. **Shallow Heap和Retained Heap**:MAT提供的这两个度量可以帮助我们理解对象的真实内存消耗。Shallow Heap是对象自身占用的内存,而Retained Heap则包括了对象及其所有直接或间接引用的对象所占用的内存,这对于...

    mat工具测试类

    5. **使用Shallow Heap和Retained Heap**:理解对象本身占用的内存(Shallow Heap)和因该对象而间接保留的内存(Retained Heap)。 6. **使用Instance Filter和String Intern Pool**:过滤特定类型的实例,或者分析...

    MAT MemoryAnalyzer JDK8版本,亲测有用~!

    4. **Shallow Heap与Retained Heap**:这两个概念是MAT分析内存的重要指标。Shallow Heap表示对象自身占用的内存,而Retained Heap则反映了对象及其所有依赖对象的总内存。 5. **OQL(Object Query Language)**:...

    Eclipse Memory Analyzer1.8.1&安装使用指南

    - **Shallow Heap vs Retained Heap**:理解对象自身占用的内存(Shallow Heap)和通过它保留的所有对象的总内存(Retained Heap)。 - **Path to GC Roots**:显示对象到垃圾收集根的路径,揭示对象如何避免被...

    mat内存分析工具单独软件无需安装-Eclipse Memory Analyzer Version 1.7.0.rar

    9. **Shallow Heap与Retained Heap**:MAT区分了对象本身占用的内存(Shallow Heap)和通过它间接保留的内存(Retained Heap),帮助理解内存消耗的真正来源。 10. **Delta分析**:比较两次堆转储的区别,用于追踪...

    jvm内存分析工具mat安装包

    在分析过程中,MAT会计算每个对象的浅堆(Shallow Heap)和保留堆(Retained Heap),前者表示对象本身所占内存,后者则包含对象及其所有直接或间接引用的对象所占的总内存。通过这些数据,可以准确评估每个对象对...

    MemoryAnalyzer-1.5.0内存分析工具.zip

    6. **Shallow Heap与Retained Heap**:MAT提供了这两个关键指标,shallow heap表示对象自身占用的内存,而retained heap则包括对象及其所有直接或间接引用的对象所占用的总内存。 使用MAT进行内存分析时,通常的...

    MemoryAnalyzer-1.9.2.20200115-linux.gtk.x86_64.zip

    9. **Shallow Heap与Retained Heap**:MAT显示对象自身的内存占用(Shallow Heap)以及由其直接或间接引用的所有对象的总内存占用(Retained Heap),这对于理解对象的实际内存影响至关重要。 10. **可导出报告**:...

    最新版mat java内存分析工具

    7. **Shallow Heap与Retained Heap**:MAT区分了浅堆(Shallow Heap)和保留堆(Retained Heap)。浅堆表示对象自身占用的内存,而保留堆则包括了对象及所有依赖它的对象所占的内存,这有助于评估对象的真实内存影响...

Global site tag (gtag.js) - Google Analytics