由于我想检查几种方法 ( 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 问题,而其他答案仍然不清楚,因为他们提到,它们可能已经过时(而且它们是甚至几岁)。甚至大多数答案都相互矛盾!