【问题标题】:How to find out which method is taking much time?如何找出哪种方法花费了很多时间?
【发布时间】:2011-07-05 14:11:53
【问题描述】:

我的一个组件花费了太多时间来执行。它调用了很多服务,这些服务又调用了很多 dao 方法。现在,有什么方法可以获取它调用的每个方法所花费的时间。
我不想在每种方法之前和之后写System.currentmillis 来计算时间,因为方法太多了。
我想我可能需要使用拦截器,或者任何分析器都可以做到这一点。我不确定,请帮忙。

【问题讨论】:

  • 我相信大多数 IDE 都内置了分析器功能。
  • 不幸的是,我是 Netbeans 的粉丝,但我想补充一点,profiler 测量的时间只能给你一个相对估计。这不是花在该方法上的实际时间。分析器需要将自己附加到方法上,这会导致额外的开销。

标签: java debugging time profiling


【解决方案1】:

使用 JDK 附带的 jvisualvm(如果我没记错的话)。它是您的 JVM 的 GUI,并且具有非常好的功能。看看它的features 还有一些截图...

您可以按照以下步骤将其集成为 Eclipse 中的启动器 Steps to integrate in eclipse

【讨论】:

  • 我正在使用它,但我无法找到显示方法所用时间的位置,或者根本不显示时间。
  • 当您运行应用程序时,您应该激活 cpu 和内存分析器/采样器。然后你会积极地看到热点。执行完成后,它会生成一份非常简洁的报告,您可以在其中查看软件中阻塞的不同部分。 (请参阅:visualvm.java.net/images/profiler.jpg)希望有所帮助。
【解决方案2】:

不要将其视为发现问题的时间。

利用它的缓慢来暴露它。 只需使用与无限循环相同的方法即可。

也就是说,在它慢的时候暂停几次,每次检查每个线程的调用堆栈。 有罪的方法和代码行将出现在多个样本上。 检查last paragraph of this post

Here's more on how it works.

【讨论】:

    【解决方案3】:

    您可以在 NetBeans IDE 中使用 Java Profiler。

    看看这里:http://netbeans.org/features/java/profiler.html

    Java VisualVM 是另一种选择:http://java.net/projects/visualvm/content/。您可以将它附加到任何正在运行的 Java 程序中,包括通过 Eclipse 启动的程序。

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 2015-08-02
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多