Java-减去两个毫微秒长的变量

Java-减去两个毫微秒长的变量,java,Java,我应该测量某些树操作的运行时间。 由于某些原因,当打印x或y时,我得到了整数,但当尝试打印y-x时,我得到了一个异常小的数字!我得到的是2000英镑而不是20万英镑 long y=0; long x=0; for(int j=0 ; j < 1000 ; j++) { if(j%100==0) System.out.println(y-x); x = System.nanoTime(); myTree.put(n, 0);

我应该测量某些树操作的运行时间。 由于某些原因,当打印x或y时,我得到了整数,但当尝试打印y-x时,我得到了一个异常小的数字!我得到的是2000英镑而不是20万英镑

long y=0;
long x=0;

for(int j=0 ; j < 1000 ; j++)
{
        if(j%100==0) System.out.println(y-x);   
        x = System.nanoTime();
        myTree.put(n, 0);
        y = System.nanoTime();
}

System.nanotime出现问题

您可以参考以下链接:-


从文件中:

public static long nanoTime()
返回最精确的可用系统计时器的当前值(以纳秒为单位)

因此,实际上,对于像put这样的基本操作来说,时间似乎是合适的


但是要注意JVM预热阶段,看看哪一个阶段会改变结果。实际上,x和y的第一个值需要被丢弃,这可能是为什么你看到x和y的值如此高,然后结果很低的原因。如果您希望得到准确的结果,请在基准测试put函数之前尝试进行一些计算,或者使用一些工具,例如简化工作的工具。

此代码中x和y的值是多少?减法结果表示差异。是的,它可以很小,它只是说需要2000纳秒才能将key,valuepair放入映射。在第一次调用时,您只需打印0。在那之后,你意识到你正在计时一次put调用,而不是累计调用时间,对吗?@Hilikus-2000 ns是2µs,而不是2 ms。当分别打印x和y,然后手动减法时,我得到的结果至少高出100倍,但当使用java打印减法时,我得到的结果很小。。。我想确保我没有漏掉一个破坏我计算的错误嗨!他抱怨JAVA百科全书价值太小;