Java 8, первая обработка списка медленнее, чем последующая обработка

Я провожу некоторые тесты (очень простые, ничего особенного), чтобы проверить производительность потоков Java 8 и лямбд. ИспользуяArrayList из 10 миллионов POJOS, все, что я хочу сделать, это получить среднее значениеBigDecimal поле. Чтобы взять более одного образца, я запускаю процесс пять раз, и, к моему удивлению, первый из этих пяти запусков происходит намного медленнее, чем остальные. Я получаю значения, как 0,38 секунды в первый раз, и 0,04 секунды на остальных четырех. Это в 10 раз быстрее !!! Я также сделал тот же тест, используя старую школуfor(Pojo p : pojos) с похожими результатами. Почему это происходит, и как я могу этим воспользоваться? Код, который я использую:

for (int i = 0; i < 5; i++) {
    long init = System.nanoTime();
    BigDecimal sum = lista.parallelStream().map(x -> x.getCosto()).reduce(BigDecimal.ZERO, BigDecimal::add);
    BigDecimal avg = sum.divide(BigDecimal.valueOf(registros));
    long end = System.nanoTime();
    System.out.println("End of processing: " + avg + " in "
            + ((end - init) / 1000000000.0) + " seconds.");
}

Ответы на вопрос(1)

Ваш ответ на вопрос