JDK 版本變化
記錄Java版本的更新歷史,主要是對以下文章的結合:
- 《openjdk 文件》
- 《Java - JCP、JSR等名詞介紹》
- 《從java1到java9每個版本都有什麼新特性?》
- 《Java 9正式釋出》
- 《JDK 10 本週將進入候選釋出階段,新特性搶先看》
- 《Java 老矣,尚能飯否?》
一些術語
- JCP 是 Java Community Process(Java社群程式)的簡稱,社會各界Java組成的社群,規劃和領導Java的發展。
- JEP 是 JDK Enhancement Proposals (Java 增強提案)的簡稱,JDK的版本變化將從這些提案中選取。
- JSR 是 Java Specification Requests(Java規範請求)的簡稱,是 JCP 成員向委員會提交的 Java 發展議案,經過一系列流程後,如果通過會成為 JEP,最終會體現在未來的Java中。
- TCK 是 Technology Compatibility Kit(技術相容性測試)的簡稱, 如果一個平臺型程式想要宣稱自己相容Java,就必須通過TCK測試
JDK 11
JDK 11 目前出現了4個JEP,計劃於 2018 年 9 月釋出。
- JEP 309: 動態類檔案常量。
- JEP 318: 低開銷垃圾收集器 Epsilon。
- JEP 320: 移除 Java EE 和 CORBA 模組。
- JEP 323: Lambda 引數的本地變數語法。
JDK 10
JDK 10 按計劃將於2018年3月20日釋出。新特性有:
- JEP 286: 區域性變數的型別推導。該特性在社群討論了很久並做了調查,可檢視 JEP 286 調查結果。
- JEP 296: 將 JDK 的多個程式碼倉庫合併到一個儲存庫中。
- JEP 304: 垃圾收集器介面。通過引入一個乾淨的垃圾收集器(GC)介面,改善不同垃圾收集器的原始碼隔離性。
- JEP 307: 向 G1 引入並行 Full GC。
- JEP 310: 應用類資料共享。為改善啟動和佔用空間,在現有的類資料共享(“CDS”)功能上再次擴充,以允許應用類放置在共享存檔中。
- JEP 312: 執行緒區域性管控。允許停止單個執行緒,而不是隻能啟用或停止所有執行緒。
- JEP 313: 移除 Native-Header Generation Tool (javah)
- JEP 314: 額外的 Unicode 語言標籤擴充套件。包括:cu (貨幣型別)、fw (每週第一天為星期幾)、rg (區域覆蓋)、tz (時區) 等。
- JEP 316: 在備用記憶體裝置上分配堆記憶體。允許 HotSpot 虛擬機器在備用記憶體裝置上分配 Java 物件堆。
- JEP 317: 基於 Java 的 JIT 編譯器(試驗版本)。
- JEP 319: 根證照。開源 Java SE Root CA 程式中的根證照。
- JEP 322: 基於時間的版本釋出模式。“Feature releases” 版本將包含新特性,“Update releases” 版本僅修復 Bug 。
JDK 9
JDK 9 於2017年9月21日釋出。新特性有:
- 模組化 —— Jigsaw
- 互動式命令列 —— JShell
- 預設的垃圾回收器 —— G1
- 程式操作改進
- 競爭鎖的效能優化
- 分段程式碼快取
- 優化字串佔用空間
這個版本中最引人注目的時候模組化,通過這個工作,可以構建更小的執行時環境,只需要包括Java平臺中任務依賴的部分。這可以更好地適應雲端的開發。
具體的特性包括:
- JEP 102: 改善了控制和管理作業系統程式的 API。
-
JEP 110: 定義了一個新的 Http 客戶端 API,它實現了
HTTP/2
和WebSocket
,並且可以替代遺留的HttpURLConnection
API。該 API 將會以一個 incubator 模組的形式進行交付。 - JEP 143: 提高競爭 Java 物件的監視效能。
- JEP 158: 統一 JVM 的日誌。
- JEP 165: 通過支援執行時管理來增加對 JVM 編譯器的管理。
- JEP 193: 對變數處理的改進。
- JEP 197: 將程式碼快取劃分成不同的段。
- JEP 200: 採用 Java 平臺模組化系統(Java Platform Module System,JPMS)對JDK進行模組化。
- JEP 201: 原始碼模組化。
-
JEP 211: 在 import 語句中 省略
deprecation
的警告。 - JEP 212: 解決 lint 和 doclint 警告。
- JEP 213: Project Coin 的改變
- JEP 214: 移除 JDK 8 中 GC 組合器的廢棄說明。
- JEP 215: 在 javac 中實現了一個新的型別檢測策略。
- JEP 216: 正確地處理匯入宣告。
- JEP 217: 註解流水線 2.0。
- JEP 219: 定義了資料傳輸層安全(Datagram Transport Layer Security, DTLS)API。
- JEP 220: 模組化執行時映象。
-
JEP 221: 簡化
Doclet
API。 - JEP 222: jshell - Java 中的互動式命令列。
- JEP 223: 新的版本字串模式。
- JEP 224: 增強了 javadoc 工具來生成 HTML5 標記。
- JEP 225: 增加了 javadoc 搜尋。
- JEP 226: UTF-8 屬性檔案資源的Bundle相關變化。
- JEP 227: Unicode 7.0。
- JEP 228: 增加更多可診斷的命令。
- JEP 229: 將預設的祕鑰庫從 JKS 替換為 PKCS12。
- JEP 231: 移除執行時 JRE 版本選擇。
- JEP 232: 增強了安全相關應用的效能。
- JEP 233: 開發了一個工具來自動測試執行時編譯器。
- JEP 235: 增加關於 javac 生成類檔案屬性的 測試。
- JEP 236: 定義瞭解析 API 來支援 Nashorn 的 ECMAScript 抽象語法樹。
- JEP 237: Linux/AArch64 埠相關。
- JEP 238: 多版本 JAR 檔案。
- JEP 240: 移除 JVM 的 TI hprof 客戶端。
- JEP 241: 移除 jhat 工具。
- JEP 243: 提供 Java 語言級的 JVM 編譯介面。
- JEP 244: TLS 應用層協議協商。
- JEP 245: 驗證 JVM 命令列標誌引數。
- JEP 246: 利用 CPU 指令提升 GHASH 和 RSAd 的效能。
- JEP 247: 對老平臺版本的編譯支援。
- JEP 248: G1 作為預設的垃圾回收器。
- JEP 249: 基於 TLS 實現 OCSP Stapling。
- JEP 250: 在類資料分享(CDS)歸檔中儲存 interned 字串。
- JEP 251: 多方案映象。
- JEP 252: 預設使用 CLDR Locale Data。
- JEP 253: 為 JavaFX UI 控制 和 CSS API 的模組化做準備。
- JEP 254: 採用一個空間更加高效的 String 內部表示。
- JEP 255: 合併 Xerces 2.11.0 中的更新。
- JEP 256: BeanInfo 註解調整。
- JEP 257: 更新 JavaFX/Media 中 GStreamer 的版本。
- JEP 258: 使用 HarfBuzz 作為字型佈局引擎。
- JEP 259: 定義了一個高效標準的 Stack-Walking API。
- JEP 260: 封裝大部分的內部 API。
- JEP 261: 實現模組化系統。
- JEP 262: 支援 TIFF 影象 I/O。
- JEP 263: 實現 Windows 和 Linux 高解析度影象介面。
- JEP 264: 平臺日誌 API 和 服務。
- JEP 265: Java 2D 使用 Marlin Graphics Renderer。
- JEP 266: 併發相關的一些更新。
- JEP 267: 支援 Unicode 8.0。
- JEP 268: 支援 XML 目錄。
- JEP 269: 增加一些集合類建立的工廠方法。
- JEP 270: 為臨界區預留棧的某些區域。
- JEP 271: 統一 GC 日誌。
- JEP 272: 增加特定平臺的桌面特性。
- JEP 273: Deterministic Random Bit Generator (DRBG) 的實現。
- JEP 274: 增強方法處理器。
- JEP 275: Java 應用模組化打包。
- JEP 276: 語言定義物件模型的動態連結。
- JEP 277: 改善 Deprecation。
- JEP 278: 為 G1 中的巨大物件增加測試。
- JEP 279: 改進測試故障排除。
- JEP 280: 指示字串串聯。
- JEP 281: HotSpot C++ 單元測試框架。
- JEP 282: Java聯結器 jlink。
- JEP 283: 在 Linux 上支援 GTK 3。
- JEP 284: 新的 HotSpot 構建系統。
- JEP 285: 自旋等待提示。
- JEP 287: 實現 SHA-3 Hash 演算法。
- JEP 288: 禁止 SHA-1 驗證。
- JEP 289: 廢棄 Applet API。
- JEP 290: 過濾輸入的序列化資料。
- JEP 291: 廢棄 Concurrent Mark Sweep (CMS) 垃圾收集器。
- JEP 292: 在 Nashorn 中支援 ECMAScript 6 特徵。
- JEP 294: Linux/s390x 埠。
- JEP 295: 提前編譯。
- JEP 297: 統一 arm32/arm64 埠。
- JEP 298: 移除過時的例子。
- JEP 299: 重新組織文件。
JDK 8
JDK 8 於2014年3月14號釋出。從 Java 8 開始開發代號已經棄用了。新特性有:
- Lambda 表示式
- Pipelines 和 Streams
- Date 和 Time API
- Default 方法
- Type 註解
- Nashhorn JavaScript 引擎
- 併發計數器
- Parallel 操作
- 移除 PermGen Error
- TLS SNI
第三個有里程碑意義的 Java 版本。其中最引人注目的便是 Lambda 表示式了,從此 Java 語言原生提供了函數語言程式設計能力。Java 8 更加適應海量雲端計算的需要。
具體的特性包括:
- JEP 117: 移除註解處理工具(Annotation-Processing Tool,apt)。
- JEP 124: 增強證照撤銷檢查 API。
- JEP 130: 實現 SHA-224 訊息摘要演算法。
- JEP 131: 在 64-bit Windows 中支援 PKCS#11。
- JEP 112: Charset 實現改善。
- JEP 129: 實現 NSA Suite B 加密演算法。
- JEP 105: DocTree API。
-
JEP 106: 擴充套件
javax.tools
API 來支援 javadoc 的訪問。 - JEP 113: 在 JDK 的 Kerberos 5 中新增 MS-SFU 擴充套件。
- JEP 114: TLS Server Name Indication (SNI) 擴充套件。
- JEP 121: 提供更強的 Password-Based-Encryption (PBE) 演算法實現。
- JEP 122: 移除永久帶(Permanent Generation)。
- JEP 127: 改善 Locale Data Packaging,並且採用 Unicode CLDR Data。
- JEP 128: Unicode BCP 47 本地匹配。
- JEP 133: 支援 Unicode 6.2。
- JEP 136: 增強錯誤驗證。
- JEP 153: 啟動 JavaFX 應用。
-
JEP 177: 優化
java.text.DecimalFormat.format
。 - JEP 103: 並行陣列排序。
- JEP 135: Base64 編碼和解碼。
- JEP 138: 基於 Autoconf 的自動構建系統。
- JEP 139: 增強 javac 來提高構建速度。
- JEP 142: 減少對於特定域的快取記憶體的爭奪。
- JEP 147: 減少類後設資料佔用。
- JEP 148: 支援小虛擬機器(不超過3M)的建立。
- JEP 149: 減少核心庫的記憶體使用。
- JEP 150: 新的 Date 和 Time API。
- JEP 160: lambda 函式表示式。
- JEP 164: 利用 CPU 指令進行 AES 加密。
- JEP 166: 針對JKS、JCEKS、PKCS12祕鑰儲存的修改。
- JEP 170: JDBC 4.2。
- JEP 172: DocLint。
- JEP 173: 放棄一些很少使用的 GC 組合。
- JEP 101: 泛華目標型別介面。
- JEP 104: 在 Java 型別上加註解。
- JEP 107: 增加集合的批量資料操作。
- JEP 109: 在核心庫中增加 Lambda 表示式。
- JEP 115: 認證加密的密碼套件。
- JEP 118: 在執行時訪問引數名稱。
-
JEP 119: 通過反射實現
javax.lang.model.*
API。 - JEP 120: 重複註解。
- JEP 123: 可配置的安全隨機數生成。
- JEP 126: lambda 表示式和虛擬擴充套件方法。
- JEP 140: 限制的 doPrivileged。
- JEP 155: 併發庫更新。
- JEP 161: 緊湊版本。
- JEP 162: 為模組化做準備。
-
JEP 171: 在
sun.misc.Unsafe
中增加三個記憶體排序相關的指令。 - JEP 174: Nashorn JavaScript 引擎。
- JEP 176: 提供呼叫者敏感的檢測機制。
- JEP 178: 靜態連結的 jni 庫。
- JEP 179: JDK API 的文件的支援和穩定。
- JEP 180: 對於頻繁衝突的 HashMap 使用平衡樹。
- JEP 184: HTTP URL的許可權。
- JEP 185: 限制外部 XML 資源的獲取。
JDK 7
開發代號是 Dolphin(海豚),於2011年7月28日發行。新特性有:
-
switch
語句塊中允許以字串作為分支條件; - 在建立泛型物件時應用型別推斷;
- 在一個語句塊中捕獲多種異常;
- 支援動態語言;
- 支援
try-with-resources
; - 引入 Java NIO.2 開發包;
- 數值型別可以用2進位制字串表示,並且可以在字串表示中新增下劃線;
- 鑽石型語法;
-
null
值的自動處理。
這個版本中的主要的特性是 NIO2 和 Fork/Join 併發包,Java 虛擬機器的穩定性真正做到的工業級,成為一個計算平臺而服務於全世界。
JDK 6
開發代號為 Mustang(野馬),於2006年12月11日發行。新特性有:
- 支援指令碼語言;
- 引入 JDBC 4.0 API;
- 引入 Java Compiler API;
- 可插拔註解;
- 增加對 Native PKI(Public Key Infrastructure)、Java GSS(Generic Security Service)、Kerberos 和 LDAP(Lightweight Directory Access Protocol) 的支援;
- 繼承 Web Services;
- 做了很多優化。
這個語言語法改進不多,但在虛擬機器內部做了大量的改進,成為一個相當成熟穩定的版本,時至今日國內的很多公司依然以 Java6 作為主要 Java 開發版本來使用。
同年 Sun 公司做出一個偉大的決定,將 Java 開源。OpenJDK 從 Sun JDK 1.7 版本分支出去,成為今天 OpenJDK 的基礎。
JDK 5
開發代號為Tiger(老虎),於2004年9月30日發行。新特性包有:
- 引入泛型;
- 增強迴圈,可以使用迭代方式;
- 自動裝箱與自動拆箱;
- 型別安全的列舉;
- 可變引數;
- 靜態引入;
- 後設資料(註解);
- 引入 Instrumentation。
Sun 不再採用 J2SE, J2EE 這種命名方式,而使用 Java SE 5, Java EE 5 這樣的名稱。
Java 5 是第二個里程碑式的版本。Java 語言語法發生很大的變化,如註解 (Annotation),裝箱 (Autoboxing),泛型 (Generic),列舉 (Enum),foreach 等被加入,提供了 java.util.concurrent 併發包。
Java 5 對於 Java 語言的推動是巨大的,特別是註解的加入,使得語言定義靈活了很多,程式設計師可以寫出更加符合領域定義的描述性程式。
JDK 1.4
開發代號為 Merlin(隼),於2004年2月06日發行(首次在JCP下發行)。新特性有:
- XML 處理;
- Java 列印服務;
- 引入 Logging API;
- 引入 Java Web Start;
- 引入 JDBC 3.0 API;
- 引入斷言;
- 引入 Preferences API;
- 引入鏈式異常處理;
- 支援 IPv6;
- 支援正規表示式;
- 引入 Image I/O slot machine API。
Java 語言真正走向成熟,提供了非常完備的語言特性,如 NIO,正規表示式,XML 處理器等。
同年微軟的.NET 框架釋出,兩者開始了為期十幾年的暗自競爭。從語言特性上來說,.NET 後發先至,一直處於優勢。但 Java 依賴良好的開發者生態,絕大多數大型軟體公司的使用者眾多和不斷貢獻,以及對 Linux 作業系統良好的支援,漸漸的在伺服器端獲得優勢地位。
JDK 1.3
開發代號為 Kestrel(紅隼),於2000年5月08日發行。新特性有:
- 引入Java Sound API;
- jar 檔案索引;
- 對 Java 的各個方面都做了大量優化和增強。
J2EE 中的 Servlet 規範獲得了極大的成功,伴隨著網際網路的興起,和瀏覽器直接通過 HTTP 協議互動的 Servlet,和眾多的 MVC 框架,成為 Web1.0 的網紅。
JDK 1.2
開發代號為 Playground(操場),於1998年12月8日發行。新特性有:
- 引入集合(Collection)框架;
- 對字串常量做記憶體對映;
- 引入 JIT(Just In Time) 編譯器;
- 引入對打包的 Java 檔案進行數字簽名;
- 引入控制授權訪問系統資源的策略工具;
- 引入 JFC(Java Foundation Classes),包括 Swing 1.0、拖放和 Java 2D 類庫;
- 引入 Java 外掛;
- 在 JDBC 中引入可滾動結果集、BLOB、CLOB、批量更新和使用者自定義型別;
- 在 Applet 中新增聲音支援。
Java 第一個里程碑式的版本。JIT(Just in time)編譯器技術,使得語言的可遷移性和執行效率達到最優的平衡,同時 Collections 集合類設計優良,在企業應用開發中迅速得到了廣泛使用。
Sun 公司把 Java 技術體系分成三個方向,分別是 J2SE(面向桌面和通用應用開發),J2EE(面向企業級應用開發),J2ME(面向移動終端開發)。這個分類影響非常久遠,體現出主流語言設計者的思想:針對於不同的應用領域,在形態,API 集合等進行劃分。
JDK 1.1
於 1997年2月19日發行,新特性有:
- 引入JDBC(Java Database Connectivity);
- 支援內部類;
- 引入Java Bean;
- 引入RMI(Remote Method Invocation);
- 引入反射(僅用於內省)。
Java 語言的基本形態基本確定了,比如反射 (reflection), JavaBean, 介面和類的關係等等,一直到今天都保持一致。然而,Java 最初的一些目標,如在瀏覽器中執行 Applet,以及跨平臺的圖形介面 Awt 很快遭遇到負面的評價。
JDK 1.0
開發代號為Oak(橡樹),於1996年1月23發行。特點有:
- 提供了一個解釋執行的 Java 虛擬機器;
- Applet 能在 Mozilla 瀏覽器中執行。
Java 的 Applet 能在 Mozilla 瀏覽器中執行,被看作是未來的網際網路語言。
起源
Java 語言源於 1991 年 Sun 公司 James Gosling 領導的的 Ork 專案,1995 年 Sun 公司正式起名為 Java,並提出“Write once, Run anywhere"的口號。
文件記錄在Github: JDKHistory
相關文章
- JDK各版本環境變數配置JDK變數
- JDK版本 - Major VersionJDK
- Linux下檢視jdk安裝路徑版本、安裝jdk、配置環境變數LinuxJDK變數
- CentOS 7與之前版本的變化CentOS
- 多個Jdk版本(轉)JDK
- jdk 多版本切換JDK
- centos 切換 jdk 版本CentOSJDK
- Mac配置多版本JDKMacJDK
- 綠色版JDK未配置環境變數檢視多少位版本JDK變數
- Java最新發布版本有哪些變化?Java
- maven 修改使用jdk版本MavenJDK
- IDE中下載JDK的外掛:視覺化自由選擇下載特定版本的JDKIDEJDK視覺化
- jdk環境變數JDK變數
- JDK的第三個LTS版本JDK17來了JDK
- Linux安裝jdk及jdk版本之間切換LinuxJDK
- centos7更換jdk版本CentOSJDK
- 檢視JAR包的JDK版本JARJDK
- centos7 更換jdk版本CentOSJDK
- jdk各個版本下載地址JDK
- ubuntu JDK 環境變數UbuntuJDK變數
- 配置JDK環境變數JDK變數
- jdk環境變數配置JDK變數
- JDK配置環境變數JDK變數
- jdk5到jdk10各個版本的新特性JDK
- 不同JDK版本之間的intern()方法的區別-JDK6 VS JDK6+JDK
- 15. mac安裝多版本jdkMacJDK
- JAVA JDK不同版本對JFrame的支援JavaJDK
- 設定maven預設的jdk版本MavenJDK
- 部分JDK版本的釋出時間JDK
- windows10系統修改JDK版本後配置環境變數不生效怎麼辦WindowsJDK變數
- jdk環境變數的配置JDK變數
- Spring系列:Spring版本和JDK版本對應關係SpringJDK
- Oracle 10g NLS 環境變數設定/和以前版本有變化Oracle 10g變數
- 簡單實用的JDK版本切換JDK
- Java/JDK各版本主要特性彙總JavaJDK
- OpenJDK JDK 18第一個版本釋出JDK
- MyEclipse - 修改Maven預設的Jdk版本EclipseMavenJDK
- 配置jdk環境變數win10教程_win10jdk環境變數如何配置JDK變數Win10