锁消除 与 锁粗化

2019-11-22  本文已影响0人  龙剑灵

锁消除

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

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

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

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

* 锁消除技术

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

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

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


锁粗化


锁粗化

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

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

上一篇 下一篇

猜你喜欢

热点阅读