有了锁消除后,就能随意的使用锁了么?

锁消除是JIT编译器对内部锁具体实现所做的一种优化手段, JIT编译器会借助逃逸分析来判断同步块中所使用的锁对象是否只能够被一个线程访问,如果确实没有其他线程能够访问到这个锁对象,那么JIT编译器在编译这个同步块时就不会生成synchronized关键字所对应的字节码指令,不过这不意味着开发可以随意的在不需要加锁的情况下加锁,因为锁消除是由JIT编译器做的优化,而不是javac,而一段代码只有被执行的频率足够大时,才可能被JIT编译器优化,所以可以这样说,只要同步块执行的频率没达到JIT编译器的要求,那么该同步块就不会被做锁消除优化,那么这个同步块中的锁开销就依旧会存在。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/107499987
今日推荐