`

shallow size & retained size 区别

阅读更多

shallow size就是对象本身占用内存的大小,比如String对象
public final class String
   implementsjava.io.Serializable, Comparable<String>, CharSequence
{
   /**The value is used for character storage.*/
   private final char value[];
 
   /**The offset is the first index of the storage that is used.*/
   private final int offset;
 
   /**The count is the number of characters in the String.*/
   private final int count;
 
   /**Cache the hashcode for the string*/
 private int hash;// Default to 0
。。。


32位的操作系统每个对象头占8个字节,有三个int属性,每个int占用4个字节
有一个char[]对象,这个对象无论有没有赋值,都有个null值,所以也占4个字节
所以每个String对象的shallow size,占用: 3*4 + 1*4 + 8 = 24个字节
很显然String如果有值,比如String str = new String(“123”);,那该String对象总共占用的字节是24+的,
这就要说retained size了
 
retained size:当该对象的内存释放后,GC总共能回收的内存,其实就是shallow size+reference object size
比如String str = new String(“a”);
str对象的shallow size = 24
char[]对象的shallow size =8
char[]value的内存空间2*1=2
str对象的retained size = 24+8+2 = 34字节

 

 

 

分享到:
评论

相关推荐

    android_内存泄露分析_mat整理.pdf

    #### Shallow Size与Retained Size - **Shallow Size**:对象自身占用的内存大小,不包括对其他对象的引用。在32位系统上,对象头通常为8字节,基本类型如int占4字节,对象或数组不论是否引用其他对象,都按其定义...

    技術分享_Glassfish 3.1.2.2 Web Service Memory Leak Workaround1

    在 MAT 中,我们可以看到 ManagedBeanManagerImpl 对象的详细信息,包括其 shallow size 和 retained size。 问题解决 根据 MAT 的分析结果,我们可以了解到 ManagedBeanManagerImpl 对象的内存泄露是由于 ...

    MemoryAnalyzer-1.7.0.20170613-linux.gtk.x86_64.zip

    4. **碎片视图(Shallow Size与Retained Size)**:MAT提供了对象的浅层大小(Shallow Size)和保留大小(Retained Size)的概念,前者表示对象本身占用的内存,后者表示对象及其所有依赖对象占用的总内存,这对于...

    android_内存泄露分析_mat参考.pdf

    如果一个对象A被对象B引用,而B没有其他引用,那么A的retained size等于A的shallow size加上B的retained size。 在MAT中,可以使用以下几个功能进行分析: - **Leak Suspects Report**:MAT会自动识别可能的内存...

    mat分析中文文档

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

    MAT使用手册无加密.pdf

    使用MAT,用户可以从数以百万计的对象中快速计算出对象的Retained Size,从而确定是哪些对象阻止了垃圾回收机制的正常工作,并生成Leak Suspect报表。 Heap Dump文件虽然能够提供大量的信息,但它不包含内存分配...

    Eclipse--Memory-Analyzer中文教程

    对象的Retained Heap即为它Retained Set中所有对象的Shallow Heap之和。Memory Analyzer通过分析Heap Dump文件,能够帮助开发者识别和解决内存泄漏问题。例如,如果开发者需要了解一个对象在什么时候创建,或者内存...

    EclipseMemoryAnalyzer.doc

    Minimum Retained Size 是一种估算 Retained Size 的方法,它可以更快地给出结果,因为它只依赖于待检查对象集合的大小,而不是整个 Heap Dump 文件中对象的数量。 ##### Dominator Tree Dominator Tree 是 Memory ...

    Eclipse Memory Analyzer中文使用说明(带书签)

    - 分析 Retained Size:关注对象的 retained size 而非 shallow size,因为 retained size 才真正反映了对象释放后能回收的内存。 - 理解 dominator tree:利用 dominator tree 分析内存结构,找出内存消耗的主要...

    android_内存泄露分析_mat[归纳].pdf

    如果一个对象被其他对象引用,即使它本身不再使用,也会因为其他对象的存在而不能被垃圾回收,这部分内存就是retained size。 4. **MAT的使用技巧**: - **对象比较**:MAT可以比较两个heap dump,找出不同之处,...

    MemoryAnalyzer-win32.win32.x86-64.rar

    2. **对象视图**:工具提供了不同的视图来展示内存中的对象,如 dominator tree、shallow size、retained size等,帮助用户理解对象间的引用关系和内存占用。 3. **分析报告**:MAT可以生成详细的分析报告,包括最...

    mat java 分析 文件 dump

    - **Total Retained Size**:表示所有对象的Retained Size之和。 **示例分析:** Top Consumers可以帮助我们快速找到占用内存较多的类。例如,在提供的部分内容中提到的`quartz`,如果它在Top Consumers中排名靠前...

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

    MAT支持分析生产环境中Java程序的堆转储文件,能够从大量的对象中快速计算出对象的保留大小(retained size),并自动生成可能的内存泄漏报告(leak suspect report)。 #### 三、MAT的使用方式 MAT有两种主要使用方式...

    Android内存泄露检测_mat

    在分析过程中,关注`shallow size`和`retained size`这两个概念非常重要。`shallow size`是对象自身占用的内存,不包括对其他对象的引用,而`retained size`则是对象加上所有由它直接或间接保持的对象的总和,反映了...

    深入理解Java虚拟机1

    其中,Shallow Size表示对象自身占用的内存,不包括引用的对象。而Retained Size则考虑了对象及其直接或间接引用的所有对象的总大小,但不包括被GC Roots引用的对象,因为这些对象在GC时不会被释放。通过分析...

    OOM分析工具-MemoryAnalyzer.zip

    5. **shallow 和 retained size**:MAT区分了对象的浅层大小(shallow size)和保留大小(retained size)。浅层大小仅考虑对象本身,而保留大小还包括由该对象间接引用的所有对象的总大小。在分析内存泄漏时,保留...

    Heap Snapshot工具

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

    MemoryAnalyzer(MAT)

    5. **引用链分析**:通过SHALLOW HEAP和RETAINED SIZE了解对象占用内存的具体情况,结合OBJECT SUMMARY找出可疑的引用。 6. **对比分析**:如果有多次heap dump,可以通过Compare Heap功能查看内存使用变化,进一步...

    AS内存泄漏检测1

    - Retained Size:如果这个对象被释放,垃圾回收器能够回收的总内存大小。 通过这些信息,开发者可以直接定位到引发内存泄漏的代码行。 接下来,针对防止Android内存泄漏,有几点建议: - 尽量使用静态内部类:非...

Global site tag (gtag.js) - Google Analytics