美文网首页
锁消除 与 锁粗化

锁消除 与 锁粗化

作者: 龙剑灵 | 来源:发表于2019-11-22 14:35 被阅读0次

    锁消除

    如上图示例, object在方法外部, 此为正常的同步方法.

    若将Object object =new Object()移到方法内部.如下

    程序看是有锁的,但实际上没有

    编译器对于锁的优化措施:

    * 锁消除技术

    * JIT编译器(Just In Time编译器)可以在动态编译同步代码时,使用一种叫做逃逸分析的技术,来通过该项技术判别程序中所使用

    * 的锁对象是否只被一个线程所使用,而没有散布到其他线程当中;如果情况就是这样的话,那么JIT编辑器在编译这个同步代码时就

    * 不会生成synchronized关键字所标识的锁的申请与释放机器码,从而消除了锁的使用流程。


    锁粗化


    锁粗化

    字节码还是会按照 synchronized块出现次数正常编译

    JIT编译器在执行动态编译时,若发现前后相邻的synchronized块的是同一锁对象,那么它就会把这几个synchronized块给合并成一个较大的同步块, 这样做的好处在于线程在执行代码时就无需频繁申请写释放锁了,从而达到申请与释放锁一次,就可以执行完全部的同步代码块,从而提升了性能

    相关文章

      网友评论

          本文标题:锁消除 与 锁粗化

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