Java18(2022.3) 將 UTF-8 指定為標準 Java API 的預設字元集 提供支持靜態文件的最小 Web 伺服器命令行工具jwebserver 定義了一個全新的 SPI(service-provider interface),用於主要名稱和地址的解析 棄用 Finalization ...
目錄
- Java18(2022.3)
- Java17(2021.9)(LTS版本)
- Java16(2021.3)
- Java15(2020.9)
- Java14(2020.3)
- Java13(2019.9)
- Java12(2019.3)
- Java11(2018.9)(LTS版本)
- Java10(2018.3)
- Java9(2017.9)
- Java8(2014.3)(LTS版本)
- Java7(2011.7)(LTS版本)
- Java6(2006)
- Java 5(2004)
- java1.4(2004)
- java1.3 (2000)
- java1.2 (1998)
- java1.1 (1997)
- java1.0 (1996 初代版本)
Java18(2022.3)
- 將 UTF-8 指定為標準 Java API 的預設字元集
- 提供支持靜態文件的最小 Web 伺服器命令行工具jwebserver
- 定義了一個全新的 SPI(service-provider interface),用於主要名稱和地址的解析
- 棄用 Finalization
Java17(2021.9)(LTS版本)
- Free Java License
- JDK 17 將取代 JDK 11 成為下一個長期支持版本
- Spring 6 和 Spring Boot 3需要JDK17
- 移除實驗性的 AOT 和 JIT 編譯器
- 恢復始終執行嚴格模式 (Always-Strict) 的浮點定義
- 正式引入密封類sealed class,限制抽象類的實現
- 統一日誌非同步刷新,先將日誌寫入緩存,然後再非同步刷新
雖然JDK17也是一個LTS版本,但是並沒有像JDK8和JDK11一樣引入比較突出的特性,主要是對前幾個版本的整合和完善。
Java16(2021.3)
- 允許在 JDK C ++源代碼中使用 C ++ 14功能
- ZGC性能優化,去掉ZGC線程堆棧處理從安全點到併發階段
- 增加 Unix 域套接字通道
- 彈性元空間能力
- 提供用於打包獨立 Java 應用程式的 jpackage 工具
JDK16相當於是將JDK14、JDK15的一些特性進行了正式引入,如instanceof模式匹配(Pattern matching)、record的引入等最終到JDK16變成了final版本。
Java15(2020.9)
- EdDSA 數字簽名演算法
- Sealed Classes(封閉類,預覽),通過sealed關鍵字修飾抽象類限定只允許指定的子類才可以實現或繼承抽象類,避免抽象類被濫用。
- Hidden Classes(隱藏類)
- 移除 Nashorn JavaScript引擎
- 改進java.net.DatagramSocket 和 java.net.MulticastSocket底層實現
Java14(2020.3)
- instanceof模式匹配,instanceof類型匹配語法簡化,可以直接給對象賦值,如if(obj instanceof String str),如果obj是字元串類型則直接賦值給了str變數
- 引入Record類型,類似於Lombok 的@Data註解,可以向Lombok一樣自動生成構造器、equals、getter等方法;
- Switch 表達式-標準化
- 改進 NullPointerExceptions提示信息,列印具體哪個方法拋的空指針異常,避免同一行代碼多個函數調用時無法判斷具體是哪個函數拋異常的困擾,方便異常排查;
- 刪除 CMS 垃圾回收器
Java13(2019.9)
- Switch 表達式擴展(引入 yield 關鍵字);switch表達式增加yield關鍵字用於返回結果,作用類似於return,如果沒有返回結果則使用break。
- 文本塊升級 """;引入了文本塊,可以使用"""三個雙引號表示文本塊,文本塊內部就不需要使用換行的轉義字元。
- SocketAPI 重構;(Socket的底層實現優化,引入了NIO)
- FileSystems.newFileSystem新方法
- 增強 ZGC 釋放未使用記憶體;(ZGC優化,將標記長時間空閑的堆記憶體空間返還給操作系統,保證堆大小不會小於配置的最小堆記憶體大小,如果堆最大和最小記憶體大小設置一樣,則不會釋放記憶體還給操作系統。)
重要特性:ZGC優化,釋放記憶體還給操作系統、socket底層實現引入NIO。
Java12(2019.3)
- Switch 表達式擴展,可以有返回值
- 新增NumberFormat對複雜數字的格式化
- 字元串支持transform、indent操作
- 新增方法Files.mismatch(Path, Path)
- Teeing Collector
- 支持unicode 11
- Shenandoah GC,新增的GC演算法
- G1收集器的優化,將GC的垃圾分為強制部分和可選部分,強制部分會被回收,可選部分可能不會被回收,提高GC的效率
重要特性:switch表達式語法擴展、G1收集器優化、新增Shenandoah GC垃圾回收演算法。
Java11(2018.9)(LTS版本)
- 增加一些符串處理方法
- 用於 Lambda 參數的局部變數語法
- Http Client重寫,支持HTTP/1.1和HTTP/2 ,也支持 websockets
- 可運行單一Java源碼文件,如:java Test.java
- ZGC:可伸縮低延遲垃圾收集器,(ZGC可以看做是G1之上更細粒度的記憶體管理策略。由於記憶體的不斷分配回收會產生大量的記憶體碎片空間,因此需要整理策略防止記憶體空間碎片化,在整理期間需要將對於記憶體引用的線程邏輯暫停,這個過程被稱為"Stop the world"。只有當整理完成後,線程邏輯才可以繼續運行。(並行回收))
- 支持 TLS 1.3 協議
- Flight Recorder(飛行記錄器),基於OS、JVM和JDK的事件產生的數據收集框架
- 對Stream、Optional、集合API進行增強
重要特性:對於JDK9和JDK10的完善,主要是對於Stream、集合等API的增強、新增ZGC垃圾收集器。
Java10(2018.3)
- 局部變數類型推斷,(類似JS可以通過var來修飾局部變數,編譯之後會推斷出值的真實類型)
- 不可變集合的改進
- 並行全垃圾回收器 G1,來優化G1的延遲
- 線程本地握手,(允許在不執行全局VM安全點的情況下執行線程回調,可以停止單個線程,而不需要停止所有線程或不停止線程)
- Optional新增orElseThrow()方法
- 類數據共用
- Unicode 語言標簽擴展
- 根證書
重要特性:通過var關鍵字實現局部變數類型推斷,使Java語言變成弱類型語言、JVM的G1垃圾回收由單線程改成多線程並行處理,降低G1的停頓時間。
Java9(2017.9)
- 模塊化
- 提供了List.of()、Set.of()、Map.of() 和 Map.ofEntries() 等工廠方法
- 介面支持私有方法
- Optional 類改進
- 多版本相容Jar包
- JShell工具
- try-with-resources的改進
- Stream API的改進
- 設置G1為JVM預設垃圾收集器
- 支持http2.0和websocket的API
重要特性:主要是API的優化,如支持HTTP2的Client API、JVM採用G1為預設垃圾收集器。
Java8(2014.3)(LTS版本)
- lambada表達式
- 函數式介面
- 方法引用
- 預設方法
- Stream API 對元素流進行函數式操作
- Optional 解決NullPointerException
- Date Time API
- 重覆註解 @Repeatable
- Base64
- 使用元空間Metaspace代替持久代(PermGen space)
Java7(2011.7)(LTS版本)
- switch 支持String字元串類型
- try-with-resources,資源自動關閉
- 整數類型能夠用二進位來表示
- 數字常量支持下劃線
- 泛型實例化類型自動推斷,即”<>”
- catch捕獲多個異常類型,用(|)分隔開
- 全新的NIO2.0 API
- Fork/join 並行執行任務的框架
Java6(2006)
- java.awt新增Desktop類和SystemTray類
- 使用JAXB2來實現對象與XML之間的映射
- 輕量級 Http Server API
- 插入式註解處理API(lombok使用該特性來實現的)
- STAX,處理XML文檔的API
- Compiler API
- 對腳本語言的支持(ruby, groovy, javascript)
Java 5(2004)
- 泛型(本質是參數化類型,解決不確定具體對象類型的問題)
- 增強的for迴圈(for-each)
- 自動裝箱和自動拆箱(包裝類型有:Integer,Double,Float,Long,Short,Character和Boolean)
- 類型安全的枚舉(enum)
- 可變長度參數
- 靜態引入(import static)
- 元數據(註解)
- 線程併發庫(java.util.concurrent)
java1.4(2004)
- XML解析器
- Java列印服務
- Logging API(日誌功能)
- Java Web Start
- JDBC 3.0 API(jdbc高級)
- 斷言
- Preferences API
- 鏈式異常處理
- 支持IPV6
- 支持正則表達式
- 引入Imgae I/O API (圖片流);
- NIO(高級流)
- XSLT轉換器
java1.3 (2000)
- Timer API(時間)
- Java Sound API(聲音)
- RMI通信協議
- jar文件索引
- 優化和增強
java1.2 (1998)
- J2SE/J2EE/J2ME
- EJB
- Java IDL(平臺對象請求代理體繫結構)
- 集合框架
- JIT(Just In Time)編譯器
- 數字簽名
- JFC(Java Foundation Classes), 包括Swing1.0, 拖放和Java2D類庫
- Java Plug-In(運行插件)
- JDBC中引入可滾動結果集,BLOB,CLOB,批量更新和用戶自定義類型
- Applet中添加聲音支持
- 字元串常量做記憶體映射
- 控制授權/訪問系統資源的策略工具
java1.1 (1997)
- JAR
- JDBC
- JavaBean
- RMI(遠程調用)
- Inner Class(內部類)
- Reflection(反射)
java1.0 (1996 初代版本)
- Classic VM(虛擬機)
- Applet(java小應用程式)
- AWT(java圖形設計)
下圖是 Oracle 官方給出的 Oracle JDK 支持的時間線。
LTS:是 Long Term Support,Oracle官宣可以免費商用的LTS版本,也就是官方保證會長期支持的版本。
參考鏈接:
https://blog.oxings.com/article/31.html
https://mp.weixin.qq.com/s/YPJ-sfx04-fOGt4WuPDwIQ