首页 > 代码库 > Shallow vs. Retained Heap

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大小。

62ff1436

Shallow vs. Retained Heap