Skip to content

JEP 107: Bulk Data Operations for Collections | 集合的批量数据操作

摘要

为 Java 集合框架添加批量数据操作功能。这通常被称为“Java 中的过滤 / 映射 / 归约”。批量数据操作包括串行(在调用线程上)和并行(使用多个线程)版本的操作。对数据的操作通常以 lambda 函数表示。

目标

使用 lambda 函数提供批量数据处理的新功能,包括并行操作。

非目标

将现有用法转换为并行操作。

动机

FlumeJava(由 Google 内部使用)和 PLinq(由 Microsoft 提供)是最直接类似的解决方案。特别是 Linq 和 Plinq 被 .NET 开发人员视为非常有价值的,而 Java 开发人员则非常羡慕。

主要的好处是对于当前构建单线程业务流程应用程序的开发人员。能够以最小的更改来利用并发性,预计将带来巨大的好处。

描述

串行实现提供了从现有集合批量数据操作到并行操作的桥梁,不改变应用程序的线程模型。

并行实现是这个特性的核心要素。并行操作提供了通过将任务分配给多个线程(处理器)来加速大量数据操作的机会。并行实现基于 Java 7 中引入的 java.util.concurrency Fork/Join 实现。

对于串行和并行实现,可以使用“急切”模式和“延迟”模式。在急切模式下,数据上的操作在调用操作函数时直接对数据执行。在延迟模式下,数据上的操作被推迟到请求最终结果时执行。延迟模式的操作允许实现根据数据和要执行的操作的重新组织来进行更多的优化。

测试

基准测试和性能回归测试对于交付高质量的最终产品至关重要。

这项工作将需要大量的硬件资源来进行全面测试。即为所有主要支持的平台提供专用的 8 个或更多核心系统。

依赖

  • Lambda 语言更改
  • JEP 109 中描述的核心库更改
  • 需要 JSR 335 EG 和 JSR 166 EG 的参与,尤其是 Doug Lea 的参与

影响

  • 兼容性:仅向前兼容
  • 安全性:标准
  • 性能 / 可扩展性:需要进行大量的测试和基准测试
  • 用户体验:无
  • I18n/L10n:无
  • 可移植性:100% 的 Java 实现,无计划使用本机代码。
  • 打包 / 安装:作为 JRE 安装的一部分提供
  • 文档:标准
  • TCK:没有特殊要求。将需要新的 TCK 测试。
  • 国际化:与 JCF 相同
  • 本地化:无