synchronized关键字解析
JAVA对象布局
对象头:JAVA对象的布局
synchronized上锁就改变对象的对象头
分为三部分:
- 实例数据
- 对象头
- 数据对齐
通过ClassLayout.parseInstance(l).toPrintable来打印对象的内存布局
64位虚拟机:实际96bit=12byte
Mark word+Class Metadata Address=12byte
JVM是规范,hotspot是产品
openjdk编译完就是hotspot
重新定义对象头
JVM规范
从Survivor到老年代,来回复制15次,是因为对对象头里的分代年龄占4个bit
对象状态解析
对象头总共96bit
Mark word 64bit
klass pointer/Class Metadata Address 32bit
不开启指针压缩的时候
Mark word 64bit
klass pointer/Class Metadata Address 64bit
对象状态:
- 无状态
- 偏向锁
- 轻量锁
- 重量锁
- gc标记
hashcode存在形式
Integer.toHexString(对象.hashcode)
ClassLayout.parseInstance(l).toPrintable