计算Java程序的运行时

时间:2014-09-13 23:54:43

标签: java jvm runtime

我想计算Java程序的运行时间。当我使用以下方法时:

long startTime = System.currentTimeMillis();
           ...my program...
long endTime   = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println(totalTime); 

结果不时有所不同,所以我想要得到一些(100或一些......)样本并计算平均值以使其更准确:

long total = 0    
for (int i = 0; i < 100; i++) {
    Long s = System.currentTimeMillis();
    ...my program...
    Long e = System.currentTimeMillis();
    total += (e - s);
}

所以我获得了总运行时间..对于第一种方法,它通常是大约600ms,对于第二种方法,结果将是大约30000ms(所以平均时间:30000/100 = 300ms)。

我认为它可能与JVM有关,它需要一些时间来加载文件或将其转换为字节代码。第二种方法只加载和转换一次,然后只运行100次方法?

我不确定我的解释,如果我错了,请纠正我。

我的问题是:如果我想获得“实际”的总运行时间并计算平均值,我该怎么办?

提前致谢!

2 个答案:

答案 0 :(得分:1)

Java中的时序以这种方式肯定是非常不可靠的,因为您不仅要对程序外发生的事件敏感,而且JIT编译的本质等等使得很难预测是否给定的事件将在所有情况下花费相同的时间。基本上,您可以做的最好的事情是进行一次迭代并获得平均值。回到我不得不为课堂做时间的时候,如果我每次测试都使用了数万次迭代,那么我会获得相当一致的时序结果,但同样,你不会以这种方式使用Java获得非常准确的时序(以及更小的时间)范围,任何语言)。

编辑:此外,如果您需要更精确的计时计算,您应该查看分析器,因为它们可能会让每个方法的执行时间更清晰,而不是尝试以这种方式执行。

答案 1 :(得分:0)

Netbeans有一个Profiler选项,可以在Profile部分下计算Java应用程序的运行时间。您可能正在搜索,因为,Profiler计算实际的CPU和内存时间。根据我的经验,我可以说它非常稳定。