如何测量Java代码所花费的时间



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

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

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

如何用Java编写正确的微基准测试?

使用Speed4j等库。这不仅将对调用进行基准测试,还将在日志中提供统计信息,您还可以通过JMX远程查看它们。与其把System.current..调用放在整个代码中,不如使用这样的库。

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

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。

long start =  System.currentTimeMillis();
// your code
long end = System.currentTimeMillis();
long diff = end-start;

long start =  System.nanoTime();
// your code
long end = System.nanoTime();
long diff = end-start;
long diffInMillis = diff/1000000;
long startTime = System.currentTimeMillis();
//code lines whose time you want to calculate 
long endTime = System.currentTimeMillis();
System.out.println("Took "+(endTime - startTime) + " ms");

最新更新