我需要分析Java中某些算法的复杂性。为此,我计划提供大量输入并测量Java实现所花费的时间。检查某些代码行之间的时间最准确,最准确的方法是什么?我需要精确到毫秒......
答案 0 :(得分:15)
答案 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");