Java 虚拟机锁的实现


一、Mark Word

Java 虚拟机的实现中,每个对象都有一个对象头,用于保存对象信息。对象头中的 Mark Word 是实现锁的关键。

32位机 Mark Word 的结构:

mark-word.png

运行期间Mark Word 存储的数据会根据锁标志位的变化而变化,可能储存4种数据:

mark-word.png

二、锁的升级

1、偏向锁

JDK6 的一种锁优化方式:如果程序没有竞争,则取消已经取得锁的线程同步操作——若某一锁被线程获取之后,便进入偏向模式,当线程再次请求这个锁时,无需再进行相关同步操作,从而节省操作时间。

JVM 中使用-XX:+UseBiasedLocking启用偏向锁。

2、轻量级锁

偏向锁失败,JVM 会让线程申请轻量级锁。

3、锁膨胀

4、自旋锁

5、锁消除