java确实避开了线程的分析处理。holdsLock()正确吗?
当我使用-XX:+DoEscapeAnalysis -server
运行该示例时,它运行良好(打印为true):
final Object lock = new Object();
synchronized (lock) {
System.out.println(Thread.holdsLock(lock)); // prints true
}
另一方面,简短且不太详细的Java HotSpot™ Virtual Machine Performance Enhancements文档说明如下:
The server compiler also eliminates locks for all non-globally escaping objects.
因此,如果escape分析消除了不必要的同步,它应该打印false
我猜escape analysis可以正确地处理holdsLock
(消除锁不会破坏holdsLock()
),但我希望看到一些官方参考或相关的JVM源代码片段
共 (0) 个答案