Mat*_*ias 5 java throughput java-stream
我期望简单的中间流操作,例如limit(),开销很小.但这些示例之间的吞吐量差异实际上很重要:
final long MAX = 5_000_000_000L;
LongStream.rangeClosed(0, MAX)
.count();
// throughput: 1.7 bn values/second
LongStream.rangeClosed(0, MAX)
.limit(MAX)
.count();
// throughput: 780m values/second
LongStream.rangeClosed(0, MAX)
.limit(MAX)
.limit(MAX)
.count();
// throughput: 130m values/second
LongStream.rangeClosed(0, MAX)
.limit(MAX)
.limit(MAX)
.limit(MAX)
.count();
// throughput: 65m values/second
Run Code Online (Sandbox Code Playgroud)
我很好奇:快速降低吞吐量的原因是什么?它是链式流操作或我的测试设置的一致模式吗?(到目前为止我没有使用JMH,只是用秒表设置快速实验)
limit将导致由流组成的切片,带有分割迭代器(用于并行操作)。一言以蔽之:效率低下。这里的空操作开销很大。连续两次limit调用会导致两个切片,这是一种耻辱。
您应该看一下 的实现IntStream.limit。
由于 Streams 还相对较新,优化应该放在最后;当生产代码存在时。做极限3次似乎有点牵强。
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |