JVM heap中对象大小有着如下大小表示

如果对象存在其他引用,那么我们来描述对象大小有如下几种类型:

a)Swallow Size: 存储对象自身所包含的内存占用量

1.仅表示对象自身

2.集合等,对象自己和对象中元素或者域(fields)的“引用”的大小。只包含引用数据的大小

3.可以使用instrumentation.getObjectSize(obj)获取到大小

b)Retained Size: 对象自身的swallow size加上此对象可达的所有对象的swallow size

1.直接可达,间接可达

2.在GC树上,仅仅来自此对象,不包含其他引用(包括gc root reference)

3.汇总理解就是此对象被垃圾收集器回收时候GC释放掉的内存大小

c)Deep Size: 相比如上两种这类较为少使用,递归遍历class: fields+superclass 的swallow size总和

参考

Java Performance: The Definitive Guide

大小计算方式:Instrumentation Memory Counter


版权声明:本文为博主原创文章,未经允许不得转载。