Java 16 正式發(fā)布,已經(jīng)是Java 8的兩倍了
就在剛剛,Java 16正式發(fā)布。
Java 16 正式發(fā)布
主要特性
Vector API(孵化)
提升了Java在CPU向量計算的性能,這是對大規(guī)模的張量計算的支持,提升了Java在AI領域的能力。
啟用了新的C++特性
允許在JDK中C++源代碼中使用 C ++ 14的新特性。
從 Mercurial 遷移到 Git
Git目前已經(jīng)成為代碼版本管理領域的絕對統(tǒng)治者,現(xiàn)在Java順應潮流也使用Git進行源代碼管理。
遷移到GitHub
OpenJDK的代碼現(xiàn)在由GitHub托管。
ZGC垃圾收集器
并發(fā)線程堆棧處理的垃圾收集器。
Unix域套接字通道
Unix域套接字對ServerSocketChannel和SocketChannel的支持。
Alpine Linux Port
在x64和AArch64體系結(jié)構上,將JDK移植到Alpine Linux以及其它使用musl C庫的Linxu發(fā)行版上。
Elastic Metaspace
Hotspot對類元數(shù)據(jù)的處理(metaspace-元空間)有了很大的改進。占用空間減少了,現(xiàn)在可以更快地將未使用的內(nèi)存回收到操作系統(tǒng)。
Windows/AArch64 Port
將 JDK 移植到 Windows / AArch64平臺。
Foreign Linker API(孵化)
引入一個API,該API提供對本地代碼的靜態(tài)類型的純Java訪問。該API與Foreign-Memory API(JEP 393)一起將大大簡化綁定到本機庫的原本容易出錯的過程。
Warnings for Value-Based Classes
將原始包裝器類指定為*基于值的類,*并棄用其構造函數(shù)以將其刪除,從而提示新的棄用警告。提供有關在Java平臺中不正確嘗試在任何基于值的類的實例上進行同步的警告。
Packaging Tool
提供jpackage用于打包獨立Java應用程序的工具。
- 支持本地打包格式,以為最終用戶提供自然的安裝體驗。這些格式包括msi與exe在Windows,pkg并dmg在MacOS,以及deb和rpm在Linux上。
- 允許在打包時指定啟動時間參數(shù)。
- 可以從命令行直接調(diào)用,也可以通過ToolProviderAPI以編程方式調(diào)用。
Foreign-Memory Access API (第三次孵化)
引入一個API,允許Java程序安全有效地訪問Java堆之外的外部內(nèi)存。
Pattern Matching for instanceof
在此之前 Java 中:
- // 先判斷類型
- if (obj instanceof String) {
- // 然后轉(zhuǎn)換
- String s = (String) obj;
- // 然后才能使用
- }
自動匹配模式中:
- if (obj instanceof String s) {
- // 如果類型匹配 直接使用
- } else {
- // 如果類型不匹配則不能直接使用
- }
Records Class
終于轉(zhuǎn)正了,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 +
- '}';
- }
- }
現(xiàn)在可以簡化為:
- public record Range(int min, int max) {}
以往的文章有詳細介紹。Java 14 新特性之JEP 359: Records(Preview)
默認情況下嚴格封裝JDK
提高JDK的安全性和可維護性,跟普通開發(fā)者無關。
Sealed Classes
密封類,簡單說就是被final修飾的類,密封類不能被繼承,防止了惡意的派生。
另外Oracle發(fā)文對參與JDK 16貢獻的公司和個人進行了感謝。
Oracle要感謝為ARM,SAP,Red Hat和騰訊等組織工作的開發(fā)人員所做的杰出貢獻。我們也很高興看到較小的組織(例如Ampere Computing,Bellsoft,DataDog,Microdoc和獨立開發(fā)人員)的貢獻,他們共同貢獻了Java 16中3%的修復程序。
我們同樣感謝許多經(jīng)驗豐富的開發(fā)人員,他們審查了建議的更改,嘗試采用早期訪問版本并報告問題的早期采用者,以及在OpenJDK郵件列表中提供反饋的敬業(yè)專業(yè)人員。
參與JDK16處理Issues的組織
本文轉(zhuǎn)載自微信公眾號「碼農(nóng)小胖哥」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)小胖哥公眾號。