我正在尝试使用java中的多线程对数组进行排序,并记下它的执行时间。我正在使用System.nanoTime()。
这是代码的模板
start = System.nanoTime();
sort(); // calls different threads to completely sort the array
end = System.nanoTime()
我想问的是,上面的内容是在主线程中,所以如果我没有放入main.sleep(),它会给我不正确的时间结果吗?或者它是由JVM处理的。另外,如果我需要快速执行,那么可以在时间执行方面改善上述代码的性能吗?
答案 0 :(得分:3)
我想问的是,上面的内容是在主线程中,所以如果我没有放入main.sleep(),它会给我不正确的时间结果吗?或者它是由JVM处理的。
System.nanoTime()
应该为您提供最佳(最精确)的可用时间度量。注意:
System.nanoTime()
使用的硬件时钟在不同的内核之间不同步,并且(显然)因此可能相当不准确。就个人而言,我会使用System.currentTimeMillis()
,并确保我对大型数组或集合的排序进行基准测试......并做了各种其他事情以确保我的基准测试有效。
(编辑 - 如果您想了解每个线程使用了多少CPU时间,请查看ThreadMXBean
API。)
此外,如果我需要快速执行,还有什么能够在时间执行方面提高上述代码的性能吗?
这是一个非常普遍的问题,除了说“可能是的”......或“描述它”。
答案 1 :(得分:0)
您可以使用JVisualVM探查器(或其他探查器)来查找每个方法的执行速度。
您只需要在开头暂停以允许您附加它,并在结尾处暂停,以便您可以查看和/或保存结果。