甲骨文发布Java 22,这个版本加入许多新功能,对语言本身、API、性能和JDK中的工具,都进行了强化。除了Java语言更具表达力,提升开发者编写程序代码的体验之外,也加入多项功能改善并行程序的运行性能,而重新设计的Vector API,也让矢量运算更加高效,满足日渐增加的矢量运算需求。
Java 22语言功能加入了未命名变量和模式JEP 456,这项改进是使用下底线字符来表示不使用的变量声明和嵌套模式,目的是要强化程序代码的可读性,有助于减少开发者犯错机会,尤其是在需要声明,但是又不使用的情况下,改善程序代码的可维护性。
在Java 22中构建子的前置陈述式JEP 447更新,让开发者拥有更多表达构建子行为自由。在子类别的构建子中,开发者可以于调用super之前加入不参照该实体(Instance)的陈述句,这代表现在于调用父类别构建子之前,可以执行一些逻辑或是初始化工作。这项预览功能让开发者在编写构建子时,拥有更大的灵活性和表达力,同时构建子在类别实体化过程,也能确保程序代码的安全性并以预期的顺序执行。
正在预览的字符串样板,则是补充了目前Java字符串常值(String Literal)和文本区块的功能,通过将字符串常值和嵌入式表达式结合在一起,产生专门的结果。简单来说,Java现在提供一种更简洁的方式,供开发者编写文本加上变量的字符串表示,能在字符串常值中直接插入表达式或是变量值,如此不仅提高程序代码的可读性,也让编写动态字符串内容Java程序更简单。
Foreign Function & Memory API是一个提高Java程序和外部程序代码、数据互通的新功能,该API让开发者可以安全地调用Foreign Function与内存。这边的Foreign Function泛指JVM外部的程序代码,而Foreign Memory则是不受JVM管理的内存。该API使Java程序能够调用像是C语言等原生函数库,同时还可访问外部内存,让Java程序方便地处理大量数据,或是与原生程序代码共享数据。
官方也对Java的Stream API进行强化。在Java中,Stream API是一种处理数据集合的高端工具,让开发者以声明的方式,进行复杂的数据处理和操作,虽然Stream API内置许多中介操作,但是开发者可能还是会遇到现有操作无法实现数据转换的情况,经强化的Stream API支持自订中介操作,使开发者可以根据需求实例需要的流媒体操作。
Java 22还加入了一项名为Scoped Values的功能,以改善不同线程间以及线程内部不可篡改数据的共享效率。这项功能引入了新的程序开发模型,开发者通过程序代码的语法结构,便可了解共享数据的生命周期,并且掌握数据在程序中的作用范围和时间。Java会确保只有合法的调用者,可以检索共享数据,这提高了程序的强健性,同时避免数据意外地被非目标程序代码访问。
甲骨文为了要简化Java并行(Concurrency)程序开发,尝试加入了结构化并行方法,目前正在孵化阶段。结构化并行将不同的线程中的相关任务组,视为单一工作单元,使得这些任务可以被视为一个整体,一起启动、管理和终止,而这将让开发者更容易管理错误和取消操作。一旦其中一项任务失败或需要取消,整个任务单元可以一致回应,减少开发者处理并行错误的复杂性。
另一个孵化阶段的功能是Vector API的更新,而这主要是改善Java中表达矢量运算的方式,有助于在支持的CPU架构上实现优化矢量指令,达到比等效纯量运算更好的性能。目前在x64和AArch64架构上都已经能提供可靠的执行时编译和稳定的性能。