先使用个工具 JOL
使用该工具
打印
已经打印出Object对象的内容
下面来分析一下
先来看看布局
MarkWord: 8个字节
ClassPointer : 四个字节
InstanceData(成员变量):N个字节
Padding:不定
由于JVM一般允许在64位的操作系统上,因此总线的宽度为64bits 也就是 8 字节 ,因此对于数据的读取每次8字节是最方便的,因此出现了padding 的操作使对象大小补齐到8的倍数,又因为JVM默认开启了字节压缩(UseCompressedClassPointers,UseCompressedOops),所以ClassPointer为四字节,
因此可以分析
顺便思考一下markWord的作用是啥?
我们做个试验
看看打印
可以看到synchronized给对象上锁时候是上在了MarkWord上,详情了解锁的升级:
引用一下马老师的图
64bit 刚好 8字节