有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案