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

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

时间:2022-09-03 12:22:31浏览次数:63  
标签:无锁 synchronized Jdk1.6 标识 轻量 偏向 底层

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

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

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

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

  

 synchronized锁主要存在五种状态

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

锁会随着竞争的激烈而逐渐升级。且升级不可降级,即 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁是单向的。 这种策略是为了提高获得锁和释放锁的效率。

什么是无锁不可偏向?

  

  

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

相关文章

  • list底层实现
    list底层实现list和vector都是容器,只不过他们的存储结构不同,vector实际底层结构是顺序表,支持随机访问。list的底层结构带头双向链表,不支持随机访问。 但list的底层实现......
  • 32 | JAVA集合Deque(一种接口,比Queue更丰富的接口,底层实现可为LinkedList)
    Deque如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(DoubleEndedQueue),学名Deque。Java集合提供了接口Deque来实现一个双端队列,它的功能是:既可以添加到队......
  • 28 | JAVA集合Properties专门用来存取配置文件(底层仍为哈希表)
    使用Properties配置文件的特点是,它的Key-Value一般都是String-String类型的,因此我们完全可以用Map<String,String>来表示它由于历史遗留原因,Properties内部本质上是一......
  • 【学习底层原理系列】Java底层-synchronized锁-3轻量级锁篇
     一.上一篇回顾1.偏向锁中的批量撤销和批量重偏向2.偏向锁发生了竞争,锁就要升级二.轻量级锁拆解1.加锁流程构建LockRecord,将LockRecord的obj指向当前锁对象,然后将无......
  • Vector底层实现
    Vector底层实现vector的三个私有成员:_start  记录初始位置 ,_finish 记录有效字符 ,_endofstoage 记录容量大小vector会存储的类型不同,所以要用模版来定......
  • 网赚是什么?浅谈分析底层逻辑和煜讯汇
    那么网赚到底是什么?顾名思义,网赚就是利用电脑在因特网上赚钱,这是一个很笼统的含义。“网赚”大概是在2000年左右被人认可的,估计最大规模的网赚行为应该是淘宝开店。淘宝......
  • Synchronized的底层实现原理(看这篇就够了)
    谈到多线程就不得不谈到Synchronized,重要性不言而喻,今天主要分享Synchronized的底层实现。 Synchronizedsynchronized关键字解决的是多个线程之间访问资源的同步性,syn......
  • synchronized 原理
    java中每一个对象都有一个objectMonitor对象与之关联monitor对象中主要有如下属性:owner:持有当前objectMonitor的线程地址entrylist:阻塞队列,存放竞争当前monitor......
  • Java synchronized锁升级过程验证
    ​Java对象结构 ​  一个对象包括三部分:对象头实例数据对其填充 对象头:MarkWord:用于存储对象自身运行时的数据,如哈希码(HashCode),GC分代年龄,锁状态标志,......
  • 底层原理解释
    GILGIL是Python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行Python程序的时候会霸占Python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运......