1.JVM锁概要
JVM锁概要.png
2.线程安全
JVM线程安全1.png
JVM线程安全2.png
3.对象头Mark
- Mark Word,对象头的标记,32位
- 描述对象的hash、锁信息,垃圾回收标记,年龄
- 指向锁记录的指针
- 指向monitor的指针
- GC标记
- 偏向锁线程ID
4.偏向锁
- 大部分情况是没有竞争的,所以可以通过偏向来提高性能
- 所谓的偏向,就是偏心,即锁会偏向于当前已经占有锁的线程
- 将对象头Mark的标记设置为偏向,并将线程ID写入对象头Mark
- 只要没有竞争,获得偏向锁的线程,在将来进入同步块,不需要做同步
- 当其他线程请求相同的锁时,偏向模式结束
- -XX:+UseBiasedLocking
- 默认启用
- 在竞争激烈的场合,偏向锁会增加系统负担
偏向锁.png
5.轻量级锁
轻量级锁1.png
轻量级锁2.png
轻量级锁3.png
6.自旋锁
自旋锁.png
7.偏向锁、轻量级锁、自旋锁总结
- 不是Java语言层面的锁优化方法
- 内置于JVM中的获取锁的优化方法和获取锁的步骤
- 偏向锁可用会先尝试偏向锁
- 轻量级锁可用会先尝试轻量级锁
- 以上都失败,尝试自旋锁
- 再失败,尝试普通锁,使用OS互斥量在操作系统层挂起
8.减少锁持有时间
减少锁持有时间.png
9.减小锁粒度
减少锁粒度1.png
减小锁粒度2.png
10.锁分离
锁分离1.png
锁分离2.png
11.锁粗化
锁粗化1.png
锁粗化2.png
锁粗化3.png
12.锁消除
锁消除1.png
锁消除2.png
13.无锁
无锁1.png
无锁2.png
网友评论