2013-02-09 3 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' --- Как генерируются строки? Случайно или жестко закодировано. –

+0

Он использует цикл for в функции для генерации «String1», «String2» и т. Д., До num – karoma

ответ

1

Вы ожидаете детерминированного поведения, и я предполагаю, что вы запускаете эту программу на ПК с нормальной ОС. Таким образом, ее невозможно ожидать точного времени в основном потому, что:

  1. вы используете виртуальную машину Java-код для выполнения в
  2. ВМ работает в ОС.

VM делает то, что вы не контролируете, и OS aswel. Поэтому вы можете только приблизиться к тому, сколько времени ваша программа собирается выполнить, если вы не запускаете свою программу в адекватной среде.

сборщик мусора может прервать вашу программу в середине его выполнения или планировщик может планировать вас еще более важный процесс, и т.д. и т.п.

0

Без дополнительной информации трудно сказать. Вполне возможно, что ожидание ввода пользователя каким-то образом препятствует компиляции JIT-компилятора компиляции функции, и в конечном итоге она интерпретируется и занимает больше времени.

Смежные вопросы