2013-02-09 50 views
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; 
} 

有没有人知道为什么会发生这种情况?

+0

'排队的中间被打断你的程序和出队Strings'特定数量的---如何产生字符串?随机或硬编码。 – 2013-02-09 15:43:30

+0

它在函数中使用for循环来生成“String1”,“String2”等等,直到num – karoma 2013-02-09 15:47:07

回答

1

您正在等待确定性行为,我想您正在使用正常操作系统的PC上运行该程序。因此,它不可能指望确切时间,主要是因为:

  1. 你正在运行的虚拟机为Java代码在
  2. 虚拟机运行在操作系统上执行。

虚拟机执行您不控制的操作和操作系统aswel。所以你只能粗略猜测你的程序要执行多少时间才能执行,除非你在适当的环境中运行你的程序。

垃圾收集器可以在其执行或调度可以安排你从另一个更重要的过程,等等等等

0

没有更多的信息很难说。这很可能是因为等待用户输入会让JIT编译器无法编译该函数,而最终会被解释并花费更长的时间。