我正在调用方法之前读取系统时间,并在方法返回后立即读取时间差,这将给出执行方法所花费的时间。
代码段
long start = System.currentTimeMillis ();
method ();
long end = System.currentTimeMillis ();
System.out.println ("Time taken for execution is " + (end - start));
奇怪的是输出是0
..这怎么可能..?
答案 0 :(得分:9)
它可能比相当粗粒度的系统时钟花费更短的时间。 (例如,您可能会发现System.currentTimeMillis()
每10或15毫秒只会更改一次。)
System.currentTimeMillis
有助于找出当前时间,但对于测量短时间而言,它并不够精细。相反,您应该使用使用高分辨率计时器的System.nanoTime()
。 nanoTime()
不适合查找当前时间 - 但它专为测量持续时间而设计。
将它视为挂钟和秒表之间的区别。
答案 1 :(得分:5)
答案 2 :(得分:1)
因为它花了不到1毫秒?
如果你想获得一个更有意义的指标,我建议你在一个循环中调用你的方法1000000次,计时,再除以1000000。
当然,即便如此,这可能也不具代表性;对缓存的影响会有所不同等。