java对象

java锁升级 - 图1

对象头

对象头组成:

1,Mark Word
2,指向类的指针
3,数组长度(只有数组对象才有)

markword

image.png

锁升级

大部分情况锁都不存在竞争,所以根据实际情况,锁升级设计如下:

1、无锁
原始状态。

2、偏向锁
第一个线程获取到锁,修改标志位。

3、轻量级锁
第二个线程进来后,获取不到锁,升级为轻量级锁,线程开辟空间,指向锁对象,cas重试。

4、重量级锁
cas重试一定次数后,升级为重量级锁。解锁的时候,如果发现是重量级锁,就要唤醒其他线程。