我需要在Java中测量函数完成所需的时间。如何做到这一点?
注意:
我想要测量函数的时间消耗,而不是整个程序的时间。
long start = System.nanoTime();
methodToBeTimed();
long elapsedTime = System.nanoTime() - start;
以下是如何计算经过的时间。
// Get current time
long start = System.currentTimeMillis();
// Do something ...
// Get elapsed time in milliseconds
long elapsedTimeMillis = System.currentTimeMillis()-start;
// Get elapsed time in seconds
float elapsedTimeSec = elapsedTimeMillis/1000F;
// Get elapsed time in minutes
float elapsedTimeMin = elapsedTimeMillis/(60*1000F);
// Get elapsed time in hours
float elapsedTimeHour = elapsedTimeMillis/(60*60*1000F);
// Get elapsed time in days
float elapsedTimeDay = elapsedTimeMillis/(24*60*60*1000F);
Stopwatch
,例如:final Stopwatch sw = Stopwatch.createStarted();
methodToBeTimed();
final long elapsedMillis = sw.elapsed(TimeUnit.MILLISECONDS);
如果您有多个函数需要处理,那么分析器是正确的选择。
到目前为止,我看到所有给出的建议都存在一个问题,那就是它们对单个函数的工作效果很好,但您的代码将充斥着定时相关内容,这些内容您无法关闭。
如果您知道如何进行面向切面编程,那么这是一种将计时代码保留在一个地方并声明性应用它的好方法。如果您使用像Log4J这样的东西来输出值,则可以选择打开或关闭它。这是一个贫民版的分析器。
请查看AspectJ或Spring的AOP。
一般来说,我建议在java.lang.mangement包中浏览。
System.nanoTime 应该用于精确测量微基准测试中两个时间之间的差值。
public class CountTime {
private static void walk() {
for (int i = 0; i < Integer.MAX_VALUE; i++)
;
}
public static void main(String[] args) {
long t0 = System.nanoTime();
walk();
long t1 = System.nanoTime();
System.out.println("Elapsed time =" + (t1 - t0)
+ " nanoseconds");
}
}
System.currentTimeMillis 返回当前时间的毫秒数。您可以使用此方法获取当前时间。在旧的虚拟机或长时间运行的进程中,这可能很有用。
使用System.currentTimeMillis()或System.nanoTime()方法:
int someMethod() {
long tm = System.nanoTime();
try {
...
} finally {
tm = System.nanoTime()-tm;
System.out.println("time spent in someMethod(): " + tm + "ns");
}
}
java.util.Date
。