前言
本篇文章介绍java中的对象的底层存在形式,由哪些部分组成,每部分的大小等等。
java中有两种对象的底层结构,分别是普通对象和数组对象。
普通对象的底层结构
普通对象是由四部分组成的,如下表所示
组件 | 大小 |
---|---|
对象头,hotspot中称为markword |
8 个字节 |
ClassPointer,指向类对象 | 大小取决于JVM配置,如果参数UseCompressedClassPointer 开启则为4 个字节,不开启则为8 个字节,默认为开启状态。 |
实例数据,就是成员变量 |
如果是基本数据类型 ,大小就是这个数据类型的大小,比如INT类型是4个字节。如果是引用数据类型 ,取决于JVM配置,如果参数UseCompressedOops 开启则为4 个字节,不开启是8 个字节。默认为开启状态。 |
padding 部分 | 用于将整个对象大小补齐为8的倍数。 |
第二项中的类对象,就是这个类的Class
对象,通过ClassName.class能得到这个对象。