为什么第一次调用并行流的执行时间比下一个要长得多

问题描述

此处,此方法一个函数一个long作为参数。将功能应用10次 该方法的long值,记录每次执行所花费的时间(以毫秒为单位),以及 返回最快的持续时间。

   static long measure(Function<Long,Long> adder,long n) {
    long fastest = Long.MAX_VALUE;
    for (int i = 0; i < 10; i++) {
        long start = System.nanoTime();
        long sum = adder.apply(n);
        long duration = (System.nanoTime() - start) / 1_000_000;
        System.out.println("duration: " + duration);
        if (duration < fastest) fastest = duration;
    }
    return fastest;
}

并且我有这种方法可以对前n个自然数求和:

 static long parallelSum(long n) {
    return LongStream.rangeClosed(1,n)
            .parallel()
            .reduce(Long::sum)
            .getAsLong();
}

当我在n = 10_000_000上调用测量方法

System.out.println("sum done in: "+ measure(Myclass::parallelSum,10_000_000)+ " msec")

我得到以下结果:

duration: 64
duration: 2
duration: 2
duration: 2
duration: 2
duration: 2
duration: 2
duration: 2
duration: 2
duration: 2
sum done in 2 msec

我的问题是,为什么第一次调用方法parallelSum的持续时间总是比下一个更长?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)