2012-02-25 56 views
1

我有一个简单的类,我想测量方法调用时间,我该怎么做?寻找通用的方法来实现这一点,所以我可以将它应用于更困难的类。谢谢java我如何测量方法调用时间?

import java.io.*; 
import java.util.*; 

public class Turtle { 
    private String name; 
    private Formatter f; 
    public Turtle(String name, Formatter f) { 
    this.name = name; 
    this.f = f; 
    } 

    public void move(int x, int y) { 
    f.format("%s The Turtle is at (%d,%d)\n", name, x, y); 
    } 

    public static void main(String[] args) { 
    PrintStream outAlias = System.err; 
    Turtle tommy = new Turtle("Tommy", 
     new Formatter(System.out)); 
    Turtle terry = new Turtle("Terry", 
     new Formatter(outAlias)); 
    tommy.move(0,0); 
    terry.move(4,8); 
    tommy.move(3,4); 
    terry.move(2,5); 
    tommy.move(3,3); 
    terry.move(3,3); 
    } 
} 
+0

你是什么意思,“方法通话时间”? – 2012-02-25 13:22:20

+0

由于其中一个建议它是CPUT时间。我想知道是否有任何Java内置方法。不寻找任何复杂的,如探查器,但我可以在我的代码中使用ad hoc。像这样:long startTime = System.currentTimeMillis(); tommy.move(0,0); long endTime = System.currentTimeMillis(); System.out.println(“That took”+(endTime - startTime)+“milliseconds”); //但有办法用一些Java方法在一行中完成它? – aretai 2012-02-25 14:19:25

+0

@aretal您的示例度量值是经过的(墙)时间,而不是CPU时间。显然这很难在一条线上,因为你至少需要标记时钟应该以何种方式开始和停止的线。方面可以给你一个紧凑的解决方案,但如果你想要测量时间,那么挖掘AOP可能是矫枉过正。 – 2012-02-26 17:57:34

回答

1

使用专用的工具,将显示您甚至更多您需要:)在我看来,VisualVM是最好的一个。但还有其他可用的(例如本地JDK提供的JConsole或支付的JRockit)。
更多here on my post

这些工具显示运行他们使用servlet一起消耗的应用程序和资源(如果有的话)的处理时间,错误和呼叫计数等。此外线程和实例化类上市。这肯定会满足你的需求

3

使用一个分析器或手动指望他们:

public static int MOVE_CALL_COUNT; 


public void move(int, int) 
{ 
    MOVE_CALL_COUNT++; 
} 

剖析建议。在NetBeans中有一个内置的分析器。否则,VisualVM是推荐的选项,它与NetBeans中的分析器相同。

如果您确实想知道运行这些方法需要多长时间,请使用分析器。

+0

我认为istai意味着用户或CPU时间的数量,因为帖子被标记为[时间]。他也直接要求一个通用的方法,所以手动计数也可能不是一个正确的答案。当然,使用profiler *可能是继续进行的方式。 – 2012-02-25 13:26:22

1

如果它正在测试每种方法需要执行多长时间,那么在SO上已经有一些与此相关的好问题。检查出this one for example

我的偏好,特别是在一个有很多方法的较大项目中,将使用AOP,因此它不涉及更改现有代码。关于上面链接到的问题上的This answer表明AOP出于同样的原因。正如他所建议的,在AOP中深入研究已经超出了这个范围,但它肯定值得一看。查看this tutorial,了解如何使用弹簧进行方法计时。