Java - 减去两个纳米级长变量

时间:2013-12-10 16:24:39

标签: java

我应该测量某些树操作的运行时间。 出于某种原因,当打印x或y时,我得到整数,但在尝试打印时(y-x),我得到一个非常小的数字!我得到2000而不是200,000。

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();
}

2 个答案:

答案 0 :(得分:0)

来自文档:

public static long nanoTime()

纳秒的形式返回最精确的可用系统计时器的当前值。

实际上,put等基本操作的时间似乎还可以。

但要注意 JVM热备阶段(请参阅How to avoid JVM warmup),这会改变结果。实际上,需要丢弃x和y的第一个值(这可能是为什么你首先看到x和y这么高的值然后结果很低的原因)。如果您想要准确的结果,请在对put函数进行基准测试之前尝试进行一些计算,或者使用Caliper之类的工具来简化工作。

答案 1 :(得分:-1)

System.nanoTimes存在问题。

您可以参考以下链接: -

Precision vs. accuracy of System.nanoTime()