gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:46 27 4
gpt4 key购买 nike

默认情况下,对于 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)

如果没有这个选项,就不可能在事后分析中找出哪个线程持有这个锁。为什么这个选项不是默认值?是否有一些不明显的性能或稳定性损失?当我搜索关于此的讨论时,没有任何结果。

最佳答案

我问过 Oracle(我的雇主有支持联系人),答案基本上是该选项可以安全使用,并且默认情况下禁用许多纯诊断功能,这就是其中之一。 IMO,如果诊断功能安全稳定并且不会引入性能损失,那么默认情况下应该启用它。看来这不是(当时的)Sun 和(现在的)Oracle 的观点。

关于java - 为什么这个 Hotspot JVM 选项不是默认选项? -XX :+PrintConcurrentLocks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7071643/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com