Tag: stack dump

为什么这个Hotspot JVM选项不是默认选项? -XX:+ PrintConcurrentLocks

默认情况下,使用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: – (a java.util.concurrent.locks.ReentrantLock$NonfairSync) 没有这个选项,就无法弄清楚在验尸中持有此锁的线程。 为什么此选项不是默认选项? 是否存在一些非明显的性能或稳定性惩罚? 当我搜索到对此的讨论时,什么都没有出现。