美文网首页
锁优化(2)--- 锁消除

锁优化(2)--- 锁消除

作者: Bre_eze | 来源:发表于2018-06-22 08:53 被阅读0次

锁消除是指虚拟机即时编译器再运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行消除。

如果一段代码中,堆上的数据都不会逃逸出去从而被其他线程访问到,那就可以把它们当作栈上的数据对待,认为它们是线程私有的,同步加锁自然也就无需进行。

    public String concatString(String s1, String s2, String s3) {
        return s1 + s2 + s3;
    }

上面的代码怎么看都跟同步没什么关系,但是由于String是一个不可变的类,对字符串的连接操作总是生成新的String对象来进行的,因此这里就存在优化的点。再JDK1.5之前,会转化成StringBuffer对象的连续append()操作,再JDK1.5及其以后的版本,会转化为StringBuilder对象的连续append()操作,即:

    public String cancatString(String s1, String s2, String s3){
        StringBuffer sb = new StringBuffer();
        sb.append(s1);
        sb.append(s2);
        sb.append(s3);
        return sb.toString();
    }

从这面就可以知道在实际的操作中是有牵涉到同步的,因为StringBuffer.append()方法中都有一个同步块,锁的对象就是sb。虚拟机观察sb,很快就会发现它的动态作用域被限制在concatString()方法内部。因此这里虽然有锁,但是可以被安全的消除掉,在即时编译之后,这段代码会忽略掉所有的同步而直接执行了。

相关文章

  • 锁优化(2)--- 锁消除

    锁消除是指虚拟机即时编译器再运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行消除。 如果一...

  • JVM锁消除和锁粗化

    锁消除和锁粗化都是jvm对于锁的优化措施 锁消除 锁消除就是字面意思,虚拟机会根据自己的代码检测结果取消一些加锁逻...

  • Java虚拟机的锁优化

    JDK内部的优化策略主要包括以下几点 锁偏向 轻量级锁 自旋锁 锁消除 1.锁偏向 锁偏向是一种针对加锁操作的优化...

  • 关于synchronized的锁升级自旋问题

    1.6之后对synchronized做了优化,包括锁消除、锁粗化、自旋和锁升级的过程:偏向锁、轻量级锁、重量级锁。...

  • 锁优化

    锁优化 JDK6之后对锁的实现引入了大量的优化,如适应性自旋(Adaptive Spinning)、锁消除(Loc...

  • java面试题 --- 并发②

    1. JDK1.6 开始对 synchronized 做了哪些优化?使用了锁升级、锁粗化、锁消除等方式来优化性能。...

  • synchronized

    synchronized synchroized 是一个重量级锁,但是现在经过优化后,引入了自旋锁、锁消除、锁粗化...

  • JVM中的锁优化

    锁优化 Jvm 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 什么是锁升级,降...

  • 锁优化

    概述 本文主要论述jvm的各种锁优化技术,主要分为适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁。这些技术都是为了在...

  • SQL锁优化问题

    关于SQL锁。SQL优化少不了SQL锁优化 1.SQL常见锁有:共享锁 作用于查询操作(Select) 2.排他锁...

网友评论

      本文标题:锁优化(2)--- 锁消除

      本文链接:https://www.haomeiwen.com/subject/ttwcyftx.html