jdk16是由甲骨文公司宣布推出的Java語言的軟件開發工具包,Java仍然是有史以來最成功的開發平臺之一,它基于不斷創新以滿足現代應用程序開發人員不斷變化的需求,而在此工具包中它包含了該平臺的17項新增強功能,能將進一步提高開發人員的生產力。該開發工具包 (JDK) 最終確定了 instanceof (JEP 394) 和Records (JEP 395) 的模式匹配,這是以前在 Java 14 中首次預覽的語言增強功能,不僅如此,開發人員還可以使用新的打包工具(JEP 392) 自行發布,其中包含了 Java 應用程序,以及探索三個孵化功能,矢量 API (JEP 338)、外部鏈接器 API (JEP 389) 和外部內存訪問 API (JEP 389),以及一項預覽功能,密封類 ( JEP 397)。
與上一版本相比,全新的jdk16功能更為強大,增加了多項新特性,比如提供了全新的jpackage工具,用于打包自包含的 Java 應用程序;改進內存管理以提高性能,現在支持并發線程堆棧處理,可以將ZGC線程堆棧處理從安全點移動到并發階段,從而消除了允許并發堆棧處理的最后一個重要瓶頸。還改進網絡以提高開發人員的生產力和靈活性,現在可以向 java.nio.channels 包中的套接字通道和服務器套接字通道 API 添加了對主要 UNIX 平臺和 Windows 中通用的 UNIX 域套接字的所有功能的支持。另外jdk16還解決未來不兼容的代碼,以及支持將 JDK移植到 Windows/AArch64等等。
ps:本次小編帶來的是jdk16.0.2 64位官方版,該版本是甲骨文公司推出的最新版本,并且下文有其詳細的安裝教程和環境變量配置,有需要的小伙伴快來下載使用吧。
軟件特征
1、338:Vector API(孵化器)
2、347:啟用 C++14 語言功能
3、357:從 Mercurial 遷移到 Git
4、369:遷移到 GitHub
5、376:ZGC:并發線程堆棧處理
6、380:Unix 域套接字通道
7、386:Alpine Linux 端口
8、387:彈性元空間
9、388:Windows/AArch64 端口
10、389:外鏈 API(孵化器)
11、390:基于值的類的警告
12、392:打包工具
13、393:外內存訪問API(第三孵化器)
14、394:instanceof 的模式匹配
15、395:記錄
16、396:默認情況下強封裝JDK內部
17、397:密封類(第二次預覽)
軟件亮點
一、語言增強首先在 JDK 14 中引入,在 JDK 16 中完成
1、JEP 394:instanceof 的模式匹配——通過對 instanceof 運算符的模式匹配來增強 Java 編程語言。
2、JEP 395:Records——通過記錄增強 Java 編程語言,記錄是充當不可變數據的透明載體的類。記錄可以被認為是名義元組。
二、提高開發人員生產力的新工具
JEP 392:打包工具——提供 jpackage 工具,用于打包自包含的 Java 應用程序。
三、改進內存管理以提高性能
1、JEP 387:Elastic Metaspace – 更迅速地將未使用的 HotSpot 類元數據(即元空間)內存返回給操作系統,減少元空間占用空間,并簡化元空間代碼以降低維護成本。
2、JEP 376:ZGC:并發線程堆棧處理——將 ZGC 線程堆棧處理從安全點移動到并發階段。這項工作消除了允許并發堆棧處理的最后一個重要瓶頸。
四、改進網絡以提高開發人員的生產力和靈活性
JEP 380:UNIX 域套接字通道- 向 java.nio.channels 包中的套接字通道和服務器套接字通道 API 添加了對在主要 UNIX 平臺和 Windows 中通用的 UNIX 域套接字的所有功能的支持。UNIX 域套接字用于同一主機上的進程間通信 (IPC)。它們在大多數方面類似于 TCP/IP 套接字,只是它們由文件系統路徑名而不是 Internet 協議 (IP) 地址和端口號尋址。
五、解決未來不兼容的代碼
1、JEP 396:默認強封裝 JDK 內部——在 JDK 9 中,我們強封裝了新的內部 API 元素,從而限制了對它們的訪問。然而,為了幫助遷移,JDK 9 故意選擇不在運行時強封裝 JDK 8 中存在的包的內容。 JDK 16 通過默認封裝 JDK 的大多數內部元素來收緊這一約束,除了關鍵的內部 API例如 sun.misc.Unsafe。最終用戶仍然可以選擇自 JDK 9 以來一直默認的寬松強封裝。這將鼓勵開發人員從使用內部元素遷移到使用標準 API,以便他們和他們的用戶都可以輕松升級到未來的 Java 版本。
2、JEP 390:基于值的類警告——將原始包裝類指定為基于值的,并棄用它們的構造函數以進行刪除,提示新的棄用警告。提供有關對 Java 平臺中任何基于值的類的實例進行同步的不當嘗試的警告。
六、孵化和預覽功能
1、JEP 338:矢量 API(孵化器) ——提供孵化器模塊 jdk.incubator.vector 的初始迭代,以表達矢量計算,這些計算在運行時可靠地編譯為支持的 CPU 架構上的**矢量硬件指令。
2、JEP 389:外部鏈接器 API(孵化器) ——引入了一個 API,它提供對原生代碼的靜態類型、純 Java 訪問。
3、JEP 393: Foreign-Memory Access API (Third Incubator) – 引入了一個 API,允許 Java 程序安全有效地訪問 Java 堆之外的外部內存。
4、JEP 397:密封類(第二次預覽) ——通過密封類和接口增強 Java 編程語言。密封類和接口限制哪些其他類或接口可以擴展或實現它們。
七、OpenJDK 貢獻者的改進
1、JEP 347:啟用 C++14 語言特性(在 JDK 源代碼中) ——允許在 JDK C++ 源代碼中使用 C++14 語言特性,并給出關于哪些特性可以在 HotSpot 代碼中使用的具體指導。
2、JEP 357:從 Mercurial 遷移到 Git – 將 OpenJDK 社區的源代碼存儲庫從 Mercurial (hg) 遷移到 Git。
3、JEP 369:遷移到 GitHub – 在 GitHub 上托管 OpenJDK 社區的 Git 存儲庫。
八、新端口在更多平臺上提供對 Java 的支持
1、JEP 386:Alpine Linux Port – 將 JDK 移植到 Alpine Linux,以及在 x64 和 AArch64 架構上使用 musl 作為主要 C 庫的其他 Linux 發行版。
2、JEP 388:Windows/Aarch64 端口——將 JDK移植到 Windows/AArch64。
軟件刪除的功能和選項
1、刪除了具有 1024 位密鑰的根證書( JDK-8243559 )
安全庫/java.security
以下具有弱 1024 位 RSA 公鑰的根證書已從cacerts密鑰庫中刪除:
+ alias name "thawtepremiumserverca [jdk]"
Distinguished Name: EMAILADDRESS=premium-server@thawte.com, CN=Thawte Premium Server CA, OU=Certification Services Division, O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA
+ alias name "verisignclass2g2ca [jdk]"
Distinguished Name: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 2 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
+ alias name "verisignclass3ca [jdk]"
Distinguished Name: OU=Class 3 Public Primary Certification Authority, O="VeriSign, Inc.", C=US
+ alias name "verisignclass3g2ca [jdk]"
Distinguished Name: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 3 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
+ alias name "verisigntsaca [jdk]"
Distinguished Name: CN=Thawte Timestamping CA, OU=Thawte Certification, O=Thawte, L=Durbanville, ST=Western Cape, C=ZA
2、刪除 java.awt.PeerFixer ( JDK-8253965 )
客戶端庫/java.awt
java.awt.PeerFixer此版本中已刪除非公共類。此類用于為 JDK 1.1.1 之前創建的 ScrollPane 對象提供反序列化支持。
3、刪除實驗特性 AOT 和 Graal JIT ( JDK-8255616 )
熱點/編譯器
Java Ahead-of-Time 編譯實驗工具 jaotc已被刪除。使用JEP295定義的 HotSpot VM 選項會 產生不支持的選項警告,否則將被忽略。
實驗性的基于 Java 的 JIT 編譯器 Graal JEP317已被刪除。嘗試使用它會產生一個 JVMCI 錯誤:JVMCI compiler 'graal' not found。
4、不推薦使用的跟蹤標志已過時,必須替換為統一的日志等效項( JDK-8256718 )
熱點/運行時
當在 Java 9 中添加統一日志時,許多跟蹤標志被棄用并映射到它們的統一日志等價物。這些標志現在已過時,將不再自動轉換以啟用統一日志記錄。要繼續獲得相同的日志輸出,您必須明確地將這些標志的使用替換為它們的統一日志等效項。
過時的選項
-XX:+TraceClassLoading
-XX:+TraceClassUnloading
-XX:+跟蹤異常
統一日志替換
-Xlog:class+load=info
-Xlog:class+unload=info
-Xlog:異常=信息
5、去除舊橢圓曲線( JDK-8235710 )
安全庫/javax.crypto
SunEC 提供程序不再支持以下已過時或未使用現代公式和技術實現的橢圓曲線:
secp112r1, secp112r2, secp128r1, secp128r2, secp160k1, secp160r1, secp160r2, secp192k1, secp192r1, secp224k1, secp224r1, secp256k1, sect113r1, sect113r2, sect131r1, sect131r2, sect163k1, sect163r1, sect163r2, sect193r1, sect193r2, sect233k1, sect233r1, sect239k1, sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1, X9.62 c2tnb191v1, X9.62 c2tnb191v2, X9.62 c2tnb191v3, X9.62 c2tnb239v1, X9.62 c2tnb239v2, X9.62 c2tnb239v3, X9.62 c2tnb359v1, X9.62 c2tnb431r1, X9.62 prime192v2, X9.62 prime192v3, X9.62 prime239v1, X9.62 prime239v2, X9.62 prime239v3, brainpoolP256r1 brainpoolP320r1, brainpoolP384r1, brainpoolP512r1
要繼續使用這些曲線中的任何一條,用戶必須找到第三方替代方案。




