如何衡量时间成本?

时间:2013-04-15 06:05:54

标签: java time

如何衡量运行Java程序的时间成本?如何估算我的程序的时间成本。 (程序在eclipse中运行)

代码:

import java.util.Scanner;

public class S1_4 {

public static void main(String[] args) {
    int i,j,k=1;
    int[] table = new int[1000001];
    for(i = 2;i<1000000;i++)
     {
      if(table[i]==0)
         {
         for(j=1;i*j<999999;j++)
            table[i*j]=k;
            k++;
         }
     }

    int a;
    Scanner cin = new Scanner(System.in);

    while(cin.hasNext()) {
        a = cin.nextInt();          
        System.out.println(table[a]);
    }
    cin.close();
}

}

3 个答案:

答案 0 :(得分:5)

使用System.nanoTime()代替System.currentTimeMillis(),因为currentTimeMillis()取决于系统时钟,但nanoTime()返回相关时间,而不是取决于系统时钟。

如果你的系统时钟在currentTimeMillis()的两次调用之间发生了变化,则时间间隔是没有意义的。

long start = System.nanoTime();
    //time consuming code here.
    //...
    long end = System.nanoTime();
    long used = end-start;
    System.out.println("used:"+TimeUnit.NANOSECONDS.toMillis(used)+" ms");

有关详细信息,请参阅here

答案 1 :(得分:1)

public static void main(String[] args) {
  long startTime = System.currentTimeMillis();
  ...
  System.out.println("Time taken-"+(System.currentTimeMillis() -startTime));
}

答案 2 :(得分:0)

如果方法花费很少的时间,那么测量运行方法所花费的时间会更加困难。纳米计数器不够稳定。我建议多次运行该方法并测量合并的运行时间。这也将允许JIT编译器对其进行优化,以便您知道在运行时实际需要多少。

您可以使用jmeter或其他perf测试框架,也可以编写自己的循环来多次执行代码。另外两个答案为您提供了如何衡量代码所需时间的指南。我建议你测量大量跑步的时间(例如10k)而不是一次跑步。