【发布时间】:2013-08-06 00:56:14
【问题描述】:
假设在我的代码中某处我写了一个空的synchronized 块:
synchronized(obj){
//No code here
}
所以由于同步块不包含任何代码,JIT 编译器是否会通过不锁定 obj 来优化它,因为它没有用处?
Java 编译器也有类似的技巧,比如锁粗化,但是这个同步块也会被优化掉吗?
编辑:
根据 assylias 的观点,
synchronized(new Object()){
//empty block
}
JIT 编译器现在是否能够优化这一点,因为我使用的对象不会转义我的方法?
【问题讨论】:
-
@tbodt 如果他可以,他不会问...请告诉他如何“尝试”
-
我只是把那个代码放到一个文件里,反编译了class文件,虽然是空的,但同步块还在。
-
@tbodt 不能证明任何事情。它可能会被 JIT 删除。另一个编译器/JVM 的行为可能会有所不同,等等。
-
@Tala 恕我直言,了解编译器在后台做什么会让你成为更好的程序员。
-
@tbodt 查看字节码很少可以证明任何事情。只是不要打扰它。
标签: java locking compiler-optimization