准确计算功能运行的时间

时间:2013-02-09 15:33:52

标签: java queue

我正在尝试记录将特定数量的字符串排入队列并将其出列到链表队列的时间。

如果我手动设置字符串数,那么每次运行程序时都会返回或多或少相同的经过时间。

但是,如果我要求用户输入(如下所示),并输入相同的数字,则程序需要两倍的时间才能运行。我不明白这是怎么回事,因为直到调用排队和出列函数之前我才启动计时器。

public static void main(String[], args){
    long start, elapsed;
    int num = Integer.parseInt(javax.swing.JOptionPane.showInputDialog("State the number of elements to queue:"));
    System.out.println("Processing " + num + " strings..."); 

    Queue lq = new LinkedQueue();

    // timing section
    start = System.nanoTime();    
    testQueue(num, lq);
    elapsedTime = System.nanoTime() - start;
}

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:1)

您期待确定性行为,我猜您在具有正常操作系统的PC上运行该程序。所以不可能期望精确的时间主要是因为:

  1. 您正在运行用于在
  2. 中执行的Java代码的VM
  3. VM在OS中运行。
  4. VM会执行您无法控制的操作以及操作系统。因此,除非您在适当的环境中运行程序,否则您只能粗略估计程序执行的时间。

    垃圾收集器可能会在执行过程中中断您的程序,或者调度程序可能会安排您执行另一个更重要的过程等等。

答案 1 :(得分:0)

没有更多信息,很难说。很可能等待用户输入在某种程度上阻碍了JIT编译器编译函数,最终会被解释而需要花费更长的时间。