是否可以通过Java中的引用创建一个对另一个方法进行计时的方法?
我想的是:
int timeMethod(method myMethod) {
long start = time
run myMethod
long end = time
return end-start
}
答案 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中没有你不能将方法作为参数传递