java如何找出哪个方法花费了很多时间?
我的一个组件执行时间太长。它调用许多服务,这些服务又调用许多dao方法。现在,是否有任何方法可以获得它调用的每个方法所花费的时间
我不想在每个方法之前和之后写System.currentmillis
来计算时间,因为方法太多了
我想我可能需要使用拦截器,或者任何剖析器都可以这样做。我不确定,请帮忙
你可以在下面搜索框中键入要查询的问题!
我的一个组件执行时间太长。它调用许多服务,这些服务又调用许多dao方法。现在,是否有任何方法可以获得它调用的每个方法所花费的时间
我不想在每个方法之前和之后写System.currentmillis
来计算时间,因为方法太多了
我想我可能需要使用拦截器,或者任何剖析器都可以这样做。我不确定,请帮忙
# 1 楼答案
不要把它看作是测量时间来发现问题
利用它的缓慢来暴露它。 如果它是一个无限循环,就使用同样的方法
也就是说,在它运行缓慢时暂停几次,每次检查每个线程的调用堆栈。 有罪的方法和代码行将出现在多个样本上。 检查last paragraph of this post
Here's more on how it works.
# 2 楼答案
您可以在NetBeans IDE中使用Java探查器
看看这里:http://netbeans.org/features/java/profiler.html
Java VisualVM是另一种选择:http://java.net/projects/visualvm/content/。您可以将其附加到任何正在运行的Java程序,包括通过Eclipse启动的程序
# 3 楼答案
使用JDK附带的
jvisualvm
(如果我没记错的话)。它是JVM的GUI,具有非常好的功能。看看它的features还有一些截图您可以按照以下步骤将其集成为eclipse中的启动器 Steps to integrate in eclipse