JVM锁优化机制
JVM通过自旋锁、自适应自旋、锁消除、锁粗化等技术优化同步性能,同时采用锁升级/降级机制动态调整锁状态。
一、锁升级与降级
锁的4种状态(级别由低到高):
- 无锁状态:初始状态,未发生竞争。
- 偏向锁:单线程重复获取锁时启用,避免CAS开销。
- 轻量级锁:多线程轻度竞争时通过CAS自旋获取锁。
- 重量级锁:竞争激烈时,线程阻塞并依赖操作系统调度。
锁升级/降级:JVM根据竞争情况自动切换锁状态(如偏向锁→轻量级锁)。
注意:synchronized
的锁只能升级(膨胀),不能降级(收缩)。
二、锁升级流程
1. 偏向锁(乐观锁)
- 触发条件:首次线程通过CAS获取锁,Mark Word标记为偏向锁。
- 特性:
- 同一线程再次获取锁时直接进入临界区,无需同步操作。
- 适用于无实际竞争