自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java 21正式發(fā)布,15大特性一覽

開發(fā) 開發(fā)工具
Java 開發(fā)工具包(JDK) 21 是 Oracle 標(biāo)準(zhǔn) Java 實(shí)現(xiàn)的最新長期支持 (LTS) 版本,現(xiàn)已推出生產(chǎn)版本。比較實(shí)用的我看就5個,字符串模板、有序集合、記錄模式、switch的模式匹配、虛擬線程,其他一般也用不大到。

Java 開發(fā)工具包(JDK) 21 是 Oracle 標(biāo)準(zhǔn) Java 實(shí)現(xiàn)的最新長期支持 (LTS) 版本,現(xiàn)已推出生產(chǎn)版本。比較實(shí)用的我看就5個,字符串模板、有序集合、記錄模式、switch的模式匹配、虛擬線程,其他一般也用不大到。

1. JEP 430:字符串模板

對現(xiàn)有Java字符串處理進(jìn)行增強(qiáng)。包括兩個模板處理器STR和FMT。簡單示例:

STR模板處理器:

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

FMT模板處理器:

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。關(guān)系如下:

3.JEP 439:分代 ZGC

通過擴(kuò)展 ZGC 來為新對象和舊對象維護(hù)不同的代,從而提高應(yīng)用程序性能。年輕的對象往往會早逝;維護(hù)不同的代將允許 ZGC 更頻繁地收集年輕對象。使用分代 ZGC 運(yùn)行的應(yīng)用程序具有以下優(yōu)勢:分配停頓的風(fēng)險較低,所需的堆內(nèi)存開銷較低,并且垃圾收集 CPU 開銷較低。與非分代 ZGC 相比,這些好處應(yīng)該是可以實(shí)現(xiàn)的,而不會顯著降低吞吐量。

4.JEP 440:記錄模式

使用記錄模式增強(qiáng) Java 編程語言以解構(gòu)記錄值。記錄模式和類型模式可以嵌套,以實(shí)現(xiàn)強(qiáng)大的、聲明性的、可組合形式的數(shù)據(jù)導(dǎo)航和處理。

示例:

// Java 16
record 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 21
static void printSum(Object obj) {
    if (obj instanceof Point(int x, int y)) {
        System.out.println(x+y);
    }
}

5.JEP 441:switch的模式匹配

switch 通過表達(dá)式和語句的模式匹配增強(qiáng) Java 編程語言。擴(kuò)展模式匹配switch允許針對多個模式測試表達(dá)式,每個模式都有一個特定的操作,以便可以簡潔、安全地表達(dá)復(fù)雜的面向數(shù)據(jù)的查詢。

示例:

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:外部函數(shù)和內(nèi)存 API

通過高效地調(diào)用外部函數(shù)并安全地訪問外部內(nèi)存,該 API 使 Java 程序能夠調(diào)用本機(jī)庫并處理本機(jī)數(shù)據(jù),而沒有 JNI(Java 本機(jī)接口)的脆弱性和危險性。該 API 之前已在JDK 20 和JDK 19中預(yù)覽。JDK 21 預(yù)覽版中的改進(jìn)包括增強(qiáng)的布局路徑,其中包含用于取消引用地址布局的新元素。

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

使用未命名模式和未命名變量(可以初始化但不能使用)增強(qiáng) Java 語言,未命名模式匹配記錄組件而不說明組件的名稱或類型。兩者都由下劃線字符 表示_。

未命名模式示例:

a instanceof Point(_, int y)

未命名的模式變量:

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

8.JEP 444:虛擬線程

虛擬線程是輕量級線程,可以顯著減少編寫、維護(hù)和觀察高吞吐量并發(fā)應(yīng)用程序的工作量。

創(chuàng)建虛擬線程示例:

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

9.JEP 445:未命名類和實(shí)例Main方法

核心目的是幫助教學(xué)和學(xué)習(xí)。

以后寫 main 方法就變得簡單了,不需要一堆的修飾符。如下:

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

甚至可以不需要類聲明,代碼削減:

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

說明:未命名包中的類不能被命名包中的類顯式引用。

10.JEP 446:作用域值

將支持在線程內(nèi)和線程間共享不可變數(shù)據(jù)。它們優(yōu)于線程局部變量,特別是在使用大量虛擬線程時。線程局部變量具有設(shè)計(jì)缺陷,包括無約束的可變性、無限制的生命周期和昂貴的繼承。作用域值允許在大型程序中的組件之間安全地共享數(shù)據(jù),而無需求助于方法參數(shù)。

11.JEP 448:向量API

引入 API 來表達(dá)向量計(jì)算,在運(yùn)行時可靠地編譯為支持的 CPU 架構(gòu)上的最佳向量指令,從而實(shí)現(xiàn)優(yōu)于同等標(biāo)量計(jì)算的性能。

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

目標(biāo)是在未來版本中刪除該端口,原因是最后一個支持 32 位操作的 Windows 操作系統(tǒng) Windows 10 將于 2025 年 10 月結(jié)束生命周期。

13.JEP 451:準(zhǔn)備禁止動態(tài)加載代理

在 JDK 21 中,計(jì)劃要求動態(tài)加載代理必須得到應(yīng)用程序所有者的批準(zhǔn),就像代理啟動時加載所要求的那樣。此更改將使 Java 平臺更接近默認(rèn)完整性。

14.JEP 452:密鑰封裝機(jī)制 API

該提案的目標(biāo)之一是使應(yīng)用程序能夠使用 KEM 算法,例如 RSA 密鑰封裝機(jī)制 (RSA-KEM)、橢圓曲線集成加密方案 (ECIES) 以及美國國家標(biāo)準(zhǔn)與技術(shù)研究院 (NIST) 的候選算法后量子密碼學(xué)標(biāo)準(zhǔn)化過程。另一個目標(biāo)是允許在傳輸層安全 (TLS) 等更高級別協(xié)議和混合公鑰加密 (HPKE) 等加密方案中使用 KEM。安全提供商將能夠以 Java 代碼或本機(jī)代碼實(shí)現(xiàn) KEM 算法,并包括RFC 9180中定義的 Diffie-Hellman KEM (DHKEM) 的實(shí)現(xiàn)。

15.JEP 453:結(jié)構(gòu)化并發(fā)

通過結(jié)構(gòu)化并發(fā) API 簡化了并發(fā)編程,將在不同線程中運(yùn)行的相關(guān)任務(wù)組視為單個工作單元。這簡化了錯誤處理和取消,提高了可靠性并增強(qiáng)了可觀察性。結(jié)構(gòu)化并發(fā)之前在JDK 20JDK 19中孵化,分別于 2022 年 3 月和 2022 年 9 月發(fā)布;它將作為java.util.concurrent包中的預(yù)覽 API。這次唯一顯著的變化是該StructuredTaskScope::Fork(…)方法返回 Subtask而不是 Future。結(jié)構(gòu)化并發(fā)的目標(biāo)包括推廣一種并發(fā)編程風(fēng)格,可以消除因取消和關(guān)閉而產(chǎn)生的常見風(fēng)險,例如線程泄漏和取消延遲,以及提高并發(fā)代碼的可觀察性。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2024-06-28 11:39:21

2011-05-26 10:27:37

Fedora 15

2010-07-27 09:34:15

FreeBSD 8.1

2017-09-22 14:04:33

前端Node.js新特性

2010-05-11 13:50:26

Scala

2010-07-20 10:19:06

Wine 1.2

2017-10-24 14:57:12

前端Vue 2.5新功能特性

2013-08-12 14:25:27

2011-10-19 08:52:59

Android 4.0新特性

2009-09-28 10:58:31

Google新搜索特性

2013-10-18 14:23:21

Ubuntu 13.1Kbuntu 13.1

2009-07-29 09:40:02

Flex 4

2009-07-27 14:19:01

Eclipse JDT

2012-10-23 12:22:35

獨(dú)立版本W(wǎng)indows全新的Metro界面

2010-06-01 09:52:27

jQuery Tool

2021-12-15 19:31:51

Windows 11操作系統(tǒng)微軟

2011-05-23 10:29:31

Fedora 15

2013-06-13 10:14:33

2011-05-23 17:30:52

Ubuntu 11.1

2021-09-14 12:47:13

微軟Windows 10Windows
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號