Skip to content

Files

Latest commit

eb0ea53 · Sep 21, 2021

History

History
256 lines (176 loc) · 10.6 KB

File metadata and controls

256 lines (176 loc) · 10.6 KB

十六、未来发展方向

在最后一章中,我们重点介绍了 Java 平台提供的一些激动人心的工具的最佳实践。具体来说,我们介绍了 UTF-8 属性文件、Unicode、Linux/AArch64 端口、多分辨率图像和公共区域设置数据存储库。

本章概述了 Java 平台在 Java11 之外的未来发展。我们将看看 Java19.3(12)和 19.9(13)的计划以及将来可能看到的进一步变化。我们将从一个简短的 JEP 概述开始。

具体而言,本章包括以下内容:

  • JEP 概述
  • 候选的 JEP
  • 提交的 JEP
  • 起草的 JEP
  • 正在进行的特别项目

技术要求

本章及后续章节主要介绍 Java11。Java 平台的标准版SE)可从 Oracle 官方下载网站下载。

IDE 包就足够了。来自 JetBrains 的 IntelliJ IDEA 用于与本章和后续章节相关的所有编码。IntelliJ IDEA 的社区版可从网站下载。

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 候选

这一部分的特点是五个 JEP,在写这本书的时候,有候选人的地位。这些 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

每项建议的详细信息可从这个页面获得。

已起草的 JEP

在撰写本书时,以下 JEP 的起草状态为:

  • G1 的可中止混合集合
  • Java 堆在备用内存设备上的旧一代的分配
  • 更好的哈希码
  • 并行监视器
  • 动态最大内存限制
  • 高效数组比较
  • 在 GPU 上启用 Java 方法的执行
  • 使用值类型增强的ManderblotSet演示
  • 增强型伪随机数生成器
  • 改进的 IPv6 支持
  • 孤立的方法
  • Java 线程清理器
  • 应用启动时预编译的JWarmup Java 热方法
  • 密钥派生 API
  • 包装工具
  • 在 JVM 编译的方法上提供稳定的 USDT 探测点
  • 支持映射到非易失性存储器上的ByteBuffer
  • 及时减少未使用的已提交内存
  • JVM 中的类型运算符表达式
  • 方法句柄的未装箱参数列表
  • 使用 UTF-8 作为默认字符集

每项建议的详细信息可从这个页面获得。

正在进行的特别项目

Java 增强建议展示了 Java 平台的设计和实现变化。如前所述,正在起草的 JEP 的标准是,工作必须至少满足以下一项:

  • 需要大量的工程工作来实现(至少两周)
  • 涉及对 JDK 或其基础结构的重大更改
  • 是 Java 开发人员或用户的高需求项目

另一方面,项目代表由下列小组之一赞助的合作努力:

  • 二维图形
  • 采用
  • 抽象窗口工具箱AWT
  • 建造
  • 兼容性和规范审查
  • 编译器
  • 一致性
  • 核心库
  • 理事会
  • HotSpot
  • 国际化
  • JMX
  • 成员
  • 网络
  • NetBeans 项目
  • 搬运工
  • 质量
  • 安全
  • 适用性
  • 声音
  • Swing
  • 漏洞
  • Web

小组是正式的,可以提出新的小组。

下面列出的活动项目代表了 Java 平台未来可能的增强领域。本节后面将提供有关每个项目的简要信息,并深入了解未来变化的一般领域:

  • 注解管道 2.0
  • 音频合成引擎
  • Caciocavallo
  • 通用虚拟机接口
  • 编译器语法
  • 设备 I/O
  • Graal
  • HarfBuzz 集成
  • Kona
  • 开放 JFX
  • Panama
  • Shenandoah

注解管道 2.0

这个项目探索如何在 Java 编译器管道中处理注解的改进。我们无意提议更改规范,而是将重点放在性能增强上。

音频合成引擎

这个项目正在考虑为 JDK 创建一个新的 MIDI 合成器。当前的 MIDI 合成器属于授权库。工作组希望看到新的 MIDI 合成器作为一个开源 JDK 素材。

Caciocavallo

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

Graal 项目的目标是通过 JavaAPI 公开 VM 功能。这将允许开发人员用 Java 为给定的语言运行时编写动态编译器,包括开发多语言解释器框架。

HarfBuzz 集成

HarfBuzz 集成项目希望将 HarfBuzz 布局引擎集成到 Java 开发工具包中。这是为了用 HarfBuzz 布局引擎替换 ICU 布局引擎。ICU 布局引擎已被弃用,巩固了该项目未来成功的重要性。

Kona

Kona 项目正在定义和实现 Java API,以支持物联网IoT)领域。这包括网络技术和协议。尽管没有说明,但安全和安保对于这项工作的成功实现至关重要。

开放 JFX

关于 OpenJFX 项目没有太多可用的细节。这个项目的既定目标是创建下一代 Java 客户端工具包。根据项目名称,可以假设团队希望创建 JavaFX 的 OpenJFX 版本,这是一组用于创建富互联网应用的包。

Panama

Panama 项目的重点是增强 JVM 和非 JavaAPI 之间的连接。

该项目包括以下选定组件:

  • 本机函数调用
  • 从 JVM 进行本机数据访问
  • JVM 堆内的本机数据访问
  • JVM 堆中的新数据布局
  • 头文件的 API 提取工具

项目团队已经生成了一个与 JDK9 结构匹配的存储库树。这大大增加了项目成功的可能性。

Shenandoah

Shenandoah 项目的目标是通过垃圾收集操作显著减少暂停时间。这种方法是让更多的垃圾收集操作与 Java 应用同时运行。在第 7 章中,“利用默认的 G1 垃圾收集器”,您了解了 CMS 和 G1。Shenandoah 项目打算将并行压缩添加到可能的垃圾收集方法中。

总结

在这一章中,我们概述了 Java 平台在 Java11 之外的未来发展。Java 平台的每一个潜在变化都被描述为候选、提交或起草

在下一章中,您将学习如何为 Java 社区做出贡献以及这样做的好处。

问题

  1. 什么是 JEP?
  2. 一个提案必须有什么样的上诉才能为正义与平等党考虑?
  3. 提案必须满足的三个标准是什么?
  4. 在哪里可以找到活动 JEP 的列表?
  5. 起草的 JEP 状态意味着什么?
  6. 发布的 JEP 状态意味着什么?
  7. 提交的 JEP 状态意味着什么?
  8. 候选的 JEP 状态意味着什么?
  9. 受资助的 JEP 状态意味着什么?
  10. 完成的 JEP 状态意味着什么?