美文网首页
shallow heap与remainder heap

shallow heap与remainder heap

作者: 哪个旮旯的 | 来源:发表于2018-09-30 14:14 被阅读0次

    具有Heap Profiler功能的工具,如mat(memory analyse tool)、Google Heap Profiler、JProfiler等,经常会出现shallow heap与remainder heap,这两个词在我们的实际开发中基本没有出现过,那么我们在用mat解析dump出来的Java内存文件时,出现的这两个词究竟是什么意思呢?

    shallow heap

    shallow heap是对象本身的大小,不包括其引用的对象。
    对于非数组类型:shallow heap就是对象与其成员变量加在一起的大小。
    对于数组类型:shallow heap就是数组各个元素大小之和。

    remainder heap

    对象remainder heap 大小 = 对象shallow heap大小 + 对象直接或者间接引用的对象大小(排除被GC ROOT直接引用的对象)。
    如下图所示:


    对象引用关系

    OBJECT A的remainder heap = OBJECT A的shallow heap
    OBJECT B的remainder heap = OBJECT B的shallow heap + OBJECT C的对象大小 + OBJECT E的对象大小

    所以对象的remainder heap其实接近进行垃圾回收时,清除该对象时所能获取的堆内存大小(有的对象可能还被其他对象引用,垃圾回收时,不能清除)。

    下面是用mat对从服务器上面dump出来Java虚拟机内存进行解析之后的结果:


    Java内存解析结果

    其中,Objects为类的对象的个数。Shallow Heap是这些对象自身大小之和,Remainder Heap是这些对象自身以及这些对象直接或者间接引用的对象大小总和。

    相关文章

      网友评论

          本文标题:shallow heap与remainder heap

          本文链接:https://www.haomeiwen.com/subject/wscsoftx.html