概念解释
更新时间:
本文介绍Java堆分析中常用概念,它们贯穿于分析结果几乎所有页面,理解这些概念对于Java堆分析至关重要。
对象大小(Shallow size)
对象本身的大小,比如long是8字节,int是4字节
关联集合(Retained Set)
当A对象被释放时候,会跟着释放的对象集合。以上图为例,当C对象被释放时,D、E、F、G、H对象失去引用(即垃圾回收器再也不能发现它们),C对象的关联集合就是Set(D,E,F,G,H),当C对象被释放时,D、E、F、G、H对象也会被释放。
关联大小(Retained Size)
对象A的关联大小为A的关联集合中所有对象的总大小,所以上图例子中,C的关联大小=D对象大小+E对象大小+F对象大小+G对象大小+H对象大小。换句话说,关联大小就是回收该对象后能释放的堆空间的大小。该大小需要重点关注。
支配树(Dominator Tree)
图论中的概念,经常用于编译器控制流构造中,套用到堆分析上,支配是指从任意路径上,必须经过对象A到达对象B,那么A支配B。以此支配关系构造的对象图即支配树。以上面的图为例子,到达E对象,必须经过C,所以C支配E,但是到达H不一定经过G(可以通过F),所以G不支配H。
垃圾回收根对象(GC Root)
垃圾回收器从这些区域开始扫描存活对象。比如下图中,垃圾回收器从线程栈这片区域出发,扫描到对象A和B,然后以这两个对象为起点,扫描其他对象。
垃圾回收根路径(GC Root Path)
从垃圾回收根对象到当前对象的路径。比如C对象的GC根路径为A->B->C
。垃圾回收器扫描对象时,从GC根出发,寻找到对象的路径,有这条路径在,垃圾回收器就认为该对象存活,因此不会回收该对象。该路径也能在一定程度上反映出对象在何处被创建。对于垃圾对象,不存在GC根路径,一个对象可能有多条 GC 根路径
文档内容是否对您有帮助?