当前位置:首页 > 科技  > 软件

Java 21正式发布,15大特性一览

来源: 责编: 时间:2023-09-21 20:47:41 199观看
导读Java 开发工具包(JDK) 21 是 Oracle 标准 Java 实现的最新长期支持 (LTS) 版本,现已推出生产版本。比较实用的我看就5个,字符串模板、有序集合、记录模式、switch的模式匹配、虚拟线程,其他一般也用不大到。1. JEP 430:字

Java 开发工具包(JDK) 21 是 Oracle 标准 Java 实现的最新长期支持 (LTS) 版本,现已推出生产版本。比较实用的我看就5个,字符串模板、有序集合、记录模式、switch的模式匹配、虚拟线程,其他一般也用不大到。oD828资讯网——每日最新资讯28at.com

oD828资讯网——每日最新资讯28at.com

1. JEP 430:字符串模板

对现有Java字符串处理进行增强。包括两个模板处理器STR和FMT。简单示例:oD828资讯网——每日最新资讯28at.com

STR模板处理器:oD828资讯网——每日最新资讯28at.com

String firstName = "Bill";String lastName  = "Duck";String fullName  = STR."/{firstName} /{lastName}";| "Bill Duck"String sortName  = STR."/{lastName}, /{firstName}";| "Duck, Bill"

FMT模板处理器:oD828资讯网——每日最新资讯28at.com

String table = FMT."""    Description     Width    Height     Area    %-12s/{zone[0].name}  %7.2f/{zone[0].width}  %7.2f/{zone[0].height}     %7.2f/{zone[0].area()}    %-12s/{zone[1].name}  %7.2f/{zone[1].width}  %7.2f/{zone[1].height}     %7.2f/{zone[1].area()}    %-12s/{zone[2].name}  %7.2f/{zone[2].width}  %7.2f/{zone[2].height}     %7.2f/{zone[2].area()}    /{" ".repeat(28)} Total %7.2f/{zone[0].area() + zone[1].area() + zone[2].area()}    """;| """| Description     Width    Height     Area| Alfa            17.80    31.40      558.92| Bravo            9.60    12.40      119.04| Charlie          7.10    11.23       79.73|                              Total  757.69| """

2.JEP 431:有序集合

提供了SequencedCollection、SequencedSet、SequencedMap。关系如下:oD828资讯网——每日最新资讯28at.com

oD828资讯网——每日最新资讯28at.com

3.JEP 439:分代 ZGC

通过扩展 ZGC 来为新对象和旧对象维护不同的代,从而提高应用程序性能。年轻的对象往往会早逝;维护不同的代将允许 ZGC 更频繁地收集年轻对象。使用分代 ZGC 运行的应用程序具有以下优势:分配停顿的风险较低,所需的堆内存开销较低,并且垃圾收集 CPU 开销较低。与非分代 ZGC 相比,这些好处应该是可以实现的,而不会显着降低吞吐量。oD828资讯网——每日最新资讯28at.com

4.JEP 440:记录模式

使用记录模式增强 Java 编程语言以解构记录值。记录模式和类型模式可以嵌套,以实现强大的、声明性的、可组合形式的数据导航和处理。oD828资讯网——每日最新资讯28at.com

示例:oD828资讯网——每日最新资讯28at.com

// Java 16record Point(int x, int y) {}static void printSum(Object obj) {    if (obj instanceof Point p) {        int x = p.x();        int y = p.y();        System.out.println(x+y);    }}// Java 21static void printSum(Object obj) {    if (obj instanceof Point(int x, int y)) {        System.out.println(x+y);    }}

5.JEP 441:switch的模式匹配

switch 通过表达式和语句的模式匹配增强 Java 编程语言。扩展模式匹配switch允许针对多个模式测试表达式,每个模式都有一个特定的操作,以便可以简洁、安全地表达复杂的面向数据的查询。oD828资讯网——每日最新资讯28at.com

示例:oD828资讯网——每日最新资讯28at.com

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);        default        -> obj.toString();    };}
static void testFooBarNew(String s) {    switch (s) {        case null         -> System.out.println("Oops");        case "Foo", "Bar" -> System.out.println("Great");        default           -> System.out.println("Ok");    }}

6.JEP 442:外部函数和内存 API

通过高效地调用外部函数并安全地访问外部内存,该 API 使 Java 程序能够调用本机库并处理本机数据,而没有 JNI(Java 本机接口)的脆弱性和危险性。该 API 之前已在JDK 20 和JDK 19中预览。JDK 21 预览版中的改进包括增强的布局路径,其中包含用于取消引用地址布局的新元素。oD828资讯网——每日最新资讯28at.com

7.JEP 443:未命名模式和变量

使用未命名模式和未命名变量(可以初始化但不能使用)增强 Java 语言,未命名模式匹配记录组件而不说明组件的名称或类型。两者都由下划线字符 表示_。oD828资讯网——每日最新资讯28at.com

未命名模式示例:oD828资讯网——每日最新资讯28at.com

a instanceof Point(_, int y)

未命名的模式变量:oD828资讯网——每日最新资讯28at.com

r instanceof Point _r instanceof ColoredPoint(Point(int x, int _), Color _)

8.JEP 444:虚拟线程

虚拟线程是轻量级线程,可以显著减少编写、维护和观察高吞吐量并发应用程序的工作量。oD828资讯网——每日最新资讯28at.com

创建虚拟线程示例:oD828资讯网——每日最新资讯28at.com

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {    IntStream.range(0, 10_000).forEach(i -> {        executor.submit(() -> {            Thread.sleep(Duration.ofSeconds(1));            return i;        });    });}

9.JEP 445:未命名类和实例Main方法

核心目的是帮助教学和学习。oD828资讯网——每日最新资讯28at.com

以后写 main 方法就变得简单了,不需要一堆的修饰符。如下:oD828资讯网——每日最新资讯28at.com

class HelloWorld {     void main() {         System.out.println("Hello, World!");    }}

甚至可以不需要类声明,代码削减:oD828资讯网——每日最新资讯28at.com

void main() {       System.out.println("Hello, World!");}

说明:未命名包中的类不能被命名包中的类显式引用。oD828资讯网——每日最新资讯28at.com

10.JEP 446:作用域值

将支持在线程内和线程间共享不可变数据。它们优于线程局部变量,特别是在使用大量虚拟线程时。线程局部变量具有设计缺陷,包括无约束的可变性、无限制的生命周期和昂贵的继承。作用域值允许在大型程序中的组件之间安全地共享数据,而无需求助于方法参数。oD828资讯网——每日最新资讯28at.com

11.JEP 448:向量API

引入 API 来表达向量计算,在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于同等标量计算的性能。oD828资讯网——每日最新资讯28at.com

12.JEP 449:弃用 Windows 32 位 x86 端口

目标是在未来版本中删除该端口,原因是最后一个支持 32 位操作的 Windows 操作系统 Windows 10 将于 2025 年 10 月结束生命周期。oD828资讯网——每日最新资讯28at.com

13.JEP 451:准备禁止动态加载代理

在 JDK 21 中,计划要求动态加载代理必须得到应用程序所有者的批准,就像代理启动时加载所要求的那样。此更改将使 Java 平台更接近默认完整性。oD828资讯网——每日最新资讯28at.com

14.JEP 452:密钥封装机制 API

该提案的目标之一是使应用程序能够使用 KEM 算法,例如 RSA 密钥封装机制 (RSA-KEM)、椭圆曲线集成加密方案 (ECIES) 以及美国国家标准与技术研究院 (NIST) 的候选算法后量子密码学标准化过程。另一个目标是允许在传输层安全 (TLS) 等更高级别协议和混合公钥加密 (HPKE) 等加密方案中使用 KEM。安全提供商将能够以 Java 代码或本机代码实现 KEM 算法,并包括RFC 9180中定义的 Diffie-Hellman KEM (DHKEM) 的实现。oD828资讯网——每日最新资讯28at.com

15.JEP 453:结构化并发

通过结构化并发 API 简化了并发编程,将在不同线程中运行的相关任务组视为单个工作单元。这简化了错误处理和取消,提高了可靠性并增强了可观察性。结构化并发之前在JDK 20JDK 19中孵化,分别于 2022 年 3 月和 2022 年 9 月发布;它将作为java.util.concurrent包中的预览 API。这次唯一显著的变化是该StructuredTaskScope::Fork(…)方法返回 Subtask而不是 Future。结构化并发的目标包括推广一种并发编程风格,可以消除因取消和关闭而产生的常见风险,例如线程泄漏和取消延迟,以及提高并发代码的可观察性。oD828资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10896-0.htmlJava 21正式发布,15大特性一览

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 用 Rust 编码?这是 JetBrains 的新 IDE

下一篇: 这种方法可以解决开发中的重复“造轮子”

标签:
  • 热门焦点
Top