小编Tom*_*rds的帖子

为什么在某些情况下 Java Stream.forEach 方法比其他循环更快?

我目前正在开展一个项目,使用 Java Microbenchmark Harness (JMH) 框架来测量 Java 中不同类型循环的速度。我得到了一些关于流的有趣结果,我无法解释这些结果,并且想知道更好地理解流和数组列表的人是否可以帮助我解释我的结果。

基本上,当迭代大小为 100 左右的数组列表时,stream.forEach 方法比任何其他类型的循环快得多:

我的结果图表如下所示: https ://i.stack.imgur.com/W34eA.png

我尝试过使用对象和字符串的数组列表,并且都产生类似的结果。随着列表的大小变大,流方法仍然更快,但其他列表之间的性能差距变得更小。我不知道是什么导致了这些结果。

@Fork(5)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 10, time = 100, timeUnit = TimeUnit.MILLISECONDS)
@Measurement(iterations = 10, time = 100, timeUnit = TimeUnit.MILLISECONDS)
@State(Scope.Thread)
public class StackOverflowQ {

    List<Integer> intList;

    int size = 100;

    @Setup
    public void setup() {
        intList = new ArrayList<>(size);
        for(int i = 0; i<size;i++){
            intList.add(i);
        }
    }

    /**
     Work done to each item in the loop.
     */
    public double doWork(int item) { …
Run Code Online (Sandbox Code Playgroud)

java loops for-loop java-stream jmh

5
推荐指数
1
解决办法
6976
查看次数

标签 统计

for-loop ×1

java ×1

java-stream ×1

jmh ×1

loops ×1