По умолчанию, с 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)
Без этой опции невозможно выяснить, какой поток удерживает эту блокировку после вскрытия. Почему этот вариант не установлен по умолчанию? Есть ли какие-то неочевидные потери производительности или стабильности? Когда я ищу обсуждение этого, ничего не появляется.