java对象包括对小偷,实例数据和对齐填充
任何一个对象都有对象头,对象头在32位系统上占用,64位系统上占用16bytes
对象头的结构
| mark word | klass pointer | array size (opt) | padding
空对象的不包含任何成员变量,其大小即对象头大小:
在 32 位 JVM 上,占用 8 字节;
在未开启UseCompressedOops的 64 位 JVM 上,16 字节。(感谢评论区的@SingleCool纠正)
在开启UseCompressedOops的 64 位 JVM 上,12 + 4 = 16;
数组也是对象,故有对象的头部,另外数组还有一个记录数组长度的 int 类型,随后是每一个数组的元素:基本数据类型或者引用。8 字节对齐
https://www.liaohuqiu.net/cn/posts/caculate-object-size-in-java/