Java 如何找出哪种方法花费了很多时间?

Java 如何找出哪种方法花费了很多时间?,java,debugging,time,profiling,Java,Debugging,Time,Profiling,我的一个组件执行时间太长。它调用许多服务,这些服务又调用许多dao方法。现在,是否有任何方法可以获得它调用的每个方法所花费的时间。 我不想在每个方法之前和之后编写System.currentmillis来计算所用的时间,因为方法太多了。 我想我可能需要使用拦截器,或者任何剖析器都可以这样做。我不确定,请帮助。您可以在NetBeans IDE中使用Java探查器 请看这里: Java VisualVM是另一种选择:。您可以将它附加到任何正在运行的Java程序,包括通过Eclipse启动的程序。使用

我的一个组件执行时间太长。它调用许多服务,这些服务又调用许多dao方法。现在,是否有任何方法可以获得它调用的每个方法所花费的时间。
我不想在每个方法之前和之后编写
System.currentmillis
来计算所用的时间,因为方法太多了。

我想我可能需要使用拦截器,或者任何剖析器都可以这样做。我不确定,请帮助。

您可以在NetBeans IDE中使用Java探查器

请看这里:


Java VisualVM是另一种选择:。您可以将它附加到任何正在运行的Java程序,包括通过Eclipse启动的程序。

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

您可以按照以下步骤将其集成为eclipse中的启动器

不要把它看作是测量发现问题的时间

利用它的缓慢来暴露它。 如果它是一个无限循环,请使用相同的方法

也就是说,在它运行缓慢时暂停几次,每次都检查每个线程的调用堆栈。 有罪的方法和代码行将出现在多个样本上。 检查一下


我相信大多数IDE都内置了探查器功能。不幸的是,我是Netbeans的粉丝,但我想补充一点,探查器测量的时间只能给你提供相对估计。这不是在该方法上花费的实际时间。探查器需要将自身连接到方法,这会导致额外的开销。我正在使用它,但我无法找到它显示方法所用时间的位置,或者它根本不显示时间。在运行应用程序时,应该激活cpu和内存探查器/采样器。然后你会积极地看到热点。一旦执行结束,它将组装一个非常整洁的报告,您可以在其中监督软件中阻塞的不同部分。(见:)希望这能有所帮助。