是否可以创建一个在Java中对输入方法进行计时的方法?

时间:2012-11-14 00:15:56

标签: java time reference

是否可以通过Java中的引用创建一个对另一个方法进行计时的方法?

我想的是:

  int timeMethod(method myMethod) {
        long start = time
        run myMethod
        long end = time
        return end-start
     }

6 个答案:

答案 0 :(得分:3)

AOP(aspectJ实现)是您尝试重新创建的内容,here是描述示例的快速Google链接

答案 1 :(得分:3)

您可以将方法调用包装在Runnable中并计算Runnable运行所需的时间:

long timeMethod(Runnable myMethodRunner) {
    long start = System.nanoTime();
    myMethodRunner.run();
    return System.nanoTime() - start;
}

然后你可以按如下方式计算你的方法:

public void myMethod(...) {
    . . .
}

// later:

long timeInNanoSeconds = timeMethod(new Runnable() {
    public void run() {
        myMethod(...);
    }
});

答案 2 :(得分:1)

您可以使用System.currentTimeMillis();作为开始,并在方法结束时执行此操作,并按照您提到的方式减去两个。

public void timeExtensiveMethod() {
    long start = System.currentTimeMillis();
    //do stuff 
    long end = System.currentTimeMillis();
    System.out.println("Time taken: " + (end - start));
}

请注意,并非所有变量都是必需的,它们只是用于显示思考过程。

答案 3 :(得分:1)

Java中没有像函数指针这样的东西(至少不是精确的函数指针)。您可以尝试例如:

这样的组合
int timeMethod(MyClass object) {
        long start = System.currentTimeMillis();
        object.run();  //this class can implement a common interface and you program to interface not concrete implementation
        long duration = System.currentTimeMillis() - start;
        return duration;
     }

编辑:AOP为+1

答案 4 :(得分:1)

是的,这是可能的,但是我相信你应该使用一个真正的分析器,而不是一个“愚蠢”的分析器。

您必须使用reflection来调用该方法,并使用System.currentTimeMillis()System.nanoTime()来衡量已用时间:

long measureMethodExecutionTime(Method method, Object object, Object[] args) {
    long startTime = System.currentTimeMillis();

    method.invoke(object, args);

    return System.currentTimeMillis() - startTime;
}

答案 5 :(得分:-1)

在java中没有你不能将方法作为参数传递