我期望简单的中间流操作,例如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,只是用秒表设置快速实验)