为什么程序启动后的第一个并行Stream运行速度比后续运行速度慢

时间:2018-06-11 09:06:09

标签: java parallel-processing java-8

我编写了以下代码来学习parallelStream。

public class Main {
    public static void main(String[] args) {
        List<Integer> set = IntStream.iterate(2000000, x -> x - 1)
                .boxed()
                .limit(2000000)
                .collect(Collectors.toList());
        for (int x = 0; x < 5; x++) {
            //================= parallelStream ===============
            LocalTime start = LocalTime.now();
            set.parallelStream().sorted().findFirst().get();
            Duration duration = Duration.between(start, LocalTime.now());
            System.out.println("parallelStream: " + duration.toMillis());
        }
    }
}

每次运行此程序时,我发现第一个并行流总是比后续并行流慢得多。

以下是一些测试数据:

parallelStream: 113
parallelStream: 24
parallelStream: 41
parallelStream: 14
parallelStream: 14

Process finished with exit code 0

-

parallelStream: 154
parallelStream: 25
parallelStream: 47
parallelStream: 13
parallelStream: 15

Process finished with exit code 0

请注意,第一个并行流操作总是需要几倍于后续并行流成本。

这是为什么?如果有人可以帮助我,我将不胜感激。

0 个答案:

没有答案