柚子快報(bào)邀請碼778899分享:java JDK版本特性
柚子快報(bào)邀請碼778899分享:java JDK版本特性
目錄
一、名詞說明
1.1 LTS版本
1.2屬于LTS的JDK版本
二、JDK各版本特性
2.1 JDK8(2014-03, LTS)
2.2 JDK9(2017-09)
2.3 JDK10(2018-03)
2.4 JDK11(2018-09, LTS)
2.5 JDK12(2019-03)
2.6 JDK13(2019-09)
2.7 JDK14(2020-03)
2.8 JDK15(2020-09)
2.9 JDK16(2021-03)
2.10 JDK17(2021-09, LTS)
2.11 JDK18(2022-03)
2.12 JDK19(2022-09)
2.13 JDK20(2023-03)
2.14 JDK21 (2023-09, LTS)
2.15 JDK22 (2024-03)
三、相關(guān)文獻(xiàn)
3.1 Java中JDK8、JDK11、JDK17,該怎么選擇?
3.2 JDK各版本文檔以及遷移說明
3.3 Oracle Java SE支持路線圖|Oracle 中國
一、名詞說明
1.1 LTS版本
LTS,原名 Long-Term Support 長期支持,正常情況下 當(dāng) JDK 12 正式發(fā)布后 JDK 11 將失效,但是由于 JDK 11 是 LTS 版本,所以會延長支持更新至 2032 年。
LTS 版本更加注重穩(wěn)定性,安全性,性能改進(jìn),默認(rèn)支持是 8 年,其中 JDK 8 延長至 2030 年(16年),延長支持期間不再提供新的功能。
LTS 版本自 2021 年起,從 3 年發(fā)布一次更改為 2 年一次
1.2屬于LTS的JDK版本
JDK8, JDK11, JDK17, JDK21
二、JDK各版本特性
2.1 JDK8(2014-03, LTS)
接口默認(rèn)方法
允許在接口中定義默認(rèn)實(shí)現(xiàn)。
lambda表達(dá)式
引入了函數(shù)式編程的特性,使得代碼更加簡潔和靈活。
函數(shù)式接口streamAPI新的日期工具類Nashorn JavaScript 引擎
一個(gè)新的輕量級 JavaScript 運(yùn)行時(shí),允許在 JVM 上執(zhí)行 JavaScript 代碼。
性能改進(jìn)
JDK 8 在垃圾回收器和 JIT 編譯器方面進(jìn)行了優(yōu)化,提高了性能。
2.2 JDK9(2017-09)
主要:是API的優(yōu)化,如支持HTTP2的Client API、JVM采用G1為默認(rèn)垃圾收集器。
模塊化
即只加載應(yīng)用運(yùn)行需要的模塊
JShell
一個(gè)新的交互式命令行工具,允許開發(fā)者逐行執(zhí)行 Java 代碼,并立即看到結(jié)果。
改進(jìn)的Java doc 生成的Java doc符合H5標(biāo)準(zhǔn),支持API搜索HTTP/2 新的方式處理HTTP調(diào)用,用于替換 HttpURLConnection,并提供對WebSocket和HTTP/2的支持。改進(jìn)的 Stream API
增加了新的中間操作和終端操作,使得 Stream API 更加強(qiáng)大。
集合工廠方法
在 java.util.Collections 中增加了一些新的靜態(tài)工廠方法,用于創(chuàng)建不可修改的集合。
處理進(jìn)程
引入了 java.lang.ProcessHandle 類,提供了對操作系統(tǒng)進(jìn)程的更細(xì)粒度控制。
2.3 JDK10(2018-03)
主要:通過var關(guān)鍵字實(shí)現(xiàn)局部變量類型推斷,使Java語言變成弱類型語言、JVM的G1垃圾回收由單線程改成多線程并行處理,降低G1的停頓時(shí)間。
改進(jìn)的垃圾回收器 并行full gc的G1,通過并行Full GC, 改善G1的延遲。目前對G1的full GC的實(shí)現(xiàn)采用了單線程-清除-壓縮算法。JDK10開始使用并行化-清除-壓縮算法?;趯?shí)驗(yàn)Java的JIT編譯器 啟用基于Java的JIT編譯器Graal,它是JDK9中引入的Ahead-of-time(AOT)編譯器的基礎(chǔ)。局部變量類型推斷
在 JDK 10 中,局部變量的類型推斷(var 關(guān)鍵字)被引入,這使得代碼更加簡潔。
HTTP 客戶端 API
提供了一個(gè)新的 HTTP 客戶端 API,用于簡化 HTTP 請求的發(fā)送和處理。
2.4 JDK11(2018-09, LTS)
主要:對于JDK9和JDK10的完善,主要是對于Stream、集合等API的增強(qiáng)、新增ZGC垃圾收集器。
HttpClient增強(qiáng) 同時(shí)提供了同步調(diào)用和異步調(diào)用實(shí)現(xiàn)。JDK對http對調(diào)用支持已經(jīng)足夠強(qiáng),以前apache提供的httpComponents基本可以去除了。ZGC JDK11最矚目的特性,但目前是實(shí)驗(yàn)性質(zhì)的。目標(biāo)是GC暫停時(shí)間不會超過10ms,既能處理幾百兆的小堆,也能處理幾個(gè)T的大堆。完全支持Linux容器 JDK10開始,JVM可以識別當(dāng)前是否在容器中運(yùn)行,能接受容器設(shè)置的內(nèi)存限制和CPU限制。Flight Recorder
引入了 Flight Recorder,這是一個(gè)低開銷的事件記錄系統(tǒng),用于監(jiān)控和診斷 JVM 的性能問題。
Epsilon 垃圾回收器
作為一個(gè)實(shí)驗(yàn)性的垃圾回收器,Epsilon GC 旨在為某些特定的應(yīng)用場景提供更好的性能。
改進(jìn)的 AArch64(ARM64)支持
JDK 11 對 ARM64 架構(gòu)提供了更好的支持,使得 Java 應(yīng)用程序可以在更多的設(shè)備上運(yùn)行。
移除 Nashorn 引擎和 CORBA 模塊
這兩個(gè)特性在 JDK 11 中被移除,以減少 JDK 的體積和復(fù)雜性。
2.5 JDK12(2019-03)
主要:switch表達(dá)式語法擴(kuò)展、G1收集器優(yōu)化、新增Shenandoah GC垃圾回收算法。
優(yōu)化swich使用
2.6 JDK13(2019-09)
主要:ZGC優(yōu)化,釋放內(nèi)存還給操作系統(tǒng)、socket底層實(shí)現(xiàn)引入NIO。
優(yōu)化字符串拼接優(yōu)化Socket API
2.7 JDK14(2020-03)
gc相關(guān)
刪除CMS;棄用 ParallelScavenge + SerialOld GC 的垃圾回收算法組合;將 zgc 垃圾回收器移植到 macOS 和 windows 平臺。
instanceof擴(kuò)展NullPointerException打印信息增強(qiáng),定位錯(cuò)誤
2.8 JDK15(2020-09)
RMI Actiation被標(biāo)記為Deprecate,在JDK17中刪除。
RMI遠(yuǎn)程方法調(diào)用,在JDK1.2中引入,為分布式提供延遲加載方式,已被web服務(wù)器替代。
JEP 339 Edwards-Curve Digital Signature Algorithm (EdDSA) 實(shí)現(xiàn)了EdDSA橢圓曲線簽名算法。JEP 384 Records (Second Preview) 引入了Record類型,解決定義大量get/set方法的問題,可一定程度替代掉lomobok移除Nashorn JavaScipt引擎
2.9 JDK16(2021-03)
387: 彈性Metaspace功能可將未使用的HotSpot虛擬機(jī)的Class Metadata(Metaspace)占用的內(nèi)存更迅速的返回給操作系統(tǒng),從而減少M(fèi)etaspace的占用并簡化Metaspace的代碼以降低維護(hù)成本。388: 將JDK移植到Windows/AArch64平臺。392: 提供用于打包獨(dú)立的Java應(yīng)用程序的jpackage工具。
2.10 JDK17(2021-09, LTS)
主要:對前幾個(gè)版本的整合和完善。Spring 6和SpringBoot3需要JDK17。
JDK 內(nèi)部的強(qiáng)封裝,除了sun.misc.Unsafe等關(guān)鍵的內(nèi)部 API 外,用戶將不再可能通過單個(gè)命令行選項(xiàng)來 relax 對內(nèi)部元素的強(qiáng)封裝,這在 JDK 9 到 JDK 16 中是可行的。該計(jì)劃的目標(biāo)包括提高 JDK 的安全性和可維護(hù)性,并鼓勵(lì)開發(fā)人員從內(nèi)部元素遷移到標(biāo)準(zhǔn) API。刪除遠(yuǎn)程方法調(diào)用 (RMI) 激活機(jī)制,同時(shí)保留 RMI 的其余部分。刪除實(shí)驗(yàn)性 AOT 和 JIT 編譯器,它們幾乎沒有使用,但需要大量維護(hù)工作。該計(jì)劃要求維護(hù) Java 級別的 JVM 編譯器接口,以便開發(fā)人員可以繼續(xù)使用外部構(gòu)建的編譯器版本進(jìn)行 JIT 編譯。將 JDK 移植到 MacOS/AArch64 以響應(yīng) Apple 將其 Macintosh 計(jì)算機(jī)從 x64 轉(zhuǎn)換到 AArch64 的計(jì)劃(Apple M1處理器)。針對 MacOS/AArch64 的更改有可能破壞現(xiàn)有的 Linux/AArch64、Windows/AArch64 和 MacOS/x64 port,但這種風(fēng)險(xiǎn)可通過預(yù)集成測試來降低。棄用 Applet API 以進(jìn)行刪除。這個(gè) API 本質(zhì)上是無關(guān)緊要的,因?yàn)樗?Web 瀏覽器供應(yīng)商要么已經(jīng)取消了對 Java 瀏覽器插件的支持,要么已經(jīng)宣布了這樣做的計(jì)劃。Applet API 之前在 2017 年 9 月的 Java 9 中已被棄用,但并未刪除。Applet API徹底被刪除,最早java就是靠applet開始火的。棄用 Security Manager,準(zhǔn)備在未來版本中移除。追溯到 Java 1.0,Security Manager 一直是保護(hù)客戶端 Java 代碼的主要手段,很少用于保護(hù)服務(wù)器端代碼。該提案的一個(gè)目標(biāo)是評估是否需要新的 API 或機(jī)制來解決使用 Security Manager 的特定狹窄用例,例如阻塞System::exit。計(jì)劃要求棄用 Security Manager 以與舊 Applet API 一起刪除,該 API 也計(jì)劃在 JDK 17 中棄用。
2.11 JDK18(2022-03)
Javadoc中支持代碼片段
從JDK18開始,可以使用@snippet來生成注釋,且可以高亮某個(gè)代碼片段
默認(rèn)UTF-8字符編碼簡單的Web服務(wù)器
JDK18中提供了一個(gè)新命令jwebserver, 運(yùn)行這個(gè)命令可以啟動一個(gè)簡單的,最小化的靜態(tài)web服務(wù)器,默認(rèn)發(fā)布的是當(dāng)前目錄
使用方法句柄重新實(shí)現(xiàn)反射核心功能 JDK18改進(jìn)了java.lang.reflect.Method, Constructor的實(shí)現(xiàn)邏輯,使得性能更佳。 不涉及到API的變動,只要升級到該版本,就能享受到更好的性能?;ヂ?lián)網(wǎng)地址解析 SPI 對于互聯(lián)網(wǎng)地址解析 SPI,為主機(jī)地址和域名地址解析定義一個(gè) SPI,以便 java.net.InetAddress 可以使用平臺內(nèi)置解析器以外的解析器。
2.12 JDK19(2022-09)
405: Record記錄模式(預(yù)覽)422: Linux/RISC-V 端口424: 外部函數(shù)和內(nèi)存 API(預(yù)覽版)425: 虛擬線程(預(yù)覽)426: Vector API(第四孵化器)427: 開關(guān)的模式匹配(第三次預(yù)覽)428: 結(jié)構(gòu)化并發(fā)(孵化器)
2.13 JDK20(2023-03)
429:Scoped Values范圍值(孵化器)432:Record記錄模式(第二次預(yù)覽)433:開關(guān)的模式匹配(第四次預(yù)覽)434:外部函數(shù)和內(nèi)存 API(第二預(yù)覽版)436:虛擬線程(第二預(yù)覽版)437:結(jié)構(gòu)化并發(fā)(第二個(gè)孵化器)438:Vector API(第五孵化器)
2.14 JDK21 (2023-09, LTS)
430: 字符串模板(預(yù)覽)431: 有序集合439: 世代ZGC440: 記錄模式441: 開關(guān)的模式匹配442: 外部函數(shù)和內(nèi)存 API(第三次預(yù)覽版)443: 未命名模式和變量(預(yù)覽)444: 虛擬線程445: 未命名類和實(shí)例主要方法(預(yù)覽)446: 范圍值(預(yù)覽)448: Vector API(第六個(gè)孵化器)449: 棄用 Windows 32 位 x86 端口以進(jìn)行刪除451: 準(zhǔn)備禁止動態(tài)加載代理452: 密鑰封裝機(jī)制API453: 結(jié)構(gòu)化并發(fā)(預(yù)覽版)
2.15 JDK22 (2024-03)
423: G1 的區(qū)域固定447: super(…) 之前的語句(預(yù)覽)454: 外部函數(shù)和內(nèi)存 API456: 未命名變量和模式457: 類文件 API(預(yù)覽版)458: 啟動多文件源代碼程序459: 字符串模板(第二次預(yù)覽)460: Vector API(第七個(gè)孵化器)461: 流收集器(預(yù)覽)462: 結(jié)構(gòu)化并發(fā)(第二預(yù)覽版)463: 隱式聲明的類和實(shí)例主要方法(第二預(yù)覽版)464: 范圍值(第二次預(yù)覽版)
三、相關(guān)文獻(xiàn)
3.1 Java中JDK8、JDK11、JDK17,該怎么選擇?
Java中JDK8、JDK11、JDK17,該怎么選擇?-騰訊云開發(fā)者社區(qū)-騰訊云
3.2 JDK各版本文檔以及遷移說明
Java Platform, Standard Edition Documentation - Releases
3.3 Oracle Java SE支持路線圖|Oracle 中國
Oracle Java SE Support Roadmap | Oracle 中國
柚子快報(bào)邀請碼778899分享:java JDK版本特性
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。