2014-09-13 4 views
4

Я хочу рассчитать время выполнения моей Java-программы. когда я использовал следующий метод:вычислить время выполнения для Java-программы

long startTime = System.currentTimeMillis(); 
      ...my program... 
long endTime = System.currentTimeMillis(); 
long totalTime = endTime - startTime; 
System.out.println(totalTime); 

результат отличается время от времени, так что я имею в виду, чтобы получить некоторые (100 или некоторые ..) образцы и вычислить среднее значение, чтобы сделать его более точным:

long total = 0  
for (int i = 0; i < 100; i++) { 
    Long s = System.currentTimeMillis(); 
    ...my program... 
    Long e = System.currentTimeMillis(); 
    total += (e - s); 
} 

, так что я получил общее время выполнения .. для первого метода это обычно около 600 мс, а для второго метода результат будет около 30000 мс (так avg time: 30000/100 = 300 мс).

Я думаю, что это может быть связано с JVM, для загрузки файла или его преобразования в байтовый код требуется некоторое время. а второй метод загружает только & и один раз запускает метод 100 раз?

Я не уверен в своих объяснениях, пожалуйста, исправьте меня, если я ошибаюсь.

и моя проблема: если я хочу получить «реальное» общее время работы и вычислить среднее значение, что мне делать?

Заранее благодарен!

ответ

1

Сроки в Java неизбежно будут ненадежными таким образом, поскольку вы не только будете чувствительны к событиям, происходящим вне вашей программы, но и характер компиляции JIT и т. Д. Затрудняет прогнозирование того, данное событие будет занимать одинаковое количество времени во всех ситуациях. В принципе, лучшее, что вы можете сделать, это сделать TON итераций и получить среднее значение. Назад, когда мне приходилось делать тайминги для класса, я получал бы довольно последовательные результаты синхронизации, если бы я использовал десятки тысяч итераций за тест, но опять же, вы не получите ужасно точное время таким образом с Java (и с меньшим степень, любой язык).

EDIT: Кроме того, вы должны изучить профилировщики, если хотите более точные расчеты времени, так как они, вероятно, дадут более четкий вид времени выполнения для каждого метода, чем попытка сделать это таким образом.

0

У Netbeans есть опция Profiler для вычисления времени выполнения Java-приложений в разделе Профиль. Вы можете искать это, поскольку Profiler вычисляет фактический процессор и время памяти. Основываясь на моем опыте, я могу сказать, что он довольно стабилен.

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