Java 8 的 Stream API 这么牛X,性能如何呢?( 二 )


Java 8 的 Stream API 这么牛X,性能如何呢?

文章插图
 
分析 , 对于复杂的归约操作:
  1. Stream API 的性能普遍好于外部手动迭代 , 并行 Stream 效果更佳;
再来考察并行度对并行效果的影响 , 测试结果如下:
Java 8 的 Stream API 这么牛X,性能如何呢?

文章插图
 
分析 , 对于复杂的归约操作:
  1. 使用 Stream 并行归约在单核情况下性能比串行归约以及手动归约都要差 , 简单说就是最差的;
  2. 随着使用核数的增加 , Stream 并行效果逐渐变好 , 多核带来的效果明显 。
以上两个实验说明 , 对于复杂的归约操作 , Stream 串行归约效果好于手动归约 , 在多核情况下 , 并行归约效果更佳 。我们有理由相信 , 对于其他复杂的操作 , Stream API 也能表现出相似的性能表现 。
结论上述三个实验的结果可以总结如下:
  1. 对于简单操作 , 比如最简单的遍历 , Stream 串行 API 性能明显差于显示迭代 , 但并行的 Stream API 能够发挥多核特性 。
  2. 对于复杂操作 , Stream 串行 API 性能可以和手动实现的效果匹敌 , 在并行执行时 Stream API 效果远超手动实现 。
所以 , 如果出于性能考虑 , 
  1. 对于简单操作推荐使用外部迭代手动实现 , 
  2. 对于复杂操作 , 推荐使用 Stream API , 
  3. 在多核情况下 , 推荐使用并行 Stream API 来发挥多核优势 , 
  4. 单核情况下不建议使用并行 Stream API 。
如果出于代码简洁性考虑 , 使用 Stream API 能够写出更短的代码 。即使是从性能方面说 , 尽可能的使用 Stream API 也另外一个优势 , 那就是只要 Java Stream 类库做了升级优化 , 代码不用做任何修改就能享受到升级带来的好处 。

【Java 8 的 Stream API 这么牛X,性能如何呢?】


推荐阅读