14 jvm怎么决定从轻量级锁进化为重量级锁

vvEcho 2026-01-27 17:47:29
Categories: Tags:

老版本例如jdk1.6可以参数-XX:PreBlockSpin=10来指定自旋次数,后面jdk升级后会动态自适应自旋;会根据CPU核数,锁竞争情况,历史成功率来动态调整自旋次数。

对应的决策过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
尝试CAS

成功 → 继续轻量锁
or
失败 → 自旋N次

成功 → OK
or
失败 → 看:
- 持锁时间长?
- 等待线程多?
- 历史失败多?
满足任意严重情况

升级为重量锁(OS Mutex)