当我使用以下命令运行此示例时,它可以正常工作(打印为真)-XX:+DoEscapeAnalysis -server
:
final Object lock = new Object();
synchronized (lock) {
System.out.println(Thread.holdsLock(lock)); // prints true
}
另一方面,简短且不太详细的Java HotSpot™ 虚拟机性能增强文档说明如下:
服务器编译器还消除了所有非全局转义对象的锁定。
因此,如果逃逸分析消除了这里不必要的同步,它应该打印false
.
我猜逃逸分析处理holdsLock
得当(消除锁不坏holdsLock()
),但我想看看一些官方参考或相关的 JVM 源代码片段。