这是Java代码:
public void foo() {
final long start = System.nanoTime();
// some operations...
System.out.println("done in " + (System.nanoTime() - start) + " nano sec");
}
是否可以这样做,但没有start
变量?像这样:
public void foo() {
// some operations...
System.out.println("done in " + calculateTime() + " nano sec");
}
答案 0 :(得分:7)
不是没有变量某处。我的意思是你可以有一个静态变量并调用:
CustomTimer.startTiming();
// Do something
System.out.println("Done in " + CustomTimer.endTiming() + " nanoseconds");
但这不是线程安全的,并且仍然会使用变量。
要考虑的关键是你需要指出你感兴趣的开始时间,并且必须记住这一点。
或者,您可以将代码包装在其他内容中以进行计时:
public void foo() {
CustomTimer.reportTiming(new Runnable() {
@Override public void run() {
// Do operations here
}
});
}
...但reportTiming
方法需要保留一个变量。
换句话说:如果你不知道你的出生日期(包括年份),你会怎样算出你的年龄?
答案 1 :(得分:3)
这不是一个简单的答案。我推断你不希望用不必要的分析代码使你的代码混乱,你可能会在以后删除。在这种情况下,建议使用AOP。然后,您可以围绕要分析的方法编织方面,这些方面将具有表示“开始”和“结束”变量的变量声明。