当前位置: 首页 > news >正文

受欢迎的昆明网站建设镇江门户网

受欢迎的昆明网站建设,镇江门户网,wordpress 主页链接,深圳宝安区医院目录 轻量级锁 轻量级锁的工作流程 轻量级锁的解锁 偏向锁 偏向锁的流程#xff1a; 偏向锁和轻量级锁机区别#xff1a; 其他优化 自旋锁和自适应自旋锁 锁消除 锁粗化 轻量级锁 “轻量级” 是相对于使用操作系统互斥量来实现的传统锁而言的#xff0c;因此传统的…目录 轻量级锁 轻量级锁的工作流程 轻量级锁的解锁 偏向锁 偏向锁的流程 偏向锁和轻量级锁机区别 其他优化 自旋锁和自适应自旋锁 锁消除 锁粗化 轻量级锁 “轻量级” 是相对于使用操作系统互斥量来实现的传统锁而言的因此传统的锁机制就被称为“重量级”锁它的设计初衷是在没有多线程竞争的前提下减少传统的重量级锁使用操作系统互斥量产生的性能消耗。 首先我们要了解JVM这里值HotSpot JVM) 中对象头的内存布局。JVM 把对象头分为两部分第一部分是Mark Word存储了哈希码HashCode、GC分代年龄等。另一部分用于存储指向方法区对象数据类型的指针。Mark Word他是实现轻量级锁和偏向锁的关键。 轻量级锁的工作流程 在代码即将进入同步块的时候如果此同步对象没有被锁定锁标志位为“01”状态虚拟机首先在当前线程的栈帧中建立一个名为锁记录Lock Record的空间用于存储锁对象的Mark Word的拷贝。 然后虚拟机将使用CAS操作尝试把对象的Mark Word更新为指向Lock Record的指针。如果CAS成功那么表示该线程拥有了这个对象的锁并且将Mark Word 的锁标志位转变为“00”表示此对象处于轻量级锁定状态。 如果CAS失败Mark Word 中已经有了指向锁记录的指针有两种情况 一Mark Word中的指针指向的是当前线程的锁记录表示发生了轻量级锁重入。这时JVM就会再创建一个锁记录只不过这个所记录不会记录Mark Word的拷贝会指向null表示一次锁重入计数。 二Mark Word中的指针指向的不是当前线程的锁记录这时说明发生了锁竞争那轻量级锁就不再有效必须要膨胀为重量级锁锁标志转变为“10”此时Mark Word 就不再存储锁记录的指针了而是存储重量级锁互斥量monitor对象的指针了。 轻量级锁的解锁 同样是用CAS来实现的用锁记录中保存的原Mark Word的值来替换恢复当前Mark Word中的值。 轻量级锁能提升同步性能的依据是“对于绝大多数的锁在整个同步周期内都是不存在竞争的”这一经验法则。如果没有竞争那么轻量级锁就避免了使用互斥量的开销但如果存在锁竞争那么除了互斥量的开销外还额外发生了CAS的开销。因此再有竞争的情况下轻量级锁反而回避重量级锁更慢。 偏向锁 顾名思义他的意思是这个锁会偏向与第一个获得他的线程。 偏向锁的流程 若JVM 启用了偏向锁那么当锁对象第一次被线程获取的时候JVM 将会把对象头的标志位设为“01”并把偏向模式设置为“1”表示进入偏向模式。同时使用CAS把获得这个锁的线程ID记录再Mark WordMark Word的hashCode位置中。如果成功那么持有偏向锁的线程每次进入的这个锁的同步块的时候将不再进行任何操作例如锁重入、解锁、更新Mark Word等 注意当一个对象已经计算过一致性哈希码后那么它就再也无法进入偏向锁状态了而当一个对象当前正处于偏向锁状态又收到计算哈希码的请求之后偏向锁会立即膨胀为重量级锁。因为在重量级锁的ObjectMonitor类中有字段可以记录原来的非加锁Mark Word其中自然可以存储原来的哈希码。 偏向锁和轻量级锁机区别 偏向锁在轻量级锁的基础上进一步提升了性能。轻量级锁在无竞争的情况下对于每次的加锁请求都使用CAS来避免了互斥量的使用而偏向锁就是在无竞争的情况下连CAS都不用做了只是在线程第一次获取偏向锁的时候使用了CAS通过判断Mark Word中的ThreadID是不是当前线程即可如不是则进行重偏向即可。 其他优化 自旋锁和自适应自旋锁 使用互斥同步来解决线程安全问题时其中对性能产生很大影响的就是线程阻塞带来的线程上下文文切换挂起线程和恢复线程都要转入内核态来完成。所以就有了自旋锁的优化如果物理机器上有多个处理器或处理器多个核心的话若当前线程第一次获取锁失败并不会立马进入阻塞而是会再尝试获取锁几次我们会让线程执行一个忙循环自旋。自适应自选也就是不固定自旋的时间。 锁消除 锁消除的判断依据主要来源于数据的逃逸分析如果判断到一段代码中在堆上的数据都不会逃逸出去被其他线程访问到那么这些数据就可以当作栈上的数据对待认为他们是线程私有的这时就没有必要再加锁了。 锁粗化 我们通常加锁的时候尽量让同步块中的代码尽可能的少在存在锁竞争的情况下可以尽快的拿到锁。但锁的粒度过小的话有可能出现对同一个对象反复加锁和解锁甚至加锁操作是在循环体中这样就导致了很大的性能消耗。类似于这种情况JVM 就会扩展粗化锁的范围。 一些看起来没有加锁的代码其实隐式的加了很多锁 public static String concatString(String s1, String s2, String s3) {return s1 s2 s3; } javap 生成字节码 public static java.lang.String concatString(java.lang.String, java.lang.String, java.lang.String);descriptor: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;flags: ACC_PUBLIC, ACC_STATICCode:stack2, locals3, args_size30: new #2 // class java/lang/StringBuilder3: dup4: invokespecial #3 // Method java/lang/StringBuilder.init:()V7: aload_08: invokevirtual #4 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;11: aload_112: invokevirtual #4 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;15: aload_216: invokevirtual #4 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;19: invokevirtual #5 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;22: areturn String 是一个不可变的类编译器会对 String 的拼接自动优化。在 JDK 1.5 之前转化为 StringBuffer 对象的连续 append() 操作每个 append() 方法中都有一个同步块。反编译后如下 public static String concatString(String s1, String s2, String s3) {StringBuffer sb new StringBuffer();sb.append(s1);sb.append(s2);sb.append(s3);return sb.toString(); } 扩展到第一个 append() 操作之前直至最后一个 append() 操作之后只需要加锁一次就可以。
http://www.hkea.cn/news/14292818/

相关文章:

  • 常熟市住房和城乡建设部网站重庆建设工程信息网哪里可以查看二级建造师已解锁
  • 设计模板网站中国有没有开源社区
  • 上海网站建设公司2018年做网站赚钱
  • 一个网站备案两个域名吗长沙市网站建设
  • logo设计在线生成免费网站永久免费虚拟主机
  • 做网站公司不给源码wordpress怎么分段
  • 公司内网网站建设软件外包开发保密协议
  • 江苏网站建设方案cms内容管理系统是什么
  • 哪个网站可以学做包子汽车之家app下载最新版
  • 广告网站设计方案自建网站过程
  • 大庆建设集团网站全球4a广告公司排名
  • 网站公司建设个服务号多少钱开发网站做什么
  • 建设银行网站查询做网站的收获及感想
  • html5网站都有那个网站检测
  • 邯郸网站制作seo执行招聘
  • 废品网站怎么做久久建筑网碗扣式钢管脚手架安全技术规范
  • 期末作业制作网站宝山区网站建设
  • 网站开发设计的技术ip138查询域名查询
  • 怎么注册域名网站怎么查找网站的服务器
  • 免费企业网站建设要求互联网公司裁员
  • 营销网站型建设多少钱wordpress面打开404
  • 中企动力科技股份有限公司网站官网广告产品
  • 如何做网站平台网站制作九江
  • 网站建设运营要求515ppt模板网
  • 怎样增加网站收录量石家庄个人建站网站策划
  • 网站建设价格标准方案推广 电子商务网站建设
  • 韩国封号事件网站建设办公室工装设计公司
  • 滨州做网站优化十堰网站网站建设
  • 建一个免费看电影的网站犯法不国内空间站
  • 网站中的图片必须用 做吗我的深圳app官网下载