2012-08-10 22 views
5

我测试一些算法至极我包围与纳秒计时器当我随机忘了删除我发现这个代码计时器:为什么System.nanoTime()取4400纳秒

a = System.nanoTime(); 
    System.out.println(System.nanoTime() - a); 

总是打印4400纳秒在我的系统上。这将是4.4微秒,而这段代码:

a = System.currentTimeMillis(); 
    for (int i = 0; i < 1000; i++) 
     System.nanoTime(); 
    System.out.println(System.currentTimeMillis() - a); 

打印0

+5

顶部asnwer应该解释http://stackoverflow.com/questions/1770010/how-do-i-measure-time-elapsed-in-java – 2012-08-10 03:00:55

+0

是不是关于可能的精度?尝试另一个处理器:) – tomasb 2012-08-10 12:09:44

回答

4

4400纳秒为4.4微秒,或0.0044毫秒。第二个示例将始终打印零,因为已用时间为小于1毫秒。然后有两个使用的定时器之间的差异:currentTimeMillis可以调整时钟歪斜,而nanoTime不能,但我怀疑这是在这里玩。

+0

哦,我的上帝,我是如此愚蠢......错误的微型毫米...反正我更新了代码,它仍然有点奇怪。 – 2012-08-10 11:44:38

+1

实际的系统定时器分辨率不一定是纳秒。在你的情况下,它可能是4.4微秒(即这是最小的可能增量) – 2012-08-10 16:35:48

0

使用nanoseconds()来衡量自己可能不是实施者考虑的用例。通常情况下,您会使用它来计时“缓慢”操作,或者多次调用“快速”操作,一起“慢”,其中“慢”超过0.1毫秒。

你想要时间更长的操作的原因是nanoseconds()的粒度不是很好 - 取决于硬件和操作系统,但没有接近纳秒。

相关问题