Java教程:JVM对Java的原生锁做了哪些优化?

 JVM对Java的原生锁(即synchronized关键字)做了许多优化,其中包括:

1.偏向锁(Biased Locking)

  当一个线程获取锁后,JVM会将锁的对象头标记为偏向锁。此时,该线程可以无需竞争地获取该锁。这种情况下,锁的获取和释放不需要额外的开销,因为偏向锁会记录线程ID,使得在该线程持有锁期间,其他线程无法获取该锁。只有在其他线程尝试获取锁时,才会升级为轻量级锁。

2.轻量级锁(Lightweight Locking)

  当多个线程争夺锁时,JVM会将锁标记为轻量级锁。此时,JVM会在锁对象的对象头中记录指向线程栈中锁记录的指针,以及用于保存原始对象的指针。这样,当一个线程尝试获取该锁时,JVM会将该线程的栈帧中的锁记录与锁对象头中的指针进行比较。如果相同,则表示该线程已经获得了该锁;否则,JVM会使用CAS操作尝试将锁对象头中的指针指向当前线程的锁记录。如果CAS操作成功,表示当前线程成功获得了锁。否则,表示有其他线程争夺该锁,此时JVM会将锁升级为重量级锁。

3.重量级锁(Heavyweight Locking)

  当多个线程争夺锁时,如果无法获得锁,则会升级为重量级锁。此时,JVM会使用操作系统的互斥量实现锁。重量级锁的开销非常大,因为需要进行用户态与内核态之间的上下文切换。

  下面是一个简单的代码演示,展示了偏向锁、轻量级锁和重量级锁的使用情况。

public class SynchronizedDemo { private int count = 0; public synchronized void increment() { count++; } public static void main(String[] args) { SynchronizedDemo demo = new SynchronizedDemo(); for (int i = 0; i < 100000; i++) { demo.increment(); } System.out.println(demo.count); } }

  在这个示例中,我们使用synchronized关键字来对increment()方法进行同步。由于该方法是实例方法,因此锁对象是该实例对象。当多个线程同时访问该方法时,JVM会根据锁的状态来选择使用偏向锁、轻量级锁或重量级锁。具体的选择过程是由JVM内部的锁升级算法来决定的,这里不再详细展开。

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:Java教程:JVM对Java的原生锁做了哪些优化? https://www.dachanpin.com/a/cyfx/10625.html

(0)
上一篇 2023-05-12 02:02:21
Java教程:Maven是什么?Maven能用来做什么?
下一篇 2023-05-12 02:03:24

相关推荐

  • 林芝市精准服务高校毕业生创业就业

    2019年以来,林芝市以正确处理好高校毕业生政府就业和市场就业关系为根本方法,全力推动应届高校毕业生实现更充分更高质量就业。截至目前,全市1369名应届高校毕业生,除报考全区机关事业单位岗位和研究生意愿的13人外,有就业意愿的应届高校毕业生实现全就业,高校毕业生就业创业工作成效为历年最佳。 2019年以来,林芝市委经济工作会议、林芝市政府工作报告将做好高校毕…

    创业分享 2023-05-12
    136
  • 绵阳市打造军民融合综合服务平台服务人才创新创业

    推进军民融合,人才是关键。近年来,我市积极整合项目、资金等要素,着力打造各类人才共建共享的科研创新平台,不仅为创新创业人才提供量身定制的服务,也有效促进了军民融合成果转化,为军民融合深度发展注入强劲动能。 2014年,山东人刘昆明作为引进人才之一来到绵阳发展,创办了绵阳赛恩新能源科技有限公司。作为一家专业从事永磁顶级研发生产的科技型中小企业,随着技术水平的提…

    创业分享 2023-05-18
    263
  • 海归是早创业,还是先就业?听听过来人是如何说的

      叶烽曾在英国留学和工作6年,2007年在宁乡经开区创立了一家机械公司,2013年成立长沙大河西农产品物流中心,自我调侃“从卖铁的变成卖菜的”。   尽管星火钱包在互联网金融业内已经小有名气,但阳雪却在融资中感受到地域歧视,当他们去北京找一家风投公司,对方问“你在湖南凭什么做得过人家在北京上海的?”阳雪说:“我们特别想争一口气,凭什么湖南的就不能做好?” …

    创业分享 2023-05-15
    188
  • 软件测试模型有几种?这4中软件测试模型你都知道吗

    在软件开发过程中,人们根据经验教训并结合未来软件的发展趋势总结出了很多软件开发模型,如瀑布模型、快速原型模型、迭代模型等,这些模型对软件开发过程具有很好的指导作用,但遗憾的是它们对软件测试并没有给予足够的重视,利用这些模型无法更好地指导软件测试工作。 软件测试是与软件开发紧密相关的一系列有计划的活动,是保证软件质量的重要手段因此人们又相继设计了很多软件测试模…

    2023-05-12
    239
  • 从跟随者到引领者,ICT企业如何创业创新?

      创业谨防盲目从众   然而,随着国际地位的提升,中国企业必须走上基础创新的道路。“从引领者到超越者,市场份额、业务收入并不是单纯判定指标,能否在技术研发甚至是基础技术研发方面发挥带动和引领的作用,是判断中国企业是否真正超越的关键因素。” 高旭东表示。   我国设备商现在已经实现了从跟随到领先者的超越,而要当好领先者,高旭东认为其还需要加强对基础技术的研究…

    2023-05-31
    195

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息