Java/JDK各版本主要特性彙總

来源:https://www.cnblogs.com/lishen2021/archive/2022/12/08/16967515.html
-Advertisement-
Play Games

Java18(2022.3) 將 UTF-8 指定為標準 Java API 的預設字元集 提供支持靜態文件的最小 Web 伺服器命令行工具jwebserver 定義了一個全新的 SPI(service-provider interface),用於主要名稱和地址的解析 棄用 Finalization ...


目錄

Java18(2022.3)

  1. 將 UTF-8 指定為標準 Java API 的預設字元集
  2. 提供支持靜態文件的最小 Web 伺服器命令行工具jwebserver
  3. 定義了一個全新的 SPI(service-provider interface),用於主要名稱和地址的解析
  4. 棄用 Finalization

Java17(2021.9)(LTS版本)

  1. Free Java License
  2. JDK 17 將取代 JDK 11 成為下一個長期支持版本
  3. Spring 6 和 Spring Boot 3需要JDK17
  4. 移除實驗性的 AOT 和 JIT 編譯器
  5. 恢復始終執行嚴格模式 (Always-Strict) 的浮點定義
  6. 正式引入密封類sealed class,限制抽象類的實現
  7. 統一日誌非同步刷新,先將日誌寫入緩存,然後再非同步刷新

雖然JDK17也是一個LTS版本,但是並沒有像JDK8和JDK11一樣引入比較突出的特性,主要是對前幾個版本的整合和完善。

Java16(2021.3)

  1. 允許在 JDK C ++源代碼中使用 C ++ 14功能
  2. ZGC性能優化,去掉ZGC線程堆棧處理從安全點到併發階段
  3. 增加 Unix 域套接字通道
  4. 彈性元空間能力
  5. 提供用於打包獨立 Java 應用程式的 jpackage 工具

JDK16相當於是將JDK14、JDK15的一些特性進行了正式引入,如instanceof模式匹配(Pattern matching)、record的引入等最終到JDK16變成了final版本。

Java15(2020.9)

  1. EdDSA 數字簽名演算法
  2. Sealed Classes(封閉類,預覽),通過sealed關鍵字修飾抽象類限定只允許指定的子類才可以實現或繼承抽象類,避免抽象類被濫用。
  3. Hidden Classes(隱藏類)
  4. 移除 Nashorn JavaScript引擎
  5. 改進java.net.DatagramSocket 和 java.net.MulticastSocket底層實現

Java14(2020.3)

  1. instanceof模式匹配,instanceof類型匹配語法簡化,可以直接給對象賦值,如if(obj instanceof String str),如果obj是字元串類型則直接賦值給了str變數
  2. 引入Record類型,類似於Lombok 的@Data註解,可以向Lombok一樣自動生成構造器、equals、getter等方法;
  3. Switch 表達式-標準化
  4. 改進 NullPointerExceptions提示信息,列印具體哪個方法拋的空指針異常,避免同一行代碼多個函數調用時無法判斷具體是哪個函數拋異常的困擾,方便異常排查;
  5. 刪除 CMS 垃圾回收器

Java13(2019.9)

  1. Switch 表達式擴展(引入 yield 關鍵字);switch表達式增加yield關鍵字用於返回結果,作用類似於return,如果沒有返回結果則使用break。
  2. 文本塊升級 """;引入了文本塊,可以使用"""三個雙引號表示文本塊,文本塊內部就不需要使用換行的轉義字元。
  3. SocketAPI 重構;(Socket的底層實現優化,引入了NIO)
  4. FileSystems.newFileSystem新方法
  5. 增強 ZGC 釋放未使用記憶體;(ZGC優化,將標記長時間空閑的堆記憶體空間返還給操作系統,保證堆大小不會小於配置的最小堆記憶體大小,如果堆最大和最小記憶體大小設置一樣,則不會釋放記憶體還給操作系統。)

重要特性:ZGC優化,釋放記憶體還給操作系統、socket底層實現引入NIO。

Java12(2019.3)

  1. Switch 表達式擴展,可以有返回值
  2. 新增NumberFormat對複雜數字的格式化
  3. 字元串支持transform、indent操作
  4. 新增方法Files.mismatch(Path, Path)
  5. Teeing Collector
  6. 支持unicode 11
  7. Shenandoah GC,新增的GC演算法
  8. G1收集器的優化,將GC的垃圾分為強制部分和可選部分,強制部分會被回收,可選部分可能不會被回收,提高GC的效率

重要特性:switch表達式語法擴展、G1收集器優化、新增Shenandoah GC垃圾回收演算法。

Java11(2018.9)(LTS版本)

  1. 增加一些符串處理方法
  2. 用於 Lambda 參數的局部變數語法
  3. Http Client重寫,支持HTTP/1.1和HTTP/2 ,也支持 websockets
  4. 可運行單一Java源碼文件,如:java Test.java
  5. ZGC:可伸縮低延遲垃圾收集器,(ZGC可以看做是G1之上更細粒度的記憶體管理策略。由於記憶體的不斷分配回收會產生大量的記憶體碎片空間,因此需要整理策略防止記憶體空間碎片化,在整理期間需要將對於記憶體引用的線程邏輯暫停,這個過程被稱為"Stop the world"。只有當整理完成後,線程邏輯才可以繼續運行。(並行回收))
  6. 支持 TLS 1.3 協議
  7. Flight Recorder(飛行記錄器),基於OS、JVM和JDK的事件產生的數據收集框架
  8. 對Stream、Optional、集合API進行增強

重要特性:對於JDK9和JDK10的完善,主要是對於Stream、集合等API的增強、新增ZGC垃圾收集器。

Java10(2018.3)

  1. 局部變數類型推斷,(類似JS可以通過var來修飾局部變數,編譯之後會推斷出值的真實類型)
  2. 不可變集合的改進
  3. 並行全垃圾回收器 G1,來優化G1的延遲
  4. 線程本地握手,(允許在不執行全局VM安全點的情況下執行線程回調,可以停止單個線程,而不需要停止所有線程或不停止線程)
  5. Optional新增orElseThrow()方法
  6. 類數據共用
  7. Unicode 語言標簽擴展
  8. 根證書

重要特性:通過var關鍵字實現局部變數類型推斷,使Java語言變成弱類型語言、JVM的G1垃圾回收由單線程改成多線程並行處理,降低G1的停頓時間。

Java9(2017.9)

  1. 模塊化
  2. 提供了List.of()、Set.of()、Map.of() 和 Map.ofEntries() 等工廠方法
  3. 介面支持私有方法
  4. Optional 類改進
  5. 多版本相容Jar包
  6. JShell工具
  7. try-with-resources的改進
  8. Stream API的改進
  9. 設置G1為JVM預設垃圾收集器
  10. 支持http2.0和websocket的API

重要特性:主要是API的優化,如支持HTTP2的Client API、JVM採用G1為預設垃圾收集器。

Java8(2014.3)(LTS版本)

  1. lambada表達式
  2. 函數式介面
  3. 方法引用
  4. 預設方法
  5. Stream API 對元素流進行函數式操作
  6. Optional 解決NullPointerException
  7. Date Time API
  8. 重覆註解 @Repeatable
  9. Base64
  10. 使用元空間Metaspace代替持久代(PermGen space)

Java7(2011.7)(LTS版本)

  1. switch 支持String字元串類型
  2. try-with-resources,資源自動關閉
  3. 整數類型能夠用二進位來表示
  4. 數字常量支持下劃線
  5. 泛型實例化類型自動推斷,即”<>”
  6. catch捕獲多個異常類型,用(|)分隔開
  7. 全新的NIO2.0 API
  8. Fork/join 並行執行任務的框架

Java6(2006)

  1. java.awt新增Desktop類和SystemTray類
  2. 使用JAXB2來實現對象與XML之間的映射
  3. 輕量級 Http Server API
  4. 插入式註解處理API(lombok使用該特性來實現的)
  5. STAX,處理XML文檔的API
  6. Compiler API
  7. 對腳本語言的支持(ruby, groovy, javascript)

Java 5(2004)

  1. 泛型(本質是參數化類型,解決不確定具體對象類型的問題)
  2. 增強的for迴圈(for-each)
  3. 自動裝箱和自動拆箱(包裝類型有:Integer,Double,Float,Long,Short,Character和Boolean)
  4. 類型安全的枚舉(enum)
  5. 可變長度參數
  6. 靜態引入(import static)
  7. 元數據(註解)
  8. 線程併發庫(java.util.concurrent)

java1.4(2004)

  1. XML解析器
  2. Java列印服務
  3. Logging API(日誌功能)
  4. Java Web Start
  5. JDBC 3.0 API(jdbc高級)
  6. 斷言
  7. Preferences API
  8. 鏈式異常處理
  9. 支持IPV6
  10. 支持正則表達式
  11. 引入Imgae I/O API (圖片流);
  12. NIO(高級流)
  13. XSLT轉換器

java1.3 (2000)

  1. Timer API(時間)
  2. Java Sound API(聲音)
  3. RMI通信協議
  4. jar文件索引
  5. 優化和增強

java1.2 (1998)

  1. J2SE/J2EE/J2ME
  2. EJB
  3. Java IDL(平臺對象請求代理體繫結構)
  4. 集合框架
  5. JIT(Just In Time)編譯器
  6. 數字簽名
  7. JFC(Java Foundation Classes), 包括Swing1.0, 拖放和Java2D類庫
  8. Java Plug-In(運行插件)
  9. JDBC中引入可滾動結果集,BLOB,CLOB,批量更新和用戶自定義類型
  10. Applet中添加聲音支持
  11. 字元串常量做記憶體映射
  12. 控制授權/訪問系統資源的策略工具

java1.1 (1997)

  1. JAR
  2. JDBC
  3. JavaBean
  4. RMI(遠程調用)
  5. Inner Class(內部類)
  6. Reflection(反射)

java1.0 (1996 初代版本)

  1. Classic VM(虛擬機)
  2. Applet(java小應用程式)
  3. AWT(java圖形設計)

下圖是 Oracle 官方給出的 Oracle JDK 支持的時間線。
LTS:是 Long Term Support,Oracle官宣可以免費商用的LTS版本,也就是官方保證會長期支持的版本。

image

參考鏈接:
https://blog.oxings.com/article/31.html
https://mp.weixin.qq.com/s/YPJ-sfx04-fOGt4WuPDwIQ


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前幾天在B站刷到尼爾後突發奇想,就想給尼爾做一個簡單的小網站,在思考如何體現尼爾的世界觀的時候想到了使用時間線的方式,將所有時間的事件羅列起來。所以就試著做了一下,這種方式可以很直觀的表現一些歷史上發生的事情,歷史相關主題的一些網站應該可以參考一下 首先來看效果 以上都是游戲里的一些歷史,簡單的設計 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 本篇文章主要總結了微信小程式開發,獲取用戶信息的整個流程步驟。補充了網上很多碎片化的代碼,本人梳理了思路寫下了這篇文章。 思路 1、在js文件中,設置userinfo、hasUserinfo、canIUseGetUserProfile數據 ...
  • ##canvas自適應文字長度,旋轉角度生成水印背景圖 設置canvas字體大小後,通過ctx.measureText(text).width獲取兩行文字的寬度text1,text2,取最大寬度為文本框寬度textWidth 設置兩行文字間距,可得文本框高度:textHeight=2*fontsiz ...
  • 我們如果要在伺服器上發佈https前端應用和WebAPI的應用,那麼我們就需要用到https證書了。我們一般發佈的應用的雲伺服器上,都會提供一定量的相關的免費證書(一般為20個)供我們使用,每個一年期限,到期再續即可,一般情況下基本上滿足要求了,本篇隨筆介紹如何基於雲服務提供商的免費證書,在伺服器上... ...
  • “讀過書,……我便考你一考。茴香豆的茴字,怎樣寫的?”——魯迅《孔乙己》 0x00 大綱 0x01 前言 最近在重溫設計模式(in Java)的相關知識,然後在單例模式的實現上面進行了一些較深入的探究,有了一些以前不曾註意到的發現,遂將其整理成文,以作後用。 單例模式最初的定義出現於《設計模式》(艾 ...
  • 既然lambda表達式只能使用在語句中,如果想跨語句使用之前定義好的lambda表達式,怎麼辦?用什麼類型來表示lambda表達式? 用function類型來表示函數對象類型 bind1st/bind2nd bind 綁定器返回的都是 函數對象 lambda表達式=>函數對象 示例1 map<int ...
  • 這不是聖誕節快到了,準備讓讓女朋友開心開心,也算是親手做的,稍稍花了點心思。 話不多說,咱們直接來展示吧,學會了趕緊畫給你的那個她吧! 本文分為兩個大塊,我們先來試試畫聖誕樹。 聖誕樹 效果展示 代碼展示 導入模塊 import turtle as t from turtle import * im ...
  • 本文主要介紹Java8新特性之Optional類,分別介紹了獲取對象的3個方法、獲取數值的3個方法、處理數值的2個方法、映射數值的1個方法以及實際應用。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...