ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-09-03 12:32:51  阅读:225  来源: 互联网

标签:无锁 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有