JEP 107:集合的批量数据操作
概述
为 Java Collections Framework 添加针对数据的批量操作功能。这通常被称为“Java 的 filter/map/reduce”。批量数据操作包括串行(在调用线程上)和并行(使用多个线程)两种版本的操作。对数据的操作通常以 lambda 函数的形式表达。
目标
利用包括并行操作在内的 Lambda 函数,为批量数据处理提供新功能。
非目标
将现有用法转换为并行操作。
动机
Google 内部使用的 FlumeJava 和 Microsoft 提供的 PLinq 是最直接相似的产品。特别是 Linq 和 Plinq,它们被 .NET 开发者视为极具价值的工具,同时也让 Java 开发者羡慕不已。
主要好处是针对当前正在构建单线程业务流程应用程序的开发人员。能够以对他们的应用程序进行最少的更改来利用并发性,预计会带来巨大的好处。
描述
串行实现提供了一个从现有的集合批量数据操作到并行操作的桥梁,这不会改变应用程序的线程模型。
并行实现是该功能的核心元素。并行操作提供了通过将任务分配到多个线程(处理器)来加速处理大量数据的操作的机会。并行实现基于 Java 7 中引入的 java.util.concurrency
Fork/Join 实现构建。
对于串行和并行实现,都可以采用“急切”模式和“懒惰”模式。在急切模式下,对数据的操作会在调用操作函数时直接执行。而在懒惰模式下,对数据的操作会延迟到请求最终结果时才执行。懒惰模式操作允许实现基于数据和待执行操作的重组进行更多的优化。
测试
基准测试和性能回归测试对于交付高质量的最终产品至关重要。
这项工作将需要大量的硬件资源进行全面测试。例如,所有主要支持平台的专用 8 核以上系统。
依赖
- Lambda 语言的变更
- JEP 109 中描述的核心库变更
- 特别是来自 JSR 335 专家组、JSR 166 专家组以及 Doug Lea 的参与
影响
- 兼容性:仅向前兼容
- 安全性:标准
- 性能/可扩展性:需要进行大量的测试和基准测试
- 用户体验:无
- 国际化/本地化:无
- 可移植性:100% Java 实现,不计划使用本地代码。
- 打包/安装:作为 JRE 安装的一部分交付
- 文档:标准
- TCK(技术兼容性套件):没有特殊要求。将需要新的 TCK 测试。
- 国际化:与 JCF 相同
- 本地化:无