我想计算一个程序需要多长时间才能完整地执行。可以用System.nanoTime();
来计时,但是分析程序的最佳度量单位是什么?
这完全取决于程序的性质,以及日志记录中需要的分辨率。作为一般规则,我认为毫秒就足够了。
有什么问题:
long t1 = System.nanoTime();
// do something
long t2 = System.nanoTime();
System.out.println(t2 - t1);
您也可以使用System.currentTimeMillis()
(这可能更合适),这实际上取决于您尝试测量的过程。
比纳秒更常见,因为并非每个系统都具有这种保真度。
long t0 = System.currentTimeMillis();
// Time passes...
long t1 = System.currentTimeMillis();
long elapsedMillis = t1 - t0;
System.nanoTime()
在旧版本的 JVM 上不受支持。这些精度可能也取决于操作系统。这篇文章非常有趣,并解释了更多关于这类事情的信息
我个人会使用 System.currentTimeMillis()
,因为它仍然非常准确并且受到旧 VM 的支持。如果你想要更高的精度,那么我认为System.nanoTime()
是你能得到的最好的。
这篇SO
帖子也可能对你感兴趣