gpt4 book ai didi

java - 使用嵌套 Intstream 循环时 Java 8 的性能很糟糕

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:47 25 4
gpt4 key购买 nike

在阅读了 Java 8 的 java.util.stream.Intstream 之后,我一直在用流替换一些传统的循环。不幸的是,我在处理嵌套循环时遇到了一些性能问题。

正如预期的那样,以下代码在我的机器上运行大约需要 47 毫秒:

IntStream.range(0, 1000000000).forEach(i -> {});

但是,嵌套另一个 IntStream hyper 会使执行时间增加到大约 10,458 毫秒 - 即:

IntStream.range(0, 1000000000).forEach(i -> {
IntStream.range(0, 1).forEach(j -> {});
});

这是我的误用案例,还是将来可能会解决的问题?

编辑:为了比较,以下代码使用传统的内循环运行得更快(1,801 毫秒)。因此,即使考虑到优化,使用内部 IntStream 似乎也有更多开销?

final long[] random = {1};
IntStream.range(0, 1000000000).forEach(i -> {
for (int j = 0; j < 1; j++) {
random[0] += i;
}
});

最佳答案

不是第二种情况的糟糕表现。这实际上是第一种情况下令人难以置信的出色表现。你看,你迭代了 10 亿个元素,迭代只用了 47 毫秒。因此,您可以在一秒钟内迭代超过 1000/47 = 210 亿个元素!您的 CPU 频率可能约为 3 GHz,因此您在单个 CPU 周期内迭代了 7 个元素!这种优化是由 JIT 编译器针对非常简单的循环执行的(实际上它在死代码消除期间被完全优化掉了)。但是,您不会通过编写空循环来赚钱。如果您至少添加了一些重要的逻辑,一些优化将关闭或变得不那么有效,因此您的性能将显着下降。

我建议您对真实代码执行测试并针对最慢的部分分析您的应用程序。人工示例与生产代码的真实性能毫无共同之处。

关于java - 使用嵌套 Intstream 循环时 Java 8 的性能很糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com