美文网首页
Java虚拟机的锁优化

Java虚拟机的锁优化

作者: 即墨灯火 | 来源:发表于2019-01-02 03:12 被阅读9次

    JDK内部的优化策略主要包括以下几点

    1. 锁偏向
    2. 轻量级锁
    3. 自旋锁
    4. 锁消除

    1.锁偏向

    锁偏向是一种针对加锁操作的优化手段。其思想为:如果一个线程获得了锁,那么锁就进入偏向模式。当这个线程再次请求锁时,无须再做任何同步操作。这样可以节省大量有关锁申请的操作,从而提高程序性能。

    适用场景:几乎没有锁竞争的场合,因为连续多次极有可能是同一个线程请求相同的锁

    如何启用?

    -XX:+UseBiasedLocking
    

    2. 轻量级锁

    如果偏向锁失败,虚拟机并不会立即挂起线程,它还会使用一种称为轻量级锁的优化手段。
    //todo

    3. 自旋锁

    当线程暂时无法获得锁时,系统乐观的认为该线程将在不久的将来得到锁,因此,虚拟机将会让该线程做几个空循环而非挂起,如果经过几个空循环后,得到了锁,则顺利进入临界区,如果还不能获得锁,则将线程在操作系统层面挂起。

    4. 锁消除

    Java虚拟机在编译时,通过对运行上下文的扫描,去除不可能存在共享资源竞争的锁。通过锁消除,可以节省毫无意义的请求锁时间。

    这里消除的锁可能包括程序员的不当加锁,更主要的则是对一些内置API进行优化。很多线程安全的类型是通过加锁来实现的,但是在实际使用中,可能并不存在并发冲突问题,则Java虚拟机会去除无用的锁。

    锁消除涉及一项关键技术,逃逸分析。逃逸分析是指观察某一个变量是否会逃出一个作用域。进行逃逸分析需要在-server模式进行,可以使用-XX:+DoEscapeAnalysis参数来打开。

    如何启用?

    -XX:+EliminateLocks
    

    相关文章

      网友评论

          本文标题:Java虚拟机的锁优化

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