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标记

synchronized关键字解析

hashcode存在形式

Integer.toHexString(对象.hashcode)
ClassLayout.parseInstance(l).toPrintable

锁升级过程

synchronized关键字解析
synchronized关键字解析