Java 系统。纳米时间粒度和延迟?

Java 系统。纳米时间粒度和延迟?,java,jmh,Java,Jmh,我期待着这个jmh测试, 对于System.nanotime()。 但我并不真正理解粒度和延迟度量之间的区别。测量延迟和测量粒度之间有什么区别?粒度是计时器的分辨率,例如,在返回不同的值之前需要经过多少时间。(例如,它可以测量最小的碎片有多大,例如“颗粒”) 在本例中,延迟基本上是获取计时器值所需的时间 因此,如果获取计时器值需要10ns,但计时器值仅精确到100ns,则延迟为10ns,但粒度为100ns。有了这样一个计时器,您可以在40ns的时间内调用它两到三次,并且总是返回相同的“纳秒”值(

我期待着这个
jmh
测试, 对于
System.nanotime()
。 但我并不真正理解粒度和延迟度量之间的区别。测量延迟和测量粒度之间有什么区别?

粒度是计时器的分辨率,例如,在返回不同的值之前需要经过多少时间。(例如,它可以测量最小的碎片有多大,例如“颗粒”)

在本例中,延迟基本上是获取计时器值所需的时间

因此,如果获取计时器值需要10ns,但计时器值仅精确到100ns,则延迟为10ns,但粒度为100ns。有了这样一个计时器,您可以在40ns的时间内调用它两到三次,并且总是返回相同的“纳秒”值(因为粒度大于延迟)


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

延迟=延迟,粒度=最小部分(即粒度)有多大。由JMH大师阿列克西·希皮尔夫所著,这也是一本很好的读物。那么计时器应该是单调的呢?我不明白。@Bionix1441:看。基本上,在这种情况下,这意味着如果调用
nanotime
两次,第一次得到的值决不能高于第二次得到的值。价值应该永远增加(或者,我认为,保持不变)。因此给定
n1=System.nanotime();n2=System.nanotime()
n2-n1
不能为负,只能为0或正。纳米时间的单调性对粒度有影响吗?还有,如果延迟和粒度的值相同,这可能吗?@Bionix1441:我不知道。