如何通过减去2个nanoTime对象获得有意义的结果?
我创建了一个监视请求长度的filter。
long start = System.nanoTime(); ... long end = System.nanoTime();
我怎么能从这里得到毫秒数?
(end - start) / 1000000
1微秒= 1000纳秒
1毫秒= 1000微秒
请注意,结果将向下舍入,但您通常无法获得真正的纳秒精度(精度取决于操作系统)。 来自nanoTime()
上的Javadoc:
该方法提供纳秒精度,但不一定是纳秒精度。
另请注意,您可以使用TimeUnit类来帮助进行转换。 对于旧版本的Java,以下代码可能是将处理时间转换为其他时间格式的示例:
long startTime = System.nanoTime(); //Processing in-between. long endTime = System.nanoTime(); long duration = endTime - startTime; duration = TimeUnit.SECONDS.convert(duration, TimeUnit.NANOSECONDS);
请注意,较新版本的Java在TimeUnit类中具有快捷方式。
上面的样本会将纳秒变成几秒钟。 另请注意,这会截断它,因此您会失去一些精确度。 因此,如果切换到分钟,则会失去秒的精度。 如果您想获得“12分32秒”的结果,那么您将不得不使用此解决方案进行进一步处理。
只需减去它们并将结果除以10 ^ 6。
1纳秒是10 ^ -9秒,相应地,10 ^ -6毫秒。
http://en.wikipedia.org/wiki/Nano-
要获得有意义的结果:
void procedure ( ... ) { ... } double measureProcedure ( double epsilon , ... ) { double mean ; double stderr = 2 * epsilon ; while ( stderr > epsilon ) { long start = System.nanoTime(); procedure ( ... ) ; long end = System.nanoTime(); // recalculate mean , stderr } return ( mean / 1000000 ) ; }
TimeUnit.NANOSECONDS.toMillis(end - start);
就这样!
您可以使用System.currentTimeMillis()
。
警告:
请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更大。 例如,许多操作系统以几十毫秒为单位测量时间。