在java中有哪些免费工具可用于分析锁争用?

在java中有哪些免费工具可用于分析锁争用?,java,multithreading,locking,Java,Multithreading,Locking,我需要确定哪些锁在我的应用程序代码中最受欢迎。我可以使用哪些免费工具来确定这一点 VisualVM(Java 1.6的一部分)(您可以在JDK的bin目录中同时使用jconsole或jstack。jconsole特别允许您连接到进程并监视线程,包括它们锁定了哪些资源,它可以帮助您识别死锁状态。JDK有一些内置的支持—在unix下,kill—3进程,在windows下,ctrl break。这将显示一个完整的线程转储,然后显示检测到的任何死锁。另外,在线程dusmp中,您可以看到哪些线程拥有哪些锁

我需要确定哪些锁在我的应用程序代码中最受欢迎。我可以使用哪些免费工具来确定这一点

VisualVM(Java 1.6的一部分)(

您可以在JDK的bin目录中同时使用jconsole或jstack。jconsole特别允许您连接到进程并监视线程,包括它们锁定了哪些资源,它可以帮助您识别死锁状态。

JDK有一些内置的支持—在unix下,kill—3进程,在windows下,ctrl break。这将显示一个完整的线程转储,然后显示检测到的任何死锁。另外,在线程dusmp中,您可以看到哪些线程拥有哪些锁,并相互比较。

您也可以在eclipse的调试器中查看这一点。在调试视图中,使用视图工具栏上的小三角菜单打开“Java->ShowMonitors”


如果怀疑出现死锁,请暂停应用程序(在“调试”视图中选择该应用程序,然后按“调试”视图工具栏上的“暂停”按钮),如果出现死锁,阻塞线程将变为红色。如果展开这些线程,您可以看到锁争用。

如果您拥有代码,您可以创建/查找收集争用统计信息的锁实现。如果没有,,尝试其他帖子中建议的工具。

VisualVM不需要单独的插件吗?我认为问题与应用程序运行期间锁争用的一些统计数据有关-哪些是系统中的热锁。不需要为了获得线程转储而终止进程-只需运行jstack进程在哪里kill-3命令不会终止进程。它只是发出信号,但进程将继续运行。您有这种实现的示例(即java代码)吗