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