기본적으로 핫 스폿을 사용하면 CTRL-Break 스레드 덤프가 어떤 스레드가 보유하고있는 스레드를 나열하지 않습니다. java.lang.concurrent
잠금. 그리고 이러한 잠금을 사용하면 핫 스폿에서 스택을 획득 한 스택 프레임에 대한 정보를 얻을 수 없다는 것을 알고 있습니다. JVM 옵션 -XX:+PrintConcurrentLocks
을 추가하면 CTRL-Break 스택 덤프는 해당 프레임이 보유한 동시 잠금을 (스레드의 스택 추적 이후에) 나열합니다. 예를 들어 :이 핫스팟 JVM 옵션이 기본값이 아닌 이유는 무엇입니까? -XX : + PrintConcurrentLocks
"D-Java-5-Lock" prio=6 tid=0x00000000069a1800 nid=0x196c runnable [0x000000000770f000]
java.lang.Thread.State: RUNNABLE
at com.Tester.longDelay(Tester.java:41)
at com.Tester$D.run(Tester.java:88)
Locked ownable synchronizers:
- <0x00000007d6030898> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
이 옵션을 사용하지 않으면, 스레드가 사후에이 잠금을 보유하고 있는지 알아낼 수 없습니다. 이 옵션이 기본값이 아닌 이유는 무엇입니까? 명백하지 않은 성능 또는 안정성 패널티가 있습니까? 이 문제에 대한 토론을 찾기 위해 검색 할 때 아무 것도 나오지 않습니다.
설명 추가. – egorlitvinenko