有没有一种准确的方法来确定两个Java进程之间nanoTime的差异?

时间:2009-06-29 18:36:20

标签: java benchmarking

我们在Java中有一些使用nanoTime进行内部基准测试的过程(因为它应该在同一个线程中准确)。

流程可以在它们之间进行通信。

有没有一种标准的方法来确定线程之间的nanoTime差异? (例如,模仿NTP?)。这应该定期吗?

2 个答案:

答案 0 :(得分:3)

javadoc使用很多警告来限定nanoTime()方法。它的要点似乎是你可以在一段代码中使用它来测量经过的时间,给你“纳秒精度,但不一定是纳秒精度”。

这是一种毛茸茸的语言,可能是刻意的。我可能会避免比较使用nanoTime()进行的两次不同的经过时间计算,它可能会给你带来不好的结果。

如果这是用于基准测试,那么在循环中对相同的代码进行基准测试可能是一个更好的想法,将经过的时间带到毫秒范围内,允许您使用currentTimeMillis(),这样更可靠。

答案 1 :(得分:0)

我不建议将其用于基准测试。一个原因是它的表现有点不为人知,例如:在多处理器机器上的Windows上,它可能非常慢。

关于同步和值本身,在Windows上,即使在不同的处理器上,也可以保证同步值。窗口增量也是恒定的。由于支持这些属性,因此检索该值非常昂贵。

在Linux上,处理器之间没有同步,此外,当CPU频率发生变化时(例如,由于省电),增加率会有所不同。

在Solaris上类似于Linux,除了保证下一个nanoTime是> = last nanoTime。