繁体   English   中英

如何提高System.currentTimeMillis()粒度?

[英]How to improve System.currentTimeMillis() granularity?

如何在不输入很大数组的情况下实现它? 我正在测量不同算法的运行时间,对于20个元素的数组,我得到非常(相同)的值。 我尝试将总时间除以1000000000以清除E ,然后像使用16个镜像一样在其中复制输入数组并再次对镜像执行它。 但对于堆和快速排序仍然是相同的。 有什么想法不需要写多余的行吗?

样本输出:

Random array:
MergeSort:
Total time 14.333066343496
QuickSort:
Total time 14.3330663435256
HeapSort:
Total time 14.3330663435256 

如果您需要代码片段,请通知我。

对于您的直接问题,请使用System.nanoTime()获得更精细的时间戳。

对于如何获得更好的基准的基本问题,您应该在较大的数据集上反复运行基准。 即使需要更精确的时钟,执行大约需要14ms的基准测试也会非常嘈杂。 另请参见如何在Java中编写正确的微基准?

您无法提高此方法的粒度。 根据Java SE文档:

返回当前时间(以毫秒为单位)。 请注意,虽然返回值的时间单位是毫秒,但该值的粒度取决于基础操作系统,并且可能更大。 例如,许多操作系统以几十毫秒为单位测量时间。

来源

正如其他人所述,对于时间流逝, public static long nanoTime()会为您提供更高的精度,但不能提供分辨率:

此方法提供纳秒精度,但不一定提供纳秒分辨率。

来源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM