【问题标题】:How to know how much time cost by "synchronized" code, in Java?在 Java 中,如何知道“同步”代码花费了多少时间?
【发布时间】:2011-10-22 10:02:15
【问题描述】:

我有一个 Java 应用程序,它的速度不如我预期的那样快。我已经做了很多关于如何改进它的搜索,但并不幸运。

现在我正在查看代码,发现代码中有很多synchronized关键字。我在想他们是不是在等待锁上花费了太多时间。

是否有任何工具可以检查它们花费了多少时间?因此,如果它们确实花费太多时间,我可以找到更好的解决方案。

【问题讨论】:

  • 如果 synchronization 在比必要的更大的块上完成,它们可能会由于不必要的等待而导致性能下降。
  • 您尝试过任何分析工具吗?

标签: java monitor synchronized


【解决方案1】:

我本来打算推荐jvisualvm 的线程监视器功能,在寻找屏幕截图时,遇到了这篇博文:Detecting Thread Contentions。这比屏幕截图要好得多:)。

但无论如何: (图片来源:上述博客文章)

【讨论】:

    【解决方案2】:

    一个好的分析器将能够查明导致缓慢的方法,它可能根本与同步无关。此外,查看分析器中的线程状态可能会揭示是否由于同步而等待过多。在任何情况下,除非无故使用 synchronized 关键字,否则为了性能而将其删除可能会适得其反。

    【讨论】:

    • 如果不需要sunchronization,将导致性能损失。如果需要synchronization i) 应以适当的粒度级别完成 ii) 如果将其删除,则不会适得其反-这将是一团糟
    • user384706 我同意。 OP 需要了解为什么只有同步代码才能采取适当的补救措施。
    【解决方案3】:

    同步的成本通常很小。问题通常是您在同步块中所做的事情。确保您不执行任何 IO(套接字或网络)并且理想情况下根本没有系统调用,对于简单任务,锁定时间将是亚微秒。

    【讨论】:

      猜你喜欢
      • 2022-10-08
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多