Это не первый раз, когда у меня возникают проблемы с часами на языке программирования. В основном я измеряю, насколько быстро функция работает, вызывая ее в цикле while. Проблема в том, что по какой-то причине прошедшее время становится короче, чем дольше выполняется цикл while. Кто-нибудь может объяснить? Код ниже.
DescriptiveStatistics stats = new DescriptiveStatistics();
while(true) {
long startTime = System.nanoTime();
executeSaxonXsltTransformation();
long stopTime = System.nanoTime();
long elapsedTime = stopTime-startTime;
stats.addValue((double)elapsedTime);
System.out.println(stats.getN()+" - "+elapsedTime+ " - "+stats.getMean());
}
Таким образом, после примерно 1000 запусков затраченное время составляет от 750 до 850 тысяч. Но после примерно 100000 запусков затраченное время падает с 580k до 750k. Непрерывное уменьшение лучше всего заметить, наблюдая за средним значением (stats.getMeans ()), которое после 108 тыс. Циклов имеет в среднем ~ 632 тыс. Циклов по сравнению с 3 тыс. Циклов со средним значением ~ 1 миллион. Переход на currentTimeMillis вместо nanoTime ничего не меняет.