Shallow vs. Retained Heap

        Shallow Heap和Retained Heap这两个名词在Java内存分析时经常遇到。本博文是Eclipse Memory Analyzer中关于Shallow Heap和Retained Heap帮助文档的翻译。

Shallow Heap是被一个对象消费的内存。在一个对象中,引用属性需要32或者64bits(根据OS体系结构),Integer属性需要4 bytes, Long属性需要8 bytes等等。根据Heap Dump的格式,这个大小可能会被调整(例如,对齐到8字节等等)到一个更有利于VM实际内存消费的模型。

X的Retained Set是指当X被垃圾回收时,所有会被GC回收的对象集合。

X的Retained Heap是指X的Retained Set中所有对象的Shallow Size和,例如因为X而存活的内存。

一般地说,一个对象的Shallow Heap是在Heap中这个对象的大小,而同一个对象的Retained Size是指当这个对象被垃圾回收时,将被释放的Heap内存总和。

从Leading Set角度来说,Retained Set是因为Leading Set变成不可达而被释放对象的集合。Leading Set可能是一个特定类的所有对象,或者被一个特定类加载器加载的所有类的对象,又或者是任意对象的组合。Retained Set包括了Leading Set中的对象和所有仅能通过Leading set中对象访问到的对象。Retained Size是在Retained Set中所有对象的总heap大小。

时间: 2024-08-07 12:47:43

Shallow vs. Retained Heap的相关文章

Shallow heap & Retained heap

所有包含Heap Profling功能的工具(MAT, Yourkit, JProfiler, TPTP等)都会使用到两个名词,一个是Shallow Size,另一个是 Retained Size. 这是两个在平时不太常见的名词,本文会对这两个名词做一个详细的解释. Shallow Size 对象自身占用的内存大小,不包括它引用的对象. 针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和.当然这里面还会包括一些java语言特性的数据存储单元. 针对数组类型的对象,它的大小是数组元

Eclipse MAT: Understand Incoming and Outgoing References

引用:http://xmlandmore.blogspot.hk/2014/01/eclipse-mat-understand-incoming-and.html?utm_source=tuicool&utm_medium=referral Saturday, January 25, 2014 Eclipse MAT: Understand Incoming and Outgoing References In [1], we have shown how to use OQL to query

Android:内存控制及OOM处理

  1. OOM(内存溢出)和Memory Leak(内存泄露)有什么关系? OOM可能是因为Memory Leak,也可能是你的应用本身就比较耗内存(比如图片浏览型的).所以,出现OOM不一定是Memory Leak. 同样,Memory Leak也不一定就会导致OOM,如果泄露的速度很慢,可能还没用完可用内存应用就被重启了,那就不会OOM咯.当然了,有bug解决了最好. 2. 什么是shallow heap与retained heap? shallow heap:你自身占了多少内存,比如你有

Memory Analyzer Tool定位Java heap space内存泄漏

java heap space是一个很蛋疼的问题,如果开发调试时遇到还好,如果是在项目上线后运行一段时间后,才抛出该异常,那真的很悲剧(那你得找代码中到底是哪里内存泄露了),这真是一个悲伤的故事. 1.java head space堆内存溢出 分  析 发生这种问题的原因是java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heap space有关. 解决方法: 1. 增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小.如:set JAV

Android内存那点事儿

好久没有写了,不是忘了,也不是懒,是因为迷茫了~~不知道该学什么,该写什么,该走什么样子的路,该做什么样子的人.我嘴笨,不知道怎么把自己会的讲给别人,我愿意分享,所以我就写出来,不管是对的,错的,希望大家能取其精华去其糟粕,不要因为我而误导诸位.废话不多说了~~ 你的应用内存泄漏了么? 要看是不是存在内存泄漏,首先我们要看到内存信息,如何看到内存信息呢?这里介绍一种方法,打开Eclipse连接手机,到DDMS中,选择要分析的应用,点击Update Heap也就是下图中1的图标,点击1图标之后会在

Android最佳性能实践(二)——分析内存的使用情况

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/42238633 虽说现在的手机内存都已经非常大了,但是我们大家都知道,系统是不可能将所有的内存都分配给我们的应用程序的.没错,每个程序都会有可使用的内存上限,这被称为堆大小(Heap Size).不同的手机,堆大小也不尽相同,随着现在硬件设备不断提高,堆大小也已经由Nexus One时的32MB,变成了Nexus 5时的192MB.如果大家想要知道自己手机的堆大小是多少,可以调用如

Android内存泄露案例分析

一款优秀的Android应用,不仅要有完善的功能,也要有良好的体验,而性能是影响体验的一个重要因素.内存泄露是Android开发中常见的性能问题.这篇文章,通过我们曾经遇到的一个真实的案例,来讲述一个内存泄露问题,从发现到分析定位,再到最终解决的全过程. 这里把整个过程分为四个阶段: 第一阶段,现场勘查,分析Bug现象,找出有用线索: 第二阶段,初步推断,根据之前的线索,推断可能导致Bug的原因,并且进一步验证推断是否正确: 第三阶段,探究根源,找出导致Bug的真正原因: 第四阶段,解决方案,研

Android内存泄漏检测与MAT使用

内存泄漏基本概念 内存检测这部分,相关的知识有JVM虚拟机垃圾收集机制,类加载机制,内存模型等.编写没有内存泄漏的程序,对提高程序稳定性,提高用户体验具有重要的意义.因此,学习java利用java编写程序的时候,要特别注意内存泄漏相关的问题.虽然JVM提供了自动垃圾回收机制,但是还是有很多情况会导致内存泄漏. 内存泄漏主要原因就是一个生命周期长的对象,持有了一个生命周期短的对象的引用.这样,会导致短的对象在该回收时候无法被回收.Android中比较典型的有:1.静态变量持有Activity的co

APP性能分析工具

本文基本翻译自Facebook工程师的文章 Speed up your app,也加入了自己的一些内容. 会介绍以下几个主题 Systrace Traceview Memory Profiling Allocation Tracker GPU Profiling Hierarchy Viewer Overdraw Alpha Hardware Acceleration Systrace Systrace的功能可以在AS的DDMS中找到,但不太稳定,所以这里只介绍命令行模式. 另外Systrace