我有一个Java应用程序,它不像我预期的那么快。我已经做了很多关于如何改进它的搜索,但不幸运。
现在我正在审核代码,发现代码中有很多synchronized
个关键字。我在想他们是否花了太多时间等待锁。
有没有工具可以检查它们花费多少时间?因此,如果他们花费太多时间,我可以找到更好的解决方案。
答案 0 :(得分:4)
我打算建议jvisualvm的线程监控功能,并在寻找屏幕截图时,遇到了这个博文:Detecting Thread Contentions。这比截图更好:)。
但无论如何它在这里:
(图片来源:上述博客文章)
答案 1 :(得分:1)
一个好的分析器将能够精确定位导致缓慢的方法,它可能根本不与同步相关。同时查看分析器中线程的状态可能会显示由于同步而导致是否有太多等待。在任何情况下,除非正常使用synchronized关键字,否则为了提高性能而删除它可能会产生反效果。
答案 2 :(得分:1)
同步成本通常很低。问题通常是您在同步块中执行的操作。确保你没有做任何IO,(套接字或网络),理想情况下根本没有系统调用,对于简单的任务,锁定时间将是亚微秒。