由于我想检查几种方法(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,这对我来说似乎是不可能的。因此有两个问题:
System.currentTimeMillis()
是安全的还是有同样的问题? 目前,测试是在linux系统上进行的。我已经在这里找到了一些关于这个问题的老问题和答案(例如Is System.nanoTime() completely useless?),但有些人说这是一个Windows问题,其他答案仍然不清楚,因为他们提到,他们可能已经过时了(他们甚至已经有几年了)。甚至大多数答案都相互矛盾!
答案 0 :(得分:1)
基于JVM的工作方式,Java分析相当复杂。
以下是一些可帮助您入门的资源
有关纳米时间及其工作原理的详细信息,请阅读Nano Time Completely Useless
编辑:OP编辑后提及“纳米时间完全无用”,但保留在答案,因为恕我直言,它仍然相关。