我目前正在开展一个项目,使用 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)