如何衡量Java代码所用的时间?

How to measure time taken by Java code?

本问题已经有最佳答案,请猛点这里访问。

我需要分析Java中的一些算法的复杂性。为此,我计划提供大量的输入,并测量Java实现所花费的时间。检查某些代码行之间的时间最精确和准确的方法是什么?我需要精确到毫秒…


甚至可以使用System.nanoTime()获得纳秒分辨率。

但是,您可能需要考虑以下几点:

如何在Java中编写正确的微基准?


使用speed4j等库,不仅可以对调用进行基准测试,还可以在日志中提供统计信息,还可以通过jmx远程查看。最好使用这样的库,而不是放置System.Current。在整个代码中调用。


假设你有一个特别的方法,你想把它放在显微镜下。您可以这样做:

1
2
3
4
5
long time1 = System.nanoTime();
thatMethod();
long time2 = System.nanoTime();
long timeTaken = time2 - time1;  
System.out.println("Time taken" + timeTaken +" ns");

计算机真的很快,所以在使用getTimeMillis()时可能会出现时差,可能为零。因此,使用nanoTime()

您也可以使用Caliper。他们有一段视频要开始。另外,仔细阅读creichen所指的答案。里面有很多很棒的东西。


使用System.nanoTime()System.currentTimeMillis()来获取代码的开始和结束时间。请注意,微观基准只测量JVM性能的基本方面。注意JVM的预热阶段,在这之后JIT就开始了。


1
2
3
4
5
6
long startTime = System.currentTimeMillis();

//code lines whose time you want to calculate

long endTime = System.currentTimeMillis();
System.out.println("Took"+(endTime - startTime) +" ms");


1
2
3
4
long start =  System.currentTimeMillis();
// your code
long end = System.currentTimeMillis();
long diff = end-start;

1
2
3
4
5
long start =  System.nanoTime();
// your code
long end = System.nanoTime();
long diff = end-start;
long diffInMillis = diff/1000000;