DK1.6 之前是重量级锁,他加锁底层是通过系统的mutex相关指令实现,会有用户态和内核态之间的切换,十分消耗性能。
JDK1.6之后对synchronized底层做了优化,引入了偏向锁、轻量级锁、在JVM层面实现加锁的逻辑,不依赖底层操作系统,就没有状态切换的消耗。同时引入自旋锁、适应性自旋锁、锁消除、锁粗化等技术来减少锁操作的开销。
所以在对象头的Mark word 锁主要存在四种状态依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态,他们会随着竞争的激...
DK1.6 之前是重量级锁,他加锁底层是通过系统的mutex相关指令实现,会有用户态和内核态之间的切换,十分消耗性能。
JDK1.6之后对synchronized底层做了优化,引入了偏向锁、轻量级锁、在JVM层面实现加锁的逻辑,不依赖底层操作系统,就没有状态切换的消耗。同时引入自旋锁、适应性自旋锁、锁消除、锁粗化等技术来减少锁操作的开销。
所以在对象头的Mark word 锁主要存在四种状态依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态,他们会随着竞争的激...