Java 22 来了!

整理 | 屠敏
出品 | CSDN(ID:CSDNnews)

流水的编程语言,铁打的 Java。

不知不觉间,Java 迎来了其正式的 JDK 22 版本,这是一个短期版本,可以从 Oracle.com(https://www.oracle.com/java/technologies/downloads/)下载,将获得 Oracle 为期六个月的高级支持。

对此,Oracle 官方也发布了详尽的公告进行了分享。

JDK 22 提供了 12 项重要的增强功能,这些增强功能有自己的 JDK 增强提案 (JEP),其中包括 7 项预览功能和 1 项孵化功能。这些改进涉及 Java 语言、API、性能以及 JDK 中包含的工具:

JEP 423:G1 引入区域固定机制,降低 GC 延迟

G1 的区域固定旨在减少延迟,从而无需在 Java 本机接口 (JNI) 关键区域期间禁用垃圾收集 (GC)。这意味着使用 JNI 时,Java 线程无需在 G1 GC 操作完成之前等待,从而提高开发人员的工作效率。

JEP 447: super(...) 之前添加语句(预览)

Super(...) 之前的语句预览来自 Amber 项目,它与语言中的构造函数有关,允许在显式构造函数调用之前出现不引用所创建实例的语句。该功能带来:

  • 为开发人员提供了更大的自由度来表达构造函数的行为,使目前必须在辅助静态方法、辅助中间构造函数或构造函数参数中派生的逻辑得以更自然地放置。

  • 保留构造函数在类实例化过程中按自上而下的顺序运行的现有保证,确保子类构造函数中的代码不会干扰超类的实例化。

  • 无需对 JVM 进行任何更改。此 Java 语言功能仅依赖于 JVM 目前的能力,即验证和执行构造函数内显式构造函数调用之前出现的代码。

这是迄今为止 JDK 22 中唯一一个尚未在标准 Java 中预览或孵化的功能。

JEP 454: 外部函数与内存 API

这一功能之前已经在 JDK 19、JDK 20 和 JDK 22 中预览,现如今在 JDK 22 中已经最终确定。它允许 Java 程序与 Java 运行时之外的代码和数据互操作。通过有效调用外部函数(即 JVM 之外的代码)和安全访问外来内存(即 JVM 不管理的内存),API 使 Java 程序能够调用本地库和处理本地数据,而不会出现 JNI 的脆性和危险。

这项功能带来一些好处:

  • 生产力提升——用简洁、可读性强的纯 Java API 取代本地方法和 Java 本地接口 (JNI) 的脆弱机制。

  • 性能——提供对外部函数和内存的访问,其开销可与 JNI 和 sun.misc.Unsafe 相媲美,甚至更好。

  • 广泛的平台支持——在 JVM 运行的每个平台上都能发现和调用本地库。

  • 统一性——提供在多种内存(如本地内存、持久内存和托管堆内存)中对结构化和非结构化数据(大小不限)进行操作的方法。

  • 健全性——保证即使在多个线程之间分配和删除内存时,也不会出现 use-after-free 错误。

  • 完整性——允许程序对本地代码和数据执行不安全的操作,但默认情况下会向用户发出警告。

JEP 456: 未命名变量与模式

改进了需要但未使用变量声明或嵌套模式时的可读性。两者都用下划线字符表示。这一功能的目标包括:

  • 捕捉开发人员未使用给定绑定或 lambda 参数的意图,并强制执行该属性,以明确程序并减少出错机会。

  • 通过识别必须声明(如在 catch 子句中)但未使用的变量,提高所有代码的可维护性。

  • 许多个模式出现在一个 case 标签中,前提是它们都没有声明模式变量

  • 过消除不必要的嵌套类型模式,提高记录模式的可读性。

这项提供已经在 JDK 21 中预览,并在 JDK 22 中最终确定,无需更改。

JEP 457: 类文件 API(预览)

它的目的是为解析、生成和转换 Java 类文件提供标准 API。该 API 可使依赖它的框架和序自动支持最新 JDK 中的最新类文件,从而可快速、轻松地采用以类文件表示的新语言和虚拟机功能。

JEP 458: 启动多文件源代码程序

允许用户运行以多个 Java 源代码文件形式提供的程序,而无需首先对其进行编译。这一功能的目标是使小程序向大型程序的过渡更加渐进,提高开发人员的工作效率,使开发人员能够选择是否以及何时配置构建工具。

JEP 459: 字符串模板(第二次预览)

字符串模板是对 Java 现有字符串文字量和文本块的补充,它将文字文本与嵌入式表达式和模板处理器结合起来,从而产生专门的结果。

目标包括:

  • 通过轻松表达包含运行时计算值的字符串,简化了 Java 程序的编写。

  • 提高了混合文本和表达式的可读性,无论文本适合单行源代码(如字符串字面量)还是跨越多行源代码(如文本块)。

  • 通过支持对模板及其嵌入式表达式的值进行验证和转换,提高了由用户提供的值组成字符串并将其传递给其他系统(如构建数据库查询)的 Java 程序的安全性。

  • 允许 Java 库定义字符串模板中使用的格式化语法,从而保持灵活性。

  • 简化了接受以非 Java 语言编写的字符串(如 SQL、XML 和 JSON)的 API 的使用。

  • 无需通过中间字符串表示形式进行传输,即可创建由文字文本和嵌入式表达式计算得出的非字符串值。

JEP 460: 向量 API(第七个孵化器)

用于表达向量计算的 API,可在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于同等标量计算的性能。

该 API 提供了一种在 Java 中编写复杂向量算法的方法,它使用现有的 HotSpot 自动向量化算法,但采用了一种用户模型,使向量化更具可预测性和鲁棒性。

这一功能已在 Java 之前的版本中孵化,最早可追溯到 2021 年 3 月的 JDK 16。API 的目标包括:简洁明了、与平台无关、在 x64 AArch64 架构上提供可靠的运行时编译和性能。

JEP 461:流收集器(预览)

此功能增强了 Stream API,以支持自定义中间操作。这将允许流管道以现有内置中间操作难以实现的方式转换数据。

通过使流中的常见自定义操作,提高开发人员的工作效率和代码可读性。

JEP 462: 结构化并发(第二次预览)

借助 Project Loom 的结构化并发,可以通过 API 简化并发编程。该 API 将不同线程中运行的一组相关任务视为一个工作单元,从而简化了错误处理和提高了可靠性,并增强了可观察性。

JEP 463: 隐式声明的类和实例主方法(第二次预览)

学生可以编写自己的第一个 Java 程序,而无需了解专为大型程序设计的语言特性。学生无需使用单独的语言方言,就可以编写单类程序的精简声明,然后随着技能的提高,无缝扩展他们的程序,使用更高级的功能。

这一功能为 Java 编程提供了一个平滑的阶梯,使教师可以循序渐进地引入概念。同时帮助学生以简洁的方式编写基本程序,并随着技能的提高而优雅地扩展代码,以及减少编写脚本和命令行实用程序等简单程序的过程。

JEP 464: 作用域值(第二次预览)

实现线程内和线程间不可变数据的高效共享。它的目标主要包括:

  • 易用性——提供了一种编程模型,可在线程内共享数据,也可与子线程共享数据,从而简化数据流的推理。

  • 可理解性——使共享数据的生命周期从代码的语法结构中可见。

  • 稳健性——确保只有合法的调用者才能检索调用者共享的数据。

  • 性能——将共享数据视为不可变数据,允许大量线程共享,并实现运行时优化。

除了 JEP 中描述的上述更改外,发布说明中还列出了许多较小的更新,对此感兴趣的小伙伴不妨通过官方公告进行速览:https://blogs.oracle.com/java/post/the-arrival-of-java-22

此外,Oracle 也在公告中提到,Java 22 版本里,在标记为已修复的 2,251 个 JIRA 问题中,有不少是 Java 社区成员修复的,其中亚马逊、ARM、谷歌、华为、IBM、英特尔、ISCAS、微软、红帽、Rivos、SAP 和腾讯等组织开发者做出的显着贡献。

最后值得一提的是,正如文章伊始所述,JDK 22 是一个短期支持版本,升级也需谨慎。那么现在的你正在使用 Java 的哪个版本呢?

推荐阅读:

史上最大开源LLM,参数高达3140亿!马斯克如约开源Grok,10小时狂揽10000颗Star

50+国内外大模型专家齐聚,全球机器学习技术大会第二批嘉宾阵容公布!

分析了 500 万份工作,看看有多少正被 AI 取代?

4 月 25 ~ 26 日,由 CSDN 和高端 IT 咨询和教育平台 Boolan 联合主办的「全球机器学习技术大会」将在上海环球港凯悦酒店举行,特邀近 50 位技术领袖和行业应用专家,与 1000+ 来自电商、金融、汽车、智能制造、通信、工业互联网、医疗、教育等众多行业的精英参会听众,共同探讨人工智能领域的前沿发展和行业最佳实践。欢迎所有开发者朋友访问官网 http://ml-summit.org、点击「阅读原文」或扫码进一步了解详情。

相关推荐

  • OceanBase独立运营后首次亮相,谈了两件事
  • 7万字:2023腾讯云容器和函数计算最佳实践精选集上线,等你翻「阅」!
  • 40 张图搞懂分布式日志追踪,强大的traceId
  • 今日代码 PK | 使用 Optional 判空
  • 永久激活 GPT4.0 !无限使用!即将结束!
  • 全职开源四年,一切并没有那么简单。
  • Spring Boot集成Debezium快速入门demo
  • 博士申请 | 香港大学陈怡老师课题组招收计算机安全方向全奖博士/博后
  • CVPR 2024 | 通过细粒度人类反馈对齐数据,提高多模态大模型可信度
  • TPAMI 2024 | 针对节点的融合全局-局部信息的图谱滤波方法
  • 多领域文献阅读超越GPT-4!深势科技发布科学文献多模态大模型Uni-SMART技术报告
  • 警惕发布前夕的“致命遗忘”
  • 邀你探索金融、教育、法律及医疗行业的大模型创新应用,AICon 2024 即将拉开帷幕
  • Java 22 正式发布
  • 微软开抢年收入上亿美元的 Redis 饭碗?开源性能遥遥领先的 Garnet:无需修改,Redis 客户端可直接接入
  • 风控也在用大模型了
  • 一次性支持 200 万字无损上下文!Kimi智能助手玩了个大的——月之暗面「登月」最新进展!
  • 今日arXiv最热NLP大模型论文:大模型RAG新宠!浙江大学发布自反馈检索增强方法
  • 无人驾驶飞机上架淘宝!?亿航智能首款国产「空中的士」网上开售,股价一度飞升 30%
  • 如何从头开始编写LoRA代码,这有一份教程