一个对象到底占用多少字节,该如何计算?
首页要借助openjdk 的jol工具
pom.xml中加入:
<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.10</version></dependency>

java对象都是8字节对齐的,不足的需要补齐 也就是始终是8的倍数
简单说先对象的组成:对象头+实例数据+(padding补齐)
对象头的组成:mark word + klass + (数组长度) ;如果是数组类型 才有数组长度的。
mark word = 8个字节
klass = 4个字节
这里输出 可以观察到所有的基本数据类型似乎是排序了从大到小排列,然后我们通过SIZE这一列开始算每8字节为一组,在OFFSET=24的位置由于是boolean占一个字节,OFFSET=28占4个字节,那就是差了8- 1 - 4 = 3个字节,那这里就进行补齐3个字节,继续向下OFFSET=32 占4个字节,那还差8-4=4个字节 需要补齐4个字节
所以总的结果=40 bytes。
如果是数组如下:
cs = new char[36] ;;执行结果:object internals:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)8 4 (object header) 41 00 00 20 (01000001 00000000 00000000 00100000) (536870977)12 4 (object header) 24 00 00 00 (00100100 00000000 00000000 00000000) (36)16 72 char [C.<elements> N/AInstance size: 88 bytesSpace losses: 0 bytes internal + 0 bytes external = 0 bytes total
这里char是占2个字节,长度是36,那这里是需要算上的。
完毕!!!
给个关注+转发吧





