Memory Analyzer Tool 1 Shallow heap & Retained heap & dominator tree(控制树)

1. shallow heap

引用原文介绍 :Shallow heap is the memory consumed by one object. An object needs 32 or 64 bits (depending on the OS architecture) per reference, 4 bytes per Integer, 8 bytes per Long, etc. Depending on the heap dump format the size may be adjusted (e.g. aligned to 8, etc…) to model better the real consumption of the VM.
注:红色英文表示申请的空间可能比实际需要的大

shallow heap的大小指的是该对象在没有引用其他对象的情况下本身占用的内存大小。

  • 普通对象的普通对象的shallow heap 的大小(不包括数组类型)依赖于它含的方法,元素的大小。
  • 数组类型的shallow heap的大小则依赖于数组的长度和数组里面元素的类型。
  • 集合类型的shallow heap的大小则指的是集合所包含的所有对象的大小的总和。

普通类型 shallow_size=对象头+各成员变量大小之和+对齐填充
1.对象头

java的对象头=Mark Word+指向类的指针+数组长度(只有数组对象才有)
[Mark Word] 在32位JVM中的长度是32bit,在64位JVM中长度是64bit。
[指针] 在32位JVM中的长度是32bit,在64位JVM中长度是64bit。

2.各成员变量大小之和
就是实例数据,比如属性,如果存在继承情况,当然要包含父类的成员变量。
基本数据类型字节数对照表:

类型 bytes
double 8
long 8
float 4
int 4
short 2
char 2
boolean 1
byte 1
ref(引用) 4
注:记住不包含所引用的对象本身的大小。

3.对齐填充
凑齐总长度是8byte的倍数,比如计算长度是20个byte,就会凑齐至24个byte

2. retained heap

retained heap是指对象自己本身的shallow heap的大小加上对象所引用的对象的大小。换句话说retained heap的大小是指该对象被回收时垃圾回收器应该回收的内存的大小。

通过一系列的名为“GC Root”的对象作为起点,从这些节点向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Root没有任何引用链相连时,则该对象不可达,该对象是不可使用的,垃圾收集器将回收其所占的内存。
借鉴别人的图来解释下GC Root收集算法

假设存在如下图中的引用关系:
在这里插入图片描述

确切的来说,这个图示指的是如果断开gcRoot对B的引用,让B符合回收条件时的状态,此时c也会被回收,因为只有B引用C,D不会被回收,因为除了B引用D以外,A也会引用D

图1中,GC Roots直接引用了A、B、D。
A对象的Retained Size=A对象的Shallow Size
B对象的Retained Size=B对象的Shallow Size + C对象的Shallow Size

B对象的Retained Size为何不包括D呢?因为D此时也被GC ROOT引用了,释放B并会释放D

假设GC ROOT不再引用D:

在这里插入图片描述
B对象的Retained Size=B对象的Shallow Size + C对象的Shallow Size + D对象的Shallow Size
引申: 在java语言中,可作为GCRoot的对象包括以下几种:

    a. java虚拟机栈(栈帧中的本地变量表)中的引用的对象。 
    b.方法区中的类静态属性引用的对象。 
    c.方法区中的常量引用的对象。 
    d.本地方法栈中JNI本地方法的引用对象。

3. dominator tree(控制树)

对象X控制(dominates)对象Y是指从GC Root对象到达对象Y的所有路径一定经过对象X,对象X称为对象Y的控制者(dominator)。如果是对象X是距离对象Y最近的控制者,则称为immediate dominator。控制关系存在传递性,即如果X控制Y且Y控制Z,则X一定控制Z。

控制树(dominator tree)就是描述对象控制关系的树形图。X的控制子树实际上就是X的Retained Set。还是以上面的引用关系图为例。X的控制子树如下图:

在这里插入图片描述
immediate dominator是指紧邻的dominator,X是E、F的immediate dominator

一个对象X的Retained Set是指因对象X被垃圾回收而被回收的对象集合





参考:
《》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值