计算算法的执行时间

时间:2013-07-11 04:45:12

标签: java image-processing time

我在核心java中开发了一个图像处理算法(不使用任何第三方API),现在我必须计算该算法的执行时间,为此我使用了 System.currentTimeMillis()那样,

public class MyAlgo {

   public MyAlgo(String imagePath){
     long stTime = System.currentTimeMillis();
     // ..........................
     // My Algorithm
     // ..........................
     long endTime = System.currentTimeMillis();
     System.out.println("Time ==> " + (endTime - stTime));
   }

   public static void main(String args[]){
     new MyAlgo("d:\\myImage.bmp");
   }
}

但问题是每次我运行这个程序时,我都会得到不同的执行时间。任何人都可以建议我,我该怎么做?

3 个答案:

答案 0 :(得分:2)

单独一次执行就无法获得可靠的结果; Java(以及JVM)执行运行时优化,还有其他进程竞争CPU时间/资源访问。此外,您确定您的算法在任何输入的情况下都能以恒定时间运行吗?

让计算尽可能可靠的最佳选择是使用专用于性能测量的库;其中一个是caliper

设置具有不同输入/输出等的基准并运行它。

答案 1 :(得分:2)

如果您不想使用外部分析库,只需将算法包装在执行1000次的for()循环中,并将总时间除以1000.结果将更准确,因为所有其他任务/流程甚至会消失。

注意:总体测量时间将反映算法完成的预期时间,而不是算法编码指令所需的总时间。 例如,如果您的算法使用大量内存,并且平均每次执行算法时,Java VM都会调用两次垃圾收集器 - 而您应该同时考虑垃圾收集器的时间。 这正是for()循环所做的,所以你会得到很好的结果。

答案 2 :(得分:0)

您需要对算法的多次执行应用一些统计分析。例如,执行1000次并分析最小,最大和平均时间。

在不同场景中的多次执行也可能提供见解,例如,在不同的硬件或具有不同分辨率的图像。

我认为您的算法可以分为多个步骤。您可以单独监控这些步骤,以了解每个步骤的影响。

例如,

Marvin Image Processing Framework提供了监视和分析每个算法步骤的执行时间和执行次数的方法。