System.nanoTime用于计算执行时间和性能影响

时间:2016-01-20 21:54:07

标签: java performance time

我使用以下代码来评估我的方法/操作的性能 -

问题:由于这是跨代码的,因此应从生产代码中删除,以防止降低应用程序性能。

在我们的一个讨论中,有人指出Linux(时区)上的一些时间调用会执行IO寻找/ etc中的文件。这导致了负载评估中加载系统的巨大缓慢。

           long startTime = System.nanoTime();
            ...  <code> ....
           long estimatedTime = System. nanoTime () - startTime;
           double timeInSeconds = estimatedTime / 1E9;

           print ("Estimated_Time =>" + estimatedTime +
                    ":nano seconds " + timeInSeconds + ":seconds");

2 个答案:

答案 0 :(得分:3)

通过使用任何现代IDE,您可以替换所有源代码,并将System.nanoTime()替换为MyUtils.nanoTime()静态方法:

private static final boolean PRODUCTION = true; // change to false while development

public static long nanoTime() {
    return PRODUCTION ? 0 : System.nanoTime();
}

这将允许不清除此指标中的代码,但可以减少生产模式中的性能问题。

<强> UPD

这些代码行,如果经常重复:

       long estimatedTime = System. nanoTime () - startTime;
       double timeInSeconds = estimatedTime / 1E9;

       print ("Estimated_Time =>" + estimatedTime +
                ":nano seconds " + timeInSeconds + ":seconds");

也可以使用相同的布尔触发器以相同的方式替换。

答案 1 :(得分:2)

System.nanoTime()的成本约为35 ns。 YMMV。

将数字连接到字符串的成本要高得多,并且执行任何类型的系统调用的成本要高得多。 IO是2+微秒。

考虑时间不太可能是一个问题,但除非你非常小心如何记录这些信息,否则它的成本会高出100倍。