Java SE 20 发布

经过六个月的开发,Oracle 发布了 Java SE 20(Java Platform, Standard Edition 20),它使用 OpenJDK 开源项目作为参考实现。 除了删除了一些已弃用的功能外,Java SE 20 保持与以前版本的 Java 平台的向后兼容性——大多数以前编写的 Java 项目在新版本下运行时仍然可以不加修改地运行。 Java SE 20(JDK、JRE 和 Server JRE)的可安装版本已为 Linux(x86_64、AArch64)、Windows(x86_64)和 macOS(x86_64、AArch64)准备。 由 OpenJDK 项目开发的 Java 20 参考实现在 GPLv2 许可下完全开放,具有 GNU ClassPath 例外,允许动态链接到商业产品。

Java SE 20 被归类为常规支持版本,并将继续接收更新,直到下一个版本。 长期支持 (LTS) 分支应该是 Java SE 17,它将继续接收更新直到 2029 年。 让我们提醒您,从Java 10发布开始,该项目切换到了新的开发流程,这意味着新版本的形成周期更短。 现在,新功能是在一个不断更新的主分支中开发的,其中包括现成的更改,并且每六个月从该分支分支一次以稳定新版本。

Java 20 的新特性包括:

  • 初步支持 Scoped Values,允许跨线程共享不可变数据以及子线程之间高效交换数据(值是继承的)。 正在开发 Scoped Values 来取代线程局部变量机制,并且在使用大量虚拟线程(数千或数百万线程)时效率更高。 作用域值和线程局部变量之间的主要区别在于,前者只写入一次,以后不能更改,并且仅在线程执行期间保持可用。 类服务器 { 最终静态 ScopedValue CURRENT_USER = new ScopedValue(); voidserve(Request request, Response response) { var level = (request.isAuthorized()? ADMIN : GUEST); } var user = new User(级别); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(请求, 响应)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) 抛出新的 InvalidUserException(); 返回新的 DBConnection(...); } }
  • 添加了记录模式的第二个预览,扩展了 Java 16 中引入的模式匹配功能来解析记录类的值。 例如: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • 在“switch”语句中添加了模式匹配的第四种初步实现,允许“case”标签使用不精确的值,而是一次性覆盖一系列值的灵活模式,而以前必须使用繁琐的模式“if...else”表达式链。 static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); } case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); 默认 -> o.toString(); }; }
  • 添加了 FFM(外部函数和内存)API 的第二个初步实现,它允许您通过调用外部库中的函数并访问 JVM 外部的内存来组织 Java 程序与外部代码和数据的交互。
  • 添加了虚拟线程的第二个预览,它是轻量级线程,可以大大简化高性能多线程应用程序的编写和维护。
  • 添加了第二个用于结构化并行性的实验性 API,该 API 通过将不同线程中运行的多个任务视为单个块来简化多线程应用程序的开发。
  • 添加了 Vector API 的第五个预览版,提供了在 x86_64 和 AArch64 处理器上使用向量指令执行向量计算的函数,并允许同时将运算应用于多个值 (SIMD)。 与 HotSpot JIT 编译器中提供的标量操作自动向量化功能不同,新 API 可以显式控制并行数据处理的向量化。

来源: opennet.ru

添加评论