0

我正在尝试记录将特定数量的字符串入队和出队到链表队列所花费的时间。

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

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

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;
}

有谁知道为什么会这样?

4

2 回答 2

1

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

  1. 你正在运行一个虚拟机来执行 java 代码
  2. VM 在操作系统中运行。

虚拟机做你无法控制的事情,操作系统也一样。因此,除非您在适当的环境中运行程序,否则您只能粗略猜测您的程序将花费多少时间来执行。

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

于 2013-02-09T15:47:52.850 回答
0

没有更多信息很难说。很可能是等待用户输入以某种方式阻止了 JIT 编译器编译该函数,并且它最终被解释并花费了更长的时间。

于 2013-02-09T15:43:39.193 回答