2

如何衡量运行 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();
}

}
4

3 回答 3

6

使用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");

有关详细信息,请参见此处

于 2013-04-15T06:12:24.793 回答
1
public static void main(String[] args) {
  long startTime = System.currentTimeMillis();
  ...
  System.out.println("Time taken-"+(System.currentTimeMillis() -startTime));
}
于 2013-04-15T06:09:29.897 回答
0

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

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

于 2013-04-15T06:26:58.707 回答