0

特定の数の文字列をリンク リスト キューにエンキューおよびデキューするのにかかる時間を記録しようとしています。

文字列の数を手動で設定すると、プログラムが実行されるたびに、ほぼ同じ経過時間が返されます。

ただし、ユーザーに入力を求めて (以下のように)、同じ数値を入力すると、ほとんどの場合、プログラムの実行に 2 倍の時間がかかります。キューイングおよびデキュー関数が呼び出される直前までタイマーを開始しないため、これがどのように起こっているのかわかりません。

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

あなたは決定論的な動作を期待しており、通常のOSを搭載したPCでそのプログラムを実行していると思います。したがって、主に次の理由により、正確なタイミングを期待することはできません。

  1. Javaコードを実行するためのVMを実行しています
  2. VM は OS で実行されます。

VM は制御できないことを行い、OS も同様です。したがって、適切な環境でプログラムを実行しない限り、プログラムの実行にかかる時間を大まかに推測することしかできません。

ガベージ コレクターが実行中にプログラムを中断している可能性や、スケジューラーが別のより重要なプロセスのためにスケジュールを設定している可能性があります。

于 2013-02-09T15:47:52.850 に答える
0

より多くの情報がなければ、言うのは難しいです。ユーザー入力を待つことは、JITコンパイラーが関数をコンパイルすることを何らかの形で思いとどまらせ、代わりに解釈されて、より長い時間がかかることになる可能性があります。

于 2013-02-09T15:43:39.193 に答える