0

由于我想检查几种方法 ( foo(int)) 的效率并将它们与整体运行时进行比较,因此我最终编写了类似于:

void testNanoTime(){
    long methodDuration = 0;
    long testStart = System.nanoTime();
    for(int i= 0; i< 300; i++){

        long startJob = System.nanoTime();
        foo(i);  //checking how foo does with certain data.
        methodDuration+= System.nanoTime()-startJob;

        bar();
    }
    System.out.println("MethodDuration: "+methodDuration);
    System.out.println("TestDuration:   "+(System.nanoTime()-testStart));
}

foo(int)有时每次通话需要几分钟到半小时(但不是总共 293 年!)。现在的问题是,有时 TestDuration(方法所花费的整个时间)小于 methodDuration,这对我来说似乎是不可能的。因此有两个问题:

  • 我的旧测试比较 methodDurations 仍然有效到多少?
  • 我应该使用什么来进一步测试性能而不会有获得无效时间戳的危险?去会System.currentTimeMillis()安全还是有同样的问题?

目前测试在linux系统上进行。我已经在这里找到了一些关于这个问题的旧问题和答案(例如System.nanoTime() 完全没用吗?),但有些人说这是一个 Windows 问题,而其他答案仍然不清楚,因为他们提到,它们可能已经过时(而且它们是甚至几岁)。甚至大多数答案都相互矛盾!

4

1 回答 1

1

基于 JVM 的工作方式,Java 分析相当复杂。

这里有一些资源可以帮助您入门

有关纳米时间及其工作原理的详细信息,请阅读Nano Time Completely Useless

编辑:OP 编辑​​帖子提到,“纳米时间完全没用”,但由于恕我直言,它仍然相关。

于 2016-03-18T13:44:47.177 回答