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字节
分享到:
相关推荐
#### Shallow Size与Retained Size - **Shallow Size**:对象自身占用的内存大小,不包括对其他对象的引用。在32位系统上,对象头通常为8字节,基本类型如int占4字节,对象或数组不论是否引用其他对象,都按其定义...
在 MAT 中,我们可以看到 ManagedBeanManagerImpl 对象的详细信息,包括其 shallow size 和 retained size。 问题解决 根据 MAT 的分析结果,我们可以了解到 ManagedBeanManagerImpl 对象的内存泄露是由于 ...
4. **碎片视图(Shallow Size与Retained Size)**:MAT提供了对象的浅层大小(Shallow Size)和保留大小(Retained Size)的概念,前者表示对象本身占用的内存,后者表示对象及其所有依赖对象占用的总内存,这对于...
如果一个对象A被对象B引用,而B没有其他引用,那么A的retained size等于A的shallow size加上B的retained size。 在MAT中,可以使用以下几个功能进行分析: - **Leak Suspects Report**:MAT会自动识别可能的内存...
3. **Shallow Heap和Retained Heap的区别**:文档详细解释了Shallow Heap和Retained Heap的含义,指出了两者在内存分析中的重要性及计算方式。Shallow Heap反映对象自身占用的内存大小,而Retained Heap则反映出对象...
使用MAT,用户可以从数以百万计的对象中快速计算出对象的Retained Size,从而确定是哪些对象阻止了垃圾回收机制的正常工作,并生成Leak Suspect报表。 Heap Dump文件虽然能够提供大量的信息,但它不包含内存分配...
对象的Retained Heap即为它Retained Set中所有对象的Shallow Heap之和。Memory Analyzer通过分析Heap Dump文件,能够帮助开发者识别和解决内存泄漏问题。例如,如果开发者需要了解一个对象在什么时候创建,或者内存...
Minimum Retained Size 是一种估算 Retained Size 的方法,它可以更快地给出结果,因为它只依赖于待检查对象集合的大小,而不是整个 Heap Dump 文件中对象的数量。 ##### Dominator Tree Dominator Tree 是 Memory ...
- 分析 Retained Size:关注对象的 retained size 而非 shallow size,因为 retained size 才真正反映了对象释放后能回收的内存。 - 理解 dominator tree:利用 dominator tree 分析内存结构,找出内存消耗的主要...
如果一个对象被其他对象引用,即使它本身不再使用,也会因为其他对象的存在而不能被垃圾回收,这部分内存就是retained size。 4. **MAT的使用技巧**: - **对象比较**:MAT可以比较两个heap dump,找出不同之处,...
2. **对象视图**:工具提供了不同的视图来展示内存中的对象,如 dominator tree、shallow size、retained size等,帮助用户理解对象间的引用关系和内存占用。 3. **分析报告**:MAT可以生成详细的分析报告,包括最...
- **Total Retained Size**:表示所有对象的Retained Size之和。 **示例分析:** Top Consumers可以帮助我们快速找到占用内存较多的类。例如,在提供的部分内容中提到的`quartz`,如果它在Top Consumers中排名靠前...
MAT支持分析生产环境中Java程序的堆转储文件,能够从大量的对象中快速计算出对象的保留大小(retained size),并自动生成可能的内存泄漏报告(leak suspect report)。 #### 三、MAT的使用方式 MAT有两种主要使用方式...
在分析过程中,关注`shallow size`和`retained size`这两个概念非常重要。`shallow size`是对象自身占用的内存,不包括对其他对象的引用,而`retained size`则是对象加上所有由它直接或间接保持的对象的总和,反映了...
其中,Shallow Size表示对象自身占用的内存,不包括引用的对象。而Retained Size则考虑了对象及其直接或间接引用的所有对象的总大小,但不包括被GC Roots引用的对象,因为这些对象在GC时不会被释放。通过分析...
5. **shallow 和 retained size**:MAT区分了对象的浅层大小(shallow size)和保留大小(retained size)。浅层大小仅考虑对象本身,而保留大小还包括由该对象间接引用的所有对象的总大小。在分析内存泄漏时,保留...
- **Shallow Size**:对象本身的内存占用大小,不包括它引用的其他对象。 - **Retained Size**:释放该对象后能够节省的内存大小。 此外,Android Studio的新版本还增加了更多的可视化选项,例如可以根据类名或包名...
5. **引用链分析**:通过SHALLOW HEAP和RETAINED SIZE了解对象占用内存的具体情况,结合OBJECT SUMMARY找出可疑的引用。 6. **对比分析**:如果有多次heap dump,可以通过Compare Heap功能查看内存使用变化,进一步...
- Retained Size:如果这个对象被释放,垃圾回收器能够回收的总内存大小。 通过这些信息,开发者可以直接定位到引发内存泄漏的代码行。 接下来,针对防止Android内存泄漏,有几点建议: - 尽量使用静态内部类:非...