Java 16 正式發佈

就在剛剛,Java 16正式發佈。java

Java 16 正式發佈

主要特性

Vector API(孵化)

提高了Java在CPU向量計算的性能,這是對大規模的張量計算的支持,提高了Java在AI領域的能力。編程

啓用了新的C++特性

容許在JDK中C++源代碼中使用 C ++ 14的新特性。安全

從 Mercurial 遷移到 Git

Git目前已經成爲代碼版本管理領域的絕對統治者,如今Java順應潮流也使用Git進行源代碼管理。併發

遷移到GitHub

OpenJDK的代碼如今有GitHub託管。ide

ZGC垃圾收集器

併發線程堆棧處理的垃圾收集器。函數

Unix域套接字通道

Unix域套接字對ServerSocketChannelSocketChannel的支持。工具

Alpine Linux Port

在x64和AArch64體系結構上,將JDK移植到Alpine Linux以及其它使用musl C庫的Linxu發行版上。post

Elastic Metaspace

Hotspot對類元數據的處理(metaspace-元空間)有了很大的改進。佔用空間減小了,如今能夠更快地將未使用的內存回收到操做系統。性能

Windows/AArch64 Port

將 JDK 移植到 Windows / AArch64平臺。學習

Foreign Linker API(孵化)

引入一個API,該API提供對本地代碼的靜態類型的純Java訪問。該API與Foreign-Memory API(JEP 393)一塊兒將大大簡化綁定到本機庫的本來容易出錯的過程。

Warnings for Value-Based Classes

將原始包裝器類指定爲基於值的類,並棄用其構造函數以將其刪除,從而提示新的棄用警告。提供有關在Java平臺中不正確嘗試在任何基於值的類的實例上進行同步的警告。

Packaging Tool

提供jpackage用於打包獨立Java應用程序的工具。

  • 支持本地打包格式,覺得最終用戶提供天然的安裝體驗。這些格式包括msiexe在Windows,pkgdmg在MacOS,以及debrpm在Linux上。
  • 容許在打包時指定啓動時間參數。
  • 能夠從命令行直接調用,也能夠經過ToolProviderAPI以編程方式調用。

Foreign-Memory Access API (第三次孵化)

引入一個API,容許Java程序安全有效地訪問Java堆以外的外部內存。

Pattern Matching for instanceof

在此以前 Java 中:

// 先判斷類型
if (obj instanceof String) {
    // 而後轉換
    String s = (String) obj;
    // 而後才能使用
}
複製代碼

自動匹配模式中:

if (obj instanceof String s) {
    // 若是類型匹配 直接使用
} else {
    // 若是類型不匹配則不能直接使用
}
複製代碼

Records Class

終於轉正了,Java類再也不又臭又長。原來是這樣的:

public class Range {

    private final int min;
    private final int max;

    public Range(int min, int max) {
        this.min = min;
        this.max = max;
    }

    public int getMin() {
        return min;
    }

    public int getMax() {
        return max;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Range range = (Range) o;
        return min == range.min && max == range.max;
    }

    @Override
    public int hashCode() {
        return Objects.hash(min, max);
    }

    @Override
    public String toString() {
        return "Range{" +
          "min=" + min +
          ", max=" + max +
          '}';
    }
}
複製代碼

如今能夠簡化爲:

public record Range(int min, int max) {}
複製代碼

以往的文章有詳細介紹:

默認狀況下嚴格封裝JDK

提升JDK的安全性和可維護性,跟普通開發者無關。

Sealed Classes

密封類,簡單說就是被final修飾的類,密封類不能被繼承,防止了惡意的派生。

另外Oracle發文對參與JDK 16貢獻的公司和我的進行了感謝。

Oracle要感謝爲ARM,SAP,Red Hat和騰訊等組織工做的開發人員所作的傑出貢獻。咱們也很高興看到較小的組織(例如Ampere Computing,Bellsoft,DataDog,Microdoc和獨立開發人員)的貢獻,他們共同貢獻了Java 16中3%的修復程序。

咱們一樣感謝許多經驗豐富的開發人員,他們審查了建議的更改,嘗試採用早期訪問版本並報告問題的早期採用者,以及在OpenJDK郵件列表中提供反饋的敬業專業人員。

參與JDK16處理Issues的組織

參考:《2020最新Java基礎精講視頻教程和學習路線!》
連接:https://juejin.cn/post/694036...

相關文章
相關標籤/搜索