其他分享
首页 > 其他分享> > synchronized在Jdk1.6后的底层优化分析

synchronized在Jdk1.6后的底层优化分析

作者:互联网

JDK1.6 对synchronized锁的实现引入了大量的优化来减少锁操作的开销,如: 偏向锁、轻量锁、自旋锁、适应性自旋锁、锁消除、锁粗化 等等技术。

讲synchronized之前,先说一些知识点。

  锁的本质是可以理解为更新一个标识,就synchronized而言,这个标识是存在对象头中。

  64位Hotspot虚拟机中,对象头定义为12个字节(byte),一个字节是8位(bit),也就是对象头一共96位。也就是说其中一些位数就是用来存储我们锁标识的。

  

 synchronized锁主要存在五种状态

(1)无锁不可偏向  
(2)无锁可偏向
(3)偏向锁
(4)轻量锁
(5)重量锁

至于GC标记,如果这个对象被GC标记的话,这个标记也是存储在lock位的。
锁会随着竞争的激烈而逐渐升级。且升级不可降级,即 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁是单向的。 这种策略是为了提高获得锁和释放锁的效率。

什么是无锁不可偏向?

  无锁好理解,就是说这个对象没有被任何线程上锁。不可偏向的意思就是说这个对象不会偏向于某个线程(这句话涉及到偏向锁,看完后边回来就理解了)。

  

  

  

标签:无锁,synchronized,对象,Jdk1.6,标识,轻量,偏向,底层
来源: https://www.cnblogs.com/xinay/p/16652340.html