我们在Java单个对象内存布局中讲解了单个简单的Java对象所占内存的大小的计算。那么这篇文章主要是讲解复杂Java对象所占内存大小的计算,我们把继承、复合的对象称为复杂对象
继承对象
class Parent {
protected int x; // 4字节
protected int y; // 4字节
protected boolean flag; // 1字节
}
class Child extends Parent {
private int z; // 4字节
}
public class ExtendsObjectSizer {
public static void main(String[] args) {
System.out.println("继承对象的大小为:" + ObjectSizeFetcher.sizeOf(new Child()) + "字节");
}
}
然后重新打包,执行如下的命令:
## 没有开启指针压缩功能
java-XX:-UseCompressedOops -javaagent:ObjectSizeFetcherAgent-1.0-SNAPSHOT.jar com.twq.ExtendsObjectSizer
得到的结果如下:
可以看出new Child()的内存大小为40字节,那么这个40字节是怎么来的呢?我们看下图:
40字节 = 16 + (4 + 4 + 1 + 7) + 4 + 7</