Java 19 已发布!
Sharat Chander,2022 年 9 月 20 日甲骨文很荣幸地宣布 JDK 19 已正式发布。此版本是通过六个月的发布节奏按时交付的第十个功能版本。这种可预测性让开发人员能够轻松管理他们对创新的采用,这要归功于一系列预期的变更。
Java 提升性能、稳定性和安全性的能力使其持续成为全球最流行的编程语言。根据 IDC 报告,超过 1000 万开发人员(占全球全职开发人员的 75%)使用 Java。
JDK 19 现已发布!
甲骨文现为开发人员、终端用户和企业提供 JDK 19。Oracle JDK 19 将根据 Oracle 关键补丁更新 (CPU) 时间表接收性能、稳定性和安全更新,如 Oracle Java SE 支持路线图 中所述。
Oracle JDK 19 不是长期支持 (LTS) 版本。Oracle JDK 17(于 2021 年 9 月 14 日发布)是 2018 年宣布的发布节奏下的最新长期支持 (LTS)。甲骨文已宣布计划将未来 LTS 版本之间的间隔从 3 年缩短至 2 年,因此您应该期待下一个 LTS 是 2023 年 9 月的 Java 21。
随 Oracle JDK 17 一起宣布的另一项重要变更,是引入了新的、更简单的许可条款,这将允许公司免费使用 Oracle JDK 17(包括每季度的性能、稳定性和安全补丁),至少在未来三年内,允许与下一个 LTS 版本重叠整整一年。Java SE 订阅者可以访问 Oracle 的 Java SE 支持和商业功能,例如 GraalVM Enterprise、Java Management Service 和 Advanced Management Console。有关新许可的详细信息,请参阅 新的 Java SE 许可条款 博客。
Java 19,齐心协力
与之前的版本一样,在 Java 19 中,我们继续赞扬 OpenJDK 社区中的许多个人和组织的贡献——我们共同构建 Java!
JDK 19 修复比率
多年来,JDK 版本中的变更率基本保持不变,但在六个月的节奏下,交付生产就绪功能和改进的速度已大大提高。
与过去几年每隔几年进行数万次修复并交付近百个 JEP(JDK 增强提案)不同,增强功能现在以更精简的功能版本的形式交付,采用更易于管理、可预测的六个月时间表。变更范围从重要的新功能到常规维护、错误修复和文档改进的小型增强功能。每个变更都以 JDK 错误系统 中单个问题的单个提交表示。
在 Java 11 到 Java 19 发布时标记为已修复的 19,297 个 JIRA 问题中,有 13,825 个是由为 Oracle 工作的人员完成的,而 5,472 个是由个人开发者和为其他组织工作的开发者贡献的。通过问题和整理受让人组织数据,得到以下图表,列出了赞助 Java 中贡献开发的组织:通过问题和整理受让人组织数据,得到以下图表,列出了赞助 Java 中贡献开发的组织
在 Java 19 中,在标记为已修复的 1,962 个 JIRA 问题中,有 1,383 个是由 Oracle 完成的,而 579 个是由 Java 社区其他成员贡献的。
Oracle 要感谢为阿里巴巴、亚马逊、ARM、华为、IBM、英特尔、JetBrains、NTT Data、Red Hat 和腾讯等组织工作的开发者做出的显著贡献。我们也很感谢看到来自贝尔软件、DataDog、龙芯和 Skymatic 等较小组织的贡献,以及独立开发者,他们共同贡献了 Java 19 中 6% 的修复。
我们同样感谢审阅提议变更的众多经验丰富的开发者,尝试早期访问版本并报告问题的早期采用者,以及在 OpenJDK 邮件列表中提供反馈的专业人士。
以下个人提供了关于构建质量的宝贵反馈,记录了高质量的 bug,或提供了频繁的更新
- Uwe Schindler(Apache Lucene)
- Martin Grigorov(Apache Tomcat、Apache Wicket)
- Rafael Winterhalter(Byte Buddy)
- Yoann Rodière(Hibernate ORM、Validator、Search、Reactive)
- Marc Hoffman(JaCoCo)
- Lukas Eder(JOOQ)
此外,通过质量推广计划,我们要感谢以下 FOSS 项目和个人,他们对 Java 19 早期访问版本的测试提供了出色的反馈,帮助提高了该版本的质量
- Apache Derby(Rick Hillegas)
- Apache Zookeeper(Enrico Olivelli)
- BNYM 代码 Kata(Rinat Gatyatullin)
- RxJava(David Karnok)
- Apache Johnzon
- JobRunr
- MyBatis
- 文艺复兴
Java 19 中的新增功能
除了数千项性能、稳定性和安全更新之外,Java 19 还提供了数十项新功能和增强功能,七项增强功能/变更上升到通过JDK 增强建议 - JEP流程进行管理的级别,包括四个预览功能和两个孵化器功能。
一些不需要 JEP 的新功能包括新的 (D)TLS 签名方案、对 Unicode 14.0 的支持、其他 DateTime 格式以及 AArch64 系统上的 PAC-RET 保护。可以在https://jdk.java.net/19/release-notes中找到这些功能和许多其他新功能的详细信息。
JEP 预览功能是 Java SE 平台的完全指定和完全实现的语言或 VM 功能;但尚未永久化。它们在 JDK 功能版本中提供,以便在它们在未来版本中永久化之前,基于实际用途允许开发者提供反馈。这也为工具供应商提供了在功能最终确定到 Java SE 标准之前支持功能的机会。
JEP 孵化器模块允许将非最终 API 和非最终工具交到开发者和用户手中,以收集反馈,最终提高 Java 平台的质量。
Java 19 中提供的七个 JEP 分为四类,对应于关键的长期 Java 技术项目和硬件支持。
Project Amber
通过扩展模式匹配来表达更复杂、可组合的数据查询,从而提高开发人员的工作效率。这是通过增强 Java 编程语言来实现的,其中记录模式用于解构记录值。记录模式和类型模式可以嵌套,以实现强大、声明式和可组合的数据导航和处理形式。
JEP 405 涉及
- [JDK 19] JEP 427: switch 的模式匹配(第 3 次预览)
JEP 427 – switch 的模式匹配(第 3 次预览)
通过改进 Java 的代码语义来提高开发人员的工作效率。这是通过增强 Java 编程语言来实现的,其中模式匹配用于 switch 表达式和语句。将模式匹配扩展到 switch 允许针对多个模式测试一个表达式,每个模式都有一个特定操作,以便可以简洁且安全地表达复杂的面向数据的查询。
JEP 427 涉及
- [JDK 17] JEP 406: switch 的模式匹配(预览)
- [JDK 18] JEP 420: switch 的模式匹配(第 2 次预览)
- [JDK 19] JEP 405: 记录模式(预览)
Project Panama
外部函数和内存 API 以四种独特的方式提供价值
易于使用 — 使用高级纯 Java 开发模型替换 Java Native Interface (JNI)。
性能 — 提供与 JNI 和 sun.misc.Unsafe 等现有 API 相当甚至更好的性能。
通用性 — 提供操作不同类型外部内存(例如,本机内存、持久性内存和托管堆内存)的方法,并随着时间的推移,适应其他平台(例如,32 位 x86)和用 C 以外的语言(例如,C++、Fortran)编写的外部函数。
安全性 — 允许程序对外部内存执行不安全操作,但默认情况下会警告用户此类操作。
外部函数和内存 API 引入了 Java 程序可与 Java 运行时之外的代码和数据进行交互的 API。通过有效调用外部函数(即 JVM 外部的代码)和安全访问外部内存(即 JVM 不管理的内存),该 API 使 Java 程序能够调用本机库并处理本机数据,而不会出现 JNI 的脆弱性和危险性。
JEP 424 涉及
通过引入一个 API 来表示向量计算,在受支持的 CPU 架构上可靠地编译为最佳向量指令,从而实现优于等效标量计算的性能,从而提高性能。向量 API 在 JDK 16、17 和 18 中孵化。JDK 19 结合了这些版本用户的反馈以及性能改进和实现增强。它使用了一些现在已经足够成熟以创建此依赖项的外部函数和内存 API。
JEP 426 涉及
Project Loom
虚拟线程是轻量级线程,极大地减少了编写、维护和观察高吞吐量并发应用程序的工作量。
虚拟线程是 Project Loom 中的第一个 JEP。Project Loom 升级了 Java 并发模型,以满足当今大规模服务器应用程序的需求。
Java 的线程有很多优点。它们提供了一个自然的编程模型,使用用户理解的控制流运算符编写可读的顺序代码——循环、条件、异常。用户可以获得出色的调试和可维护性,以及可读的堆栈跟踪。并且线程是操作系统的自然调度单元。我们希望保留这些优点。
问题在于操作系统对线程的实现过于重量级。为每个连接启动一个线程需要花费太长时间,但更糟糕的是,操作系统一次可以支持的线程数限制了服务器可以处理的并发事务数——远低于硬件或网络的容量——因此线程成为服务器吞吐量的严重制约因素。
许多人认为我们会采用所谓的“响应式”框架提供的异步编程风格。通过不直接将并发操作表示为线程,它确实超出了按请求分配线程模型所带来的限制,但代价巨大——更复杂的代码更难编写、更难阅读,并且更难调试或分析,因为所有层及其工具的平台都是围绕线程构建的。响应式可能是人们使用当前 JVM 所能做的最好的事情,但我们的目标是做得更好,我们可以通过使线程更轻量级和更具可扩展性来做到这一点,让开发人员继续使用他们多年来一直在成功使用的模型和工具。
如今,开发人员有三个糟糕的选择:通过利用不足浪费硬件、通过更差的编程模型和可观察性浪费程序员精力,或远离 Java。因此,Project Loom 为开发人员提供了更好的选择。
Project Loom 时间表
- 2017 年末:开始研究 Loom
- 2019 年 7 月:发布 Fiber 原型的 EA 构建版本以征求反馈
- 2019 年 9 月:JEP 353(重新实现传统 Socket API)在 JDK 13 中发布
- 2020 年 9 月:JEP 373(重新实现传统 DatagramSocket API)在 JDK 15 中发布
- 2021 年 11 月:发布结构化并发支持的早期访问版本以征求反馈
- 2021 年 11 月:发布虚拟线程和结构化并发的 JEP 草案征求意见
- 2022 年 3 月:JEP 418(Internet 地址解析 SPI)在 JDK 18 中发布
- 2022 年 9 月:JDK 19 中的预览
结构化并发通过引入结构化并发的 API 简化了多线程编程。通过引入结构化并发的 API 简化多线程编程来实现这一目标。结构化并发将运行在不同线程中的多个任务视为一个工作单元,从而简化了错误处理和取消,提高了可靠性,并增强了可观察性。
新端口
JEP 422 - Linux/RISC-V 端口将 JDK 移植到 Linux/RISC-V 架构。RISC-V 是一种免费开源 RISC 指令集架构 (ISA),最初由加州大学伯克利分校设计,现在在 RISC-V International 的赞助下协作开发。它已经得到广泛的语言工具链的支持。随着 RISC-V 硬件的日益普及,JDK 的移植为开发人员提供了价值。
资源
Java 仍然是当今技术趋势的首选编程语言。正如 Java 19 改进的按时交付所展示的那样,通过持续的周密规划和生态系统参与,Java 平台已经为现代开发和云计算中的增长做好了充分准备。
通过以下方式继续了解新闻和更新
- 访问 Dev.java(Oracle 专门用于提升您的 Java 知识和社区参与的入口网站)。
- 访问 Inside.java(Oracle Java 团队的新闻和观点)。
- 收听 Inside.java 播客(由 Oracle 中制作 Java 的人员直接为您带来的 Java 开发人员音频节目。对话将讨论语言、JVM、OpenJDK、平台安全性、Loom 和 Panama 等创新项目,以及介于两者之间的一切内容)。
- 观看 Inside.java 新闻播报(一种将 Inside.Java 播客扩展为视频格式的视频节目)。
- 观看 YouTube 上的 Java(Oracle 相关 Java 视频集合,可帮助您提升 Java 专业知识)。
- 加入 OpenJDK 邮件列表(了解您最喜爱的 OpenJDK 项目进展的地方)。
- 在 Twitter 上关注 OpenJDK 和 Java(提供 Java 持续演进的更新和新闻的社交流)。
- 阅读 Java 杂志;Oracle 的数字 Java 出版物,提供由开发人员为开发人员撰写的技术文章
JavaOne 回归!
随着 Java 技术创新的持续交付,Oracle 自豪地带回 JavaOne,这是首屈一指的 Java 开发者大会。JavaOne 的重新推出证明了 Oracle 对其技术领导力和社区管理的承诺。
在今年的会议期间,与会者将能够沉浸在多个与 Java 19 相关的会议中,以及涵盖与 Java 语言和平台、云、数据库、人工智能和机器学习、工具、DevOps、Java 卡等相关的技术主题的深度和广度的内容。
在有限的时间内,开发人员可以使用“INSIDEJAVA”促销代码,享受零售价 400.00 美元的折扣。我们期待在今年的活动中见到您。立即注册:https://oracle.com/javaone