是否可以在 Java 中通过引用创建一个方法来计时另一个方法?
我在想类似的东西:
int timeMethod(method myMethod) {
long start = time
run myMethod
long end = time
return end-start
}
AOP(aspectJ 实现)是您要重新发明的,这里是描述示例的快速谷歌链接
您可以将方法调用包装在 aRunnable
和 time 中运行需要多长时间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(...);
}
});
您可以使用System.currentTimeMillis();
for start 并在方法结束时执行此操作,然后像您提到的那样减去两个。
public void timeExtensiveMethod() {
long start = System.currentTimeMillis();
//do stuff
long end = System.currentTimeMillis();
System.out.println("Time taken: " + (end - start));
}
请注意,并非上述所有变量都是必需的,它们只是用来展示思考过程。
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
是的,这是可能的,但是我相信您应该使用真正的分析器,而不是这样一个“愚蠢”的分析器。
您必须使用反射来调用该方法System.currentTimeMillis()
或System.nanoTime()
测量经过的时间:
long measureMethodExecutionTime(Method method, Object object, Object[] args) {
long startTime = System.currentTimeMillis();
method.invoke(object, args);
return System.currentTimeMillis() - startTime;
}
没有在java中你不能将方法作为参数传递