切換語言為:簡體

Java 13 主要引入了哪些新特性?

  • 爱糖宝
  • 2024-08-30
  • 2063
  • 0
  • 0

本文重點回顧 Java 13 引入的那些主要特性。

Java 13 主要引入了哪些新特性?

1 文字塊(預覽)

Java 13 引入了文字塊(Text Blocks)預覽功能,以簡化多行字串的表示。文字塊用三重引號 """ 定義,支援格式化和保留換行符,使得處理多行字串更直觀。它還自動去除了前導和尾隨空白,使字串更乾淨,避免了傳統跳脫字元的使用。這個預覽特性為開發者提供了更好的程式碼可讀性和維護性。

請看一段示例程式碼:

// src/main/java/TextBlocksTest.java
public class TextBlocksTest {

    public static void main(String[] args) {
        // Java 13 之前,多行字串的表示
        String text = "Goals of Text Blocks\n" +
                "Simplify the task of writing Java programs by making it easy to express strings that span several lines of source code, while avoiding escape sequences in common cases.\n" +
                "Enhance the readability of strings in Java programs that denote code written in non-Java languages.\n" +
                "Support migration from string literals by stipulating that any new construct can express the same set of strings as a string literal, and interpret the same escape sequences, and be manipulated like a string literal.";

        // Java 13,引入文字塊後,多行字串的表示
        String text1 = """
                Goals of Text Blocks
                Simplify the task of writing Java programs by making it easy to express strings that span several lines of source code, while avoiding escape sequences in common cases.
                Enhance the readability of strings in Java programs that denote code written in non-Java languages.
                Support migration from string literals by stipulating that any new construct can express the same set of strings as a string literal, and interpret the same escape sequences, and be manipulated like a string literal.
                """;
    }
}

可以看到,當我們想表示多行字串時,在 Java 13 之前,需要使用 \n 實現換行,使用 + 號對各行進行連線,可讀性不佳;而在 Java 13 引入了文字塊後,只需將一段文字使用 """ 圍起來即可,無需換行符,無需字串連線,且保留了原始文字段落的縮排格式。

2 動態 CDS 存檔

我們知道,CDS(Class Data Sharing,類資料共享)技術可以將類資料儲存在共享存檔檔案中,這樣在啟動程式時可以將該檔案直接進行記憶體對映,從而加速程式的啟動過程。我們知道Java 12 會預設生成包含基礎類的 CDS 存檔,並在啟動時自動載入這些存檔,從而省去了開發者手動建立存檔檔案的過程。

本次的 Java 13 中,引入了一項名為動態 CDS 存檔(Dynamic CDS Archiving)的新功能。其允許在應用程式執行時收集和記錄正在使用的類和庫,並將它們新增到已存在的 CDS 存檔中,從而實現動態的類共享。這樣,在下次啟動應用程式時,可以使用包含動態更新的 CDS 存檔,進一步加速應用程式的啟動。

動態 CDS 存檔功能的使用方式如下:

# 第一次啟動
java -XX:ArchiveClassesAtExit=app.jsa -cp app.jar Main
# 後續啟動
java -XX:SharedArchiveFile=app.jsa -cp app.jar Main

即在第一次啟動 Java 應用程式時,指定存檔檔案的位置,那麼程式在結束時即會生成指定的 JSA 存檔檔案;下次啟動該程式時,即可指定存檔檔案的位置,從而加速啟動過程。

3 ZGC:及時歸還未使用的記憶體(試驗)

Java 13 針對 ZGC (Garbage Collector) 新增了一個實驗性功能,即「解除未使用的記憶體」 (Uncommit Unused Memory)。這一功能的目的是在 ZGC 中動態地釋放那些已經分配但未被使用的記憶體,從而最佳化記憶體使用效率。具體來說,這個功能可以幫助 Java 虛擬機器在記憶體壓力較大時,透過解除已經分配但當前不需要的記憶體區域來減少實際的實體記憶體使用。這項功能仍處於實驗階段,未來可能會根據實際應用的反饋進行調整。

4 重新實現遺留 Socket API

Java 的 Socket API 最初在 1.0 中引入,雖然長期以來為 Java 應用程式提供了網路通訊支援,但其底層實現逐漸顯得過時,不夠高效且難以維護。Java 13 旨在重新設計和最佳化這些遺留 API,以滿足現代應用程式的需求。

主要改動如下:

  • Socket 類的重新實現

    對 Socket 類及其相關類進行了重新設計,改進了網路通訊的效率和靈活性。新的實現透過更直接的系統呼叫,減少了中間層的開銷。

  • 底層網路堆疊的最佳化

    最佳化了底層的網路通訊實現,使其能夠更好地利用現代作業系統的網路堆疊,從而提升整體效能。

  • 改進錯誤處理

    更新了異常處理機制,使得網路操作中的錯誤處理更加清晰和一致。

  • API 方法的更新

    對部分 API 方法進行了調整,增加了對現代網路需求的支援,同時簡化了介面的使用方式。

綜上,我們速覽了 Java 13 引入的主要特性或增強點。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.