一个java对象占多少个字节的总结和理解

时间:2023-01-11 18:03:51

最近在看《深入理解Java虚拟机》和《Java并发编程的艺术》这两本书,里面都设计到了计算对象大小的内容,搞了两天终于弄清楚。

首先,参考了这篇文章《一个java对象占多少个字节?》,想彻底理解请先看篇文章,里面的工具已经验证过了,想弄明白最好自己跑一遍加深印象,看看JVM计算的和你计算的是不是一样。

接下来,上干货,各种类型分别占多少个字节(bytes):

计算方式:对象头+实例数据+对齐填充

类型占用字节数(bytes)
类型 64位(无压缩) 64位(压缩)
boolean 1 1
byte 1 1
short 2 2
char 2 2
int 4 4
float 4 4
long 8 8
double 8 8
普通对象头 16 12
数组对象头 24 16
reference(引用类型) 8 4
注意:JVM默认是开启压缩参数的 -XX:+UseCompressedOops

另:

计算对象本身占用大小对象总空间占用大小的区别:

1.本身占用大小,对象中除了基本类型之外,其他类型都按照引用来计算,不要计算引用中对象的大小。

2.总空间占用大小,要计算对象中每一个对象的大小,引用中的对象也要计算,再累加获得总空间。

第一行的文章里讲得很清晰了,以上只是总结一下,希望能帮到你。