# 未来发展方向 在最后一章中,我们重点介绍了 Java 平台提供的一些激动人心的实用程序的最佳实践。具体来说,我们介绍了 UTF-8 属性文件、Unicode、Linux/AArch64 端口、多分辨率图像和公共区域设置数据存储库。 本章概述了 Java 平台在 Java11 之外的未来发展。我们将看看 Java19.3(12)和 19.9(13)的计划以及将来可能看到的进一步变化。我们将从一个简短的 JEP 概述开始。 具体而言,本章包括以下内容: * JEP 概述 * 正义与平等党候选人 * JEP 提交 * JEP 起草 * 正在进行的特别项目 # 技术要求 本章及后续章节主要介绍 Java11。Java 平台的**标准版**(**SE**)可从 [Oracle 官方下载网站](http://www.oracle.com/technetwork/java/javase/downloads/index.html)下载。 IDE 软件包就足够了。来自 JetBrains 的 IntelliJ IDEA 用于与本章和后续章节相关的所有编码。IntelliJ IDEA 的社区版可从[网站](https://www.jetbrains.com/idea/features/)下载。 # JDK 增强方案概述 **JDK 增强建议**(**JEP**)由 JDK 的建议变更列表组成。这个公开的列表用于通知开发人员并为 Java 平台提供一个长期计划 JEP 的核心是增强功能本身。增强的标准包括: * 必须表明 JDK 发生了重大变化。 * 必须有广泛的信息吸引力。 * 此外,它必须满足以下附加标准之一: * 需要大量的工程工作来实施(至少两周) * 涉及对 JDK 或其基础结构的重大更改 * 是 Java 开发人员或用户的高需求项目 JEP 具有以下顺序状态: 1. **草案**:这是最早的状态,当 JEP 已经写好,作者正在传阅征求共识时使用 2. **发布**:一旦作者达成共识,JEP 即可登录 JEP 档案 3. **提交**:一旦 JEP 被认为准备好进行正式评估,作者即设置此状态 4. **候选**:一旦 OpenJDK 负责人接受了 JEP,就变为这个状态 5. **资助**:资助是指某个职能部门领导或某个小组领导判断 JEP 资金充足 6. **已完成**:此状态表示增强工作已完成并在版本发布中交付 并不是每个 JEP 都能完成整个六阶段的工作流程。其他状态包括**激活**、**拒绝**、**撤销**。 Java 平台的每一个潜在更改都将被描述为有针对性的、提交的或起草的。有针对性是指已指定用于未来 Java 版本的更改,已提交是指已提交但未针对 Java 平台特定版本的更改,并且起草的更改仍在绘图板上,尚未准备好提交或指定为有针对性的更改。 下一节将介绍 **JDK 增强方案**,包括候选、已提交和草稿的状态。 # 正义与平等党候选人 这一部分的特点是五个杰普,在写这本书的时候,有候选人的地位。这些 JEP 如下: * JEP326:原始字符串文本 * JEP334:JVM 常量 API * JEP337:RDMA 网络插座 * JEP338:向量 API * JEP339:Edwards 曲线数字签名算法 # JEP326:原始字符串文本 在未来的版本中,我们可能会看到 Java 平台中添加了原始字符串文本。原始字符串文本有两个重要特性: * 它们可以跨越多行源代码 * 转义序列不被解释 这个增强的目标本质上是让开发人员更容易。此更改将允许开发人员提供包含多行代码的字符串,而不必提供字符来指示新行。 # JEP334:JVM 常量 API JVM 依赖于一个常量池来确定类布局、实例、接口和数组。每个类都有一个固定的池。当前用于建模这些可加载常量的 Java 数据类型效率低下且不充分。这个 JEP 的目的是为 Java 提供操纵类和方法的能力。 # JEP337:RDMA 网络插座 **远程直接内存访问**(**RDMA**)允许一台计算机访问另一台计算机的内存,而无需通过操作系统。这个 JEP 希望将 RDMA 添加到 JDK 网络 API 中。至少在最初,这将适用于 Linux 系统。 # JEP338:向量 API 将创建一个新的矢量 API,以便矢量计算可以可靠地编译成针对特定 CPU 优化的矢量硬件指令。这将使开发人员能够提供高效的标量计算。 # JEP339:Edwards 曲线数字签名算法 **Edwards 曲线数字签名算法**(**EdDSA**)是一种密码签名。这个 JEP 计划实现这个算法。 # JEP 提交 在撰写本书时,以下 JEP 的状态为提交: * 默认情况下,将禁用实验功能 * 默认的 CDS 存档将包含在 JDK 二进制文件中 * Javadoc 标签的创建是为了区分 API、实现、注释和规范之间的差异 * 新的 JMX 注释将用于注册托管资源 * GTK3 将在布局方面进行现代化改造 * 将为 JMX 创建新的 REST API 每项建议的详细信息可从[这个页面](http://openjdk.java.net/jeps/0)获得。 # JEP 起草 在撰写本书时,以下 JEP 的起草状态为: * G1 的可中止混合集合 * 旧一代 Java 堆在备用内存设备上的分配 * 更好的散列码 * 并行监视器 * 动态最大内存限制 * 高效数组比较 * 启用在 GPU 上执行 Java 方法 * 使用值类型增强的`ManderblotSet`演示 * 增强型伪随机数发生器 * 改进的 IPv6 支持 * 孤立的方法 * Java 线程消毒剂 * `JWarmup`应用程序启动时预编译的 Java 热方法 * 密钥派生 API * 包装工具 * 在 JVM 编译的方法上提供稳定的 USDT 探测点 * 支持映射到非易失性存储器上的`ByteBuffer` * 及时减少未使用的提交内存 * JVM 中的类型运算符表达式 * 方法句柄的未装箱参数列表 * 使用 UTF-8 作为默认字符集 每项建议的详细信息可从[这个页面](http://openjdk.java.net/jeps/0)获得。 # 正在进行的特别项目 Java 增强建议展示了 Java 平台的设计和实现变化。如前所述,正在起草的 JEP 的标准是,工作必须至少满足以下一项: * 需要大量的工程工作来实施(至少两周) * 涉及对 JDK 或其基础结构的重大更改 * 是 Java 开发人员或用户的高需求项目 另一方面,项目代表由下列小组之一赞助的合作努力: * 二维图形 * 采用 * **抽象窗口工具箱**(**AWT**) * 建造 * 兼容性和规范审查 * 编译程序 * 一致性 * 核心库 * 理事会 * 热点 * 国际化 * JMX 公司 * 成员 * 网络 * NetBeans 项目 * 搬运工 * 质量 * 安全 * 适用性 * 声音 * 摇摆 * 脆弱性 * 网状物 小组是正式的,可以提出新的小组。 下面列出的活动项目代表了 Java 平台未来可能的增强领域。本节后面将提供有关每个项目的简要信息,并深入了解未来变化的一般领域: * 注释管道 2.0 * 音频合成引擎 * 仙人掌 * 通用虚拟机接口 * 编译器语法 * 设备 I/O * 格拉尔 * HarfBuzz 集成 * 科纳 * 开放 JFX * Panama * 谢南多阿 # 注释管道 2.0 这个项目探索如何在 Java 编译器管道中处理注释的改进。我们无意提议更改规范,而是将重点放在性能增强上。 # 音频合成引擎 这个项目正在考虑为 JDK 创建一个新的 MIDI 合成器。当前的 MIDI 合成器属于授权库。工作组希望看到新的 MIDI 合成器作为一个开源 JDK 资产。 # 仙人掌 Caciocavallo 项目旨在改进 OpenJDK AWT 内部接口。这扩展到二维子系统。提议的改进将简化 AWT 移植到新平台的方式。 # 通用虚拟机接口 公共 VM 接口项目的目标是为 OpenJDK 记录 VM 接口。这将使 Classpath VM 和其他 VM 更容易使用 OpenJDK。 # 编译器语法 编译器语法项目正在开发一个基于 ANTLR 语法的实验性 Java 编译器。**另一种语言识别工具**(简称 **ANTLR**),是一种读取、处理和执行结构化文本或二进制文件的解析器。项目组希望这个 Java 编译器能够取代当前的编译器,因为它使用的是手写解析器 **LALR**(缩写为 **Look Ahead Left to Right**)。LALR 解析器已经被项目组确认为脆弱的,难以扩展。 # 设备 I/O 这个项目打算通过 Java 级 API 提供对通用外围设备的访问。项目组希望支持的外围设备的初始列表包括: * **GPIO**(简称**通用输入/输出**) * **I2C**(简称**集成电路间总线**) * **SPI**(简称**串口**) * **UART**(简称**通用异步收发机**) # 格拉尔 Graal 项目的目标是通过 JavaAPI 公开 VM 功能。这将允许开发人员用 Java 为给定的语言运行时编写动态编译器,包括开发多语言解释器框架。 # HarfBuzz 集成 HarfBuzz 集成项目希望将 HarfBuzz 布局引擎集成到 Java 开发工具包中。这是为了用 HarfBuzz 布局引擎替换 ICU 布局引擎。ICU 布局引擎已被弃用,巩固了该项目未来成功的重要性。 # 科纳 Kona 项目正在定义和实现 Java API,以支持**物联网**(**IoT**)领域。这包括网络技术和协议。尽管没有说明,但安全和安保对于这项工作的成功实施至关重要。 # 开放 JFX 关于 OpenJFX 项目没有太多可用的细节。这个项目的既定目标是创建下一代 Java 客户机工具包。根据项目名称,可以假设团队希望创建 JavaFX 的 OpenJFX 版本,这是一组用于创建富互联网应用程序的包。 # Panama Panama 项目的重点是增强 JVM 和非 JavaAPI 之间的连接。 该项目包括以下选定组件: * 本机函数调用 * 从 JVM 进行本机数据访问 * JVM 堆内的本机数据访问 * JVM 堆中的新数据布局 * 头文件的 API 提取工具 项目团队已经生成了一个与 JDK9 结构匹配的存储库树。这大大增加了项目成功的可能性。 # 谢南多阿 Shenandoah 项目的目标是通过垃圾收集操作显著减少暂停时间。这种方法是让更多的垃圾收集操作与 Java 应用程序同时运行。在第 7 章中,“利用默认的 G1 垃圾收集器”,您了解了 CMS 和 G1。Shenandoah 项目打算将并行压缩添加到可能的垃圾收集方法中。 # 摘要 在这一章中,我们概述了 Java 平台在 Java11 之外的未来发展。Java 平台的每一个潜在变化都被描述为候选、提交或起草 在下一章中,您将学习如何为 Java 社区做出贡献以及这样做的好处。 # 问题 1. 什么是杰普? 2. 一个提案必须有什么样的上诉才能为正义与平等党考虑? 3. 提案必须满足的三个标准是什么? 4. 在哪里可以找到活动 JEP 的列表? 5. 正义与平等党国家草案意味着什么? 6. 贴出的 JEP 状态意味着什么? 7. 提交的 JEP 状态意味着什么? 8. 候选人杰普州意味着什么? 9. 受资助的正义与平等党国家意味着什么? 10. 完成的 JEP 状态意味着什么?