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

时间:2013-11-26 08:14:03

标签: java time-complexity

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

6 个答案:

答案 0 :(得分:15)

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

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

How do I write a correct micro-benchmark in Java?

答案 1 :(得分:6)

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

答案 2 :(得分: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指出的答案。它有很多很棒的东西。

答案 3 :(得分:4)

使用System.nanoTime()System.currentTimeMillis()获取代码的开始和结束时间。请注意,微基准测试仅衡量JVM性能的基本方面。请注意JVM的预热阶段,然后启动JIT

答案 4 :(得分:2)

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;

答案 5 :(得分:2)

long startTime = System.currentTimeMillis();

//code lines whose time you want to calculate 

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