【问题标题】:calculate the runtime for the Java program计算 Java 程序的运行时间
【发布时间】:2017-03-01 18:59:55
【问题描述】:

我想计算我的 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);
}

所以我得到了总运行时间。对于第一种方法,通常约为 600 毫秒,而对于第二种方法,结果约为 30000 毫秒(因此平均时间:30000/100 = 300 毫秒)。

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

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

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

提前致谢!

【问题讨论】:

    标签: java jvm runtime


    【解决方案1】:

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

    编辑:另外,如果您需要更准确的时序计算,您应该研究分析器,因为与尝试以这种方式做事相比,它们可能会更清楚地了解每个方法的执行时间。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        相关资源
        最近更新 更多