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

时间:2015-11-17 18:31:32

标签: java performance sorting time

如何在不给出非常大的数组作为输入的情况下实现它?我正在测量不同算法的运行时间,对于20个元素的数组,我得到非常(相同)的相似值。我尝试将总时间除以1000000000以清除E,然后使用16个镜像,我复制输入数组并再次为镜像执行它。但是Heap和Quick排序仍然是一样的。任何想法,而无需写冗余线?

示例输出:

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

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

2 个答案:

答案 0 :(得分:2)

要直接提问,请使用System.nanoTime()获取更精细的时间戳。

对于如何获得更好的基准测试的基本问题,您应该重复运行基准测试并在更大的数据集上运行。即使使用更精确的时钟,执行大约需要14毫秒的基准测试也会非常嘈杂。另请参阅How do I write a correct micro-benchmark in Java?

答案 1 :(得分:1)

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

  

以毫秒为单位返回当前时间。注意,虽然单位   返回值的时间是毫秒,粒度   值取决于底层操作系统,可能更大。   例如,许多操作系统以数十为单位测量时间   毫秒。

source

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

  

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

source