近日,甲骨文正式发布Java 17,这是备受欢迎的编程语言和开发平台新推出的版本。Java 17提供了数千种性能、稳定性和安全性更新,以及14个JEP(JDKEnhancement Proposal,即JDK增强建议)来进一步优化Java语言和平台,从而帮助开发人员提高工作效率。
甲骨文每六个月如约发布新版本的Java,而Java 17是最新发布的长期支持(Long-Term Support, LTS)版本。此版本是甲骨文公司的工程师与全球Java开发人员社区的成员通过OpenJDK社区和JCP(Java Community Process)共同合作的成果。自三年前发布JDK 11 LTS发行版后,甲骨文已经实现了超过70项JEP。
提供更简单的许可证
甲骨文将从Oracle JDK 17发行版开始提供免费使用的许可证,直到下一个 LTS 版本推出一年后。甲骨文也将延续自2017年以来的做法,继续根据开源通用公共许可证 (GPL) 发布Oracle OpenJDK发行版。
增强对客户的长期支持
甲骨文与Java开发人员社区和JCP合力优化LTS计划,如果组织希望迁移到较新的Java LTS版本,他们将拥有更大的灵活性,并且可以更好地掌控时间。下一个LTS版本将会是Java 21,于2023年9月推出,LTS版本的发布周期将从现有的三年缩短至两年。
Oracle LTS和Java SE订阅的客户可以按自身计划迁移到Java 17。甲骨文将为客户提供Java 17的安全、性能和错误修复更新,至少到2029年9月。
甲骨文Java平台组开发副总裁Georges Saab表示:“在过去的三年里,许多开发人员都很喜欢这些新功能,我们看到生态系统真正适应了每六个月一次的发布节奏。Java开发人员目前面临的一大挑战是,他们的组织只允许使用最新的LTS版本。现在,LTS版本将改为每两年发布一次,组织较为保守的开发人员也可以选择和访问他们喜欢和想要使用的功能。”
IDC软件开发研究副总裁Arnal Dayaratna表示:“甲骨文正在做出改变,不仅将长期支持版本的发布周期改为两年,同时新推出许可证也更宽松,延长了生产环境的Oracle JDK免费使用期限,让Java社区获益无穷。因此,组织可以更灵活地管理云、本地和混合环境中复杂的现代应用程序开发和部署。”
加快Java在云中的采用
Java是一个成功的开发平台,以满足开发人员不断变化的需求为目标而持续进行创新。为了加速Java在云中的采用,甲骨文最近推出了Oracle Java管理服务(Oracle Java Management Service),这是一项新的Oracle云基础设施(OCI)原生服务,可帮助组织在本地或任何云端管理Java运行时和应用程序。
Oracle Java管理服务能够帮助客户了解整个企业中的Java部署,这涵盖了安装在企业环境中的所有Java版本,即在开发和生产中运行的Java版本。Oracle Java管理服务能够突出显示任何未计划运行的Java应用,并检查所有已安装的Java版本是否安装了最新的安全补丁,确保版本时时更新。
JDK 17增加了新的语言增强功能,对库进行更新,支持新款Apple计算机,移除和弃用旧功能,并且确保用户编写的Java代码在未来的JDK版本中可以继续正常工作。此外,JDK 17还提供语言功能预览版和孵化阶段的API,以收集来自Java社区的反馈。更新内容包括:
Java语言增强功能
· JEP 409:密封类 — 密封类和接口限制其他类或接口扩展或实现它们。此增强功能是ProjectAmber的又一项改进,旨在通过发展Java语言来提高开发人员的生产力。
对库进行更新和优化
· JEP 306:恢复始终严格的浮点语义——Java编程语言和Java虚拟机最初只有严格的浮点语义,从Java 1.2开始,为了适应当时硬件架构的限制,默认允许这些严格语义中的细微变化。现在不再需要这些变化,已在JEP 306删除。
· JEP 356:增强型伪随机数生成器——增加伪随机数生成器(PRNG)的新接口类型和实现方法,提高了不同PRNG的互操作性,并且易于根据需求请求算法,而不是对特定实现进行硬编码。
· JEP 382:新的macOS渲染管道——通过使用新的Apple Metal API为macOS实现Java 2D渲染管道,减少了JDK对已弃用的AppleOpenGLAPI的依赖。
支持新平台
· JEP 391:macOS AArch64端口——将JDK移植到macOS/AArch64平台,Java应用可以原生运行于基于Arm 64的新Apple Silicon计算机。
移除和弃用
· JEP 398:弃用即将移除的Applet API——所有Web浏览器供应商正在计划或已经停止支持Java浏览器插件。Applet API已于2017年9月在Java 9中弃用,但并未移除。
· JEP 407:移除RMI激活——移除远程方法调用(RMI)激活机制,保留其他RMI。
· JEP 410:移除实验性的AOT和JIT编译器——基于Java的提前(AOT)和即时(JIT)实验性编译器并未被广泛采用。作为一个选择性功能,AOT和JIT编译器已在JDK 16中移除,本次在JDK源代码中移除。
· JEP 411:弃用即将删除的安全管理器——从Java 1.0开始,安全管理器一直都不是保护客户端Java代码的主要手段,也很少用于保护服务器端代码。在未来的版本中会移除安全管理器,以消除大量维护负担,让Java平台能够向前发展。
面向未来的Java程序
· JEP 403:JDK内部强封装——用户再也不能像在JDK 9到JDK 16中一样通过单个命令行选项来放宽对内部元素的强封装。用户仍然可以访问现有的内部API ,但需要以命令行参数形式或JAR文件清单属性进行枚举,且每个包应该放宽封装。此更改将导致应用程序更安全,并减少对非标准、内部JDK实现细节的依赖。
未来JDK发行版的预览版和孵化器
· JEP 406:Switch模式匹配(预览版)——允许Switch表达式针对多个模式进行测试,每个模式都有特定的操作,从而简洁、安全地表达面向数据的复杂查询。
· JEP 412:外部函数和内存API(孵化阶段)——改进JDK 14和JDK 15中引入的孵化API,让Java程序与Java运行时之外的代码和数据进行互操作。通过有效调用外部函数(即JVM之外的代码),以及安全地访问外部内存,这些API可以调用本地库和处理本地数据,并且不受Java本机接口 (Java Native Interface, JNI) 的脆弱性和复杂性影响。这些API正在Project Panama中开发,目的是改进Java和非Java代码之间的交互性。
· JEP 414:矢量API(二次孵化阶段)——允许以一种在运行时,可靠地编译为支持的CPU架构上的最佳向量指令的方式表达向量计算,从而实现优于等效标量计算的性能。