デフォルトでは、Hotspot を使用すると、CTRL-Break スレッド ダンプはjava.lang.concurrent
ロックを保持しているスレッドを一覧表示しません。また、これらのロックでは、ロックが取得されたスタック フレームに関する情報を Hotspot が取得できないことを理解しています。JVM オプションを追加すると-XX:+PrintConcurrentLocks
、CTRL-Break スタック ダンプが (スレッドのスタック トレースの後に) そのフレームによって保持されている同時ロックを一覧表示します。例えば:
"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)
このオプションがないと、事後分析でこのロックを保持しているスレッドを特定することはできません。このオプションがデフォルトでないのはなぜですか? 明白でないパフォーマンスまたは安定性のペナルティはありますか? これについての議論を探すために検索しても、何も出てきません。