System.Nanotime 粒度和延迟?

System.Nanotime granularity and latency?

我正在关注这个 jmh 测试 http://hg.openjdk.java.net/code-tools/jmh/file/57623b7f64e6/jmh-core-benchmarks/src/main/java/org/openjdk/jmh/benchmarks/NanoTimerBench.java, 对于System.nanotime()。 但是我真的不明白粒度和延迟的测量之间的区别。测量延迟和测量粒度有什么区别?

粒度 是计时器的分辨率,例如,在返回不同值之前必须经过多少时间。 (如,最小的块有多大,例如"grains,"可以测量。)

Latency,在这种情况下,基本上就是获取定时器值需要多少时间。

因此,如果需要 10ns 来获取计时器值,但计时器值仅精确到 100ns,则 latency 为 10ns,但 granularity是100ns。使用这样的计时器,您可能会在 40ns 的过程中调用它两次或三次,并且总是返回相同的 "nanoseconds" 值(因为粒度大于延迟)。

或者您的系统可能需要 20ns 才能获取定时器值,但该值精确到 5ns。在那种情况下,每次调用都会给你一个不同的值,因为粒度小于延迟。