是否可以在没有变量的情况下计算方法执行时间?

时间:2011-06-03 17:53:51

标签: java

这是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");
}

2 个答案:

答案 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。然后,您可以围绕要分析的方法编织方面,这些方面将具有表示“开始”和“结束”变量的变量声明。