今天看到一個(gè)文章《Java 8 腰斬,Java 17 用戶暴漲 430%》,仔細(xì)想來 好久沒關(guān)注java的版本更新了,目前的項(xiàng)目中還在使用java8,應(yīng)該了解一下java的新版本,所以在互聯(lián)網(wǎng)上整理了一份 ,有空的時(shí)間可以學(xué)習(xí)學(xué)習(xí)。
JDK Version 1.0
1996-01-23 Oak(橡樹)
初代版本,偉大的一個(gè)里程碑,但是是純解釋運(yùn)行,使用外掛JIT,性能比較差,運(yùn)行速度慢。
JDK Version 1.1
1997-02-19
JDBC(Java DataBase Connectivity);
支持內(nèi)部類;
RMI(Remote Method Invocation) ;
反射;
Java Bean;
JDK Version 1.2
1998-12-08 Playground(操場)
集合框架;
JIT(Just In Time)編譯器;
對(duì)打包的Java文件進(jìn)行數(shù)字簽名;
JFC(Java Foundation Classes), 包括Swing 1.0, 拖放和Java2D類庫;
Java插件;
JDBC中引入可滾動(dòng)結(jié)果集,BLOB,CLOB,批量更新和用戶自定義類型;
Applet中添加聲音支持.
JDK Version 1.3
2000-05-08 Kestrel(紅隼)
Java Sound API;
jar文件索引;
對(duì)Java的各個(gè)方面都做了大量優(yōu)化和增強(qiáng);
JDK Version 1.4
2002-02-13 Merlin(隼)
XML處理;
Java打印服務(wù);
Logging API;
Java Web Start;
JDBC 3.0 API;
斷言;
Preferences API;
鏈?zhǔn)疆惓L幚?
支持IPV6;
支持正則表達(dá)式;
引入Imgae I/O API.
JAVA 5
2004-09-30 Tiger(老虎)
泛型;
增強(qiáng)循環(huán),可以使用迭代方式;
自動(dòng)裝箱與自動(dòng)拆箱;
類型安全的枚舉;
可變參數(shù);
靜態(tài)引入;
元數(shù)據(jù)(注解);
Instrumentation;
JAVA 6
2006-12-11 Mustang(野馬)
支持腳本語言;
JDBC 4.0API;
Java Compiler API;
可插拔注解;
增加對(duì)Native PKI(Public Key Infrastructure), Java GSS(Generic Security Service),Kerberos和LDAP(Lightweight Directory Access Protocol)支持;
繼承Web Services;
JAVA 7
2011-07-28 Dolphin(海豚)
switch語句塊中允許以字符串作為分支條件;
在創(chuàng)建泛型對(duì)象時(shí)應(yīng)用類型推斷;
在一個(gè)語句塊中捕獲多種異常;
支持動(dòng)態(tài)語言;
支持try-with-resources(在一個(gè)語句塊中捕獲多種異常);
引入Java NIO.2開發(fā)包;
數(shù)值類型可以用二進(jìn)制字符串表示,并且可以在字符串表示中添加下劃線;
鉆石型語法(在創(chuàng)建泛型對(duì)象時(shí)應(yīng)用類型推斷);
null值得自動(dòng)處理;
JAVA 8
2014-03-18
Lambda 表達(dá)式 ? Lambda允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中。
方法引用 ? 方法引用提供了非常有用的語法,可以直接引用已有Java類或?qū)ο螅▽?shí)例)的方法或構(gòu)造器。與lambda聯(lián)合使用,方法引用可以使語言的構(gòu)造更緊湊簡潔,減少冗余代碼。
默認(rèn)方法 ? 默認(rèn)方法就是一個(gè)在接口里面有了一個(gè)實(shí)現(xiàn)的方法。
新工具 ? 新的編譯工具,如:Nashorn引擎 jjs、 類依賴分析器jdeps。
Stream API ?新添加的Stream API(java.util.stream) 把真正的函數(shù)式編程風(fēng)格引入到Java中。
Date Time API ? 加強(qiáng)對(duì)日期與時(shí)間的處理。
Optional 類 ? Optional 類已經(jīng)成為 Java 8 類庫的一部分,用來解決空指針異常。
Nashorn, JavaScript 引擎 ? Java 8提供了一個(gè)新的Nashorn javascript引擎,它允許我們在JVM上運(yùn)行特定的javascript應(yīng)用。
詳細(xì)參考:Java 8 新特性 | 菜鳥教程
JAVA 9
2017-09-22
模塊系統(tǒng):模塊是一個(gè)包的容器,Java 9 最大的變化之一是引入了模塊系統(tǒng)(Jigsaw 項(xiàng)目)。
REPL (JShell):交互式編程環(huán)境。
HTTP 2 客戶端:HTTP/2標(biāo)準(zhǔn)是HTTP協(xié)議的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服務(wù)器推送特性。
改進(jìn)的 Javadoc:Javadoc 現(xiàn)在支持在 API 文檔中的進(jìn)行搜索。另外,Javadoc 的輸出現(xiàn)在符合兼容 HTML5 標(biāo)準(zhǔn)。
多版本兼容 JAR 包:多版本兼容 JAR 功能能讓你創(chuàng)建僅在特定版本的 Java 環(huán)境中運(yùn)行庫程序時(shí)選擇使用的 class 版本。
集合工廠方法:List,Set 和 Map 接口中,新的靜態(tài)工廠方法可以創(chuàng)建這些集合的不可變實(shí)例。
私有接口方法:在接口中使用private私有方法。我們可以使用 private 訪問修飾符在接口中編寫私有方法。
進(jìn)程 API: 改進(jìn)的 API 來控制和管理操作系統(tǒng)進(jìn)程。引進(jìn) java.lang.ProcessHandle 及其嵌套接口 Info 來讓開發(fā)者逃離時(shí)常因?yàn)橐@取一個(gè)本地進(jìn)程的 PID 而不得不使用本地代碼的窘境。
改進(jìn)的 Stream API:改進(jìn)的 Stream API 添加了一些便利的方法,使流處理更容易,并使用收集器編寫復(fù)雜的查詢。
改進(jìn) try-with-resources:如果你已經(jīng)有一個(gè)資源是 final 或等效于 final 變量,您可以在 try-with-resources 語句中使用該變量,而無需在 try-with-resources 語句中聲明一個(gè)新變量。
改進(jìn)的棄用注解 @Deprecated:注解 @Deprecated 可以標(biāo)記 Java API 狀態(tài),可以表示被標(biāo)記的 API 將會(huì)被移除,或者已經(jīng)破壞。
改進(jìn)鉆石操作符(Diamond Operator) :匿名類可以使用鉆石操作符(Diamond Operator)。
改進(jìn) Optional 類:java.util.Optional 添加了很多新的有用方法,Optional 可以直接轉(zhuǎn)為 stream。
多分辨率圖像 API:定義多分辨率圖像API,開發(fā)者可以很容易的操作和展示不同分辨率的圖像了。
改進(jìn)的 CompletableFuture API : CompletableFuture 類的異步機(jī)制可以在 ProcessHandle.onExit 方法退出時(shí)執(zhí)行操作。
輕量級(jí)的 JSON API:內(nèi)置了一個(gè)輕量級(jí)的JSON API
響應(yīng)式流(Reactive Streams) API: Java 9中引入了新的響應(yīng)式流 API 來支持 Java 9 中的響應(yīng)式編程。
詳細(xì)參考:Java 9 新特性 | 菜鳥教程
JAVA 10
2018-03-20
根據(jù)官網(wǎng)的公開資料,共有12個(gè)重要特性,如下:
JEP286,var 局部變量類型推斷。
JEP296,將原來用 Mercurial 管理的眾多 JDK 倉庫代碼,合并到一個(gè)倉庫中,簡化開發(fā)和管理過程。
JEP304,統(tǒng)一的垃圾回收接口。
JEP307,G1 垃圾回收器的并行完整垃圾回收,實(shí)現(xiàn)并行性來改善最壞情況下的延遲。
JEP310,應(yīng)用程序類數(shù)據(jù) (AppCDS) 共享,通過跨進(jìn)程共享通用類元數(shù)據(jù)來減少內(nèi)存占用空間,和減少啟動(dòng)時(shí)間。
JEP312,ThreadLocal 握手交互。在不進(jìn)入到全局 JVM 安全點(diǎn) (Safepoint) 的情況下,對(duì)線程執(zhí)行回調(diào)。優(yōu)化可以只停止單個(gè)線程,而不是停全部線程或一個(gè)都不停。
JEP313,移除 JDK 中附帶的 javah 工具??梢允褂?javac -h 代替。
JEP314,使用附加的 Unicode 語言標(biāo)記擴(kuò)展。
JEP317,能將堆內(nèi)存占用分配給用戶指定的備用內(nèi)存設(shè)備,使用 Graal 基于 Java 的編譯器,可以預(yù)先把 Java 代碼編譯成本地代碼來提升效能。
JEP318,在 OpenJDK 中提供一組默認(rèn)的根證書頒發(fā)機(jī)構(gòu)證書。開源目前 Oracle 提供的的 Java SE 的根證書,這樣 OpenJDK 對(duì)開發(fā)人員使用起來更方便。
JEP322,基于時(shí)間定義的發(fā)布版本,即上述提到的發(fā)布周期。版本號(hào)為$FEATURE.$INTERIM.$UPDATE.$PATCH,分別是大版本,中間版本,升級(jí)包和補(bǔ)丁版本。
JAVA 11
2018-09-25
翻譯后的新特性有:
181:Nest-Based訪問控制
309:動(dòng)態(tài)類文件常量
315:改善Aarch64 intrinsic
318:無操作垃圾收集器
320:消除Java EE和CORBA模塊
321:HTTP客戶端(標(biāo)準(zhǔn))
323:局部變量的語法λ參數(shù)
324:Curve25519和Curve448關(guān)鍵協(xié)議
327:Unicode 10
328:飛行記錄器
329:ChaCha20和Poly1305加密算法
330:發(fā)射一列縱隊(duì)源代碼程序
331:低開銷堆分析
332:傳輸層安全性(Transport Layer Security,TLS)1.3
333:動(dòng)作:一個(gè)可伸縮的低延遲垃圾收集器 (實(shí)驗(yàn))
335:反對(duì)Nashorn JavaScript引擎
336:反對(duì)Pack200工具和API
JAVA 12
2019-03-19
作為“功能性版本”,JDK 12 總共包含 8 個(gè)新的 JEP ,分別為:
189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) :新增一個(gè)名為 Shenandoah 的垃圾回收器,它通過在 Java 線程運(yùn)行的同時(shí)進(jìn)行疏散 (evacuation) 工作來減少停頓時(shí)間。
230: Microbenchmark Suite:新增一套微基準(zhǔn)測試,使開發(fā)者能夠基于現(xiàn)有的 Java Microbenchmark Harness(JMH)輕松測試 JDK 的性能,并創(chuàng)建新的基準(zhǔn)測試。
325: Switch Expressions (Preview) :對(duì) switch 語句進(jìn)行擴(kuò)展,使其可以用作語句或表達(dá)式,簡化日常代碼。
334: JVM Constants API :引入一個(gè) API 來對(duì)關(guān)鍵類文件 (key class-file) 和運(yùn)行時(shí)工件的名義描述(nominal descriptions)進(jìn)行建模,特別是那些可從常量池加載的常量。
340: One AArch64 Port, Not Two :刪除與 arm64 端口相關(guān)的所有源碼,保留 32 位 ARM 移植和 64 位 aarch64 移植。
341: Default CDS Archives :默認(rèn)生成類數(shù)據(jù)共享(CDS)存檔。
344: Abortable Mixed Collections for G1 :當(dāng) G1 垃圾回收器的回收超過暫停目標(biāo),則能中止垃圾回收過程。
346: Promptly Return Unused Committed Memory from G1 :改進(jìn) G1 垃圾回收器,以便在空閑時(shí)自動(dòng)將 Java 堆內(nèi)存返回給操作系統(tǒng)。
JAVA 13
2019-09-17
新特性:
350 Dynamic CDS Archives 對(duì)appCDS進(jìn)行性了擴(kuò)展,允許在Java應(yīng)用執(zhí)行結(jié)束時(shí)動(dòng)態(tài)歸檔類。歸檔類包括包括默認(rèn)的基礎(chǔ)層CDS(class data-sharing) 存檔中不存在的所有已加載的應(yīng)用程序類和類庫。通過此仿瓷提高了AppCDS的可用性;
351 ZGC: Uncommit Unused Memory 對(duì)ZGC進(jìn)行了增強(qiáng),在以前的版本中,java GC之后并不會(huì)將系統(tǒng)內(nèi)存釋放給OS,因?yàn)槊看吾尫哦家馕吨匦抡{(diào)整jvm的內(nèi)存大小,存在一定的消耗;隨著軟件的發(fā)展,我們發(fā)現(xiàn)在很多時(shí)候內(nèi)存是比較昂貴的資源,所以將不用的內(nèi)存釋放回去給OS是非常有必要的;此功能在默認(rèn)情況下已開始,但可以通過-xx:-zuncommit參數(shù)禁用;注意:如果最新內(nèi)存參數(shù)設(shè)置比最大內(nèi)存參數(shù)大,那么此功能將隱式禁用。
353 Reimplement the Legacy Socket API 在這個(gè)版本中,將使用新的實(shí)現(xiàn)來代替java.net.socket和java.net.serversocket API的底層實(shí)現(xiàn)。新版本中舊的API還未刪除,可以通過配置系統(tǒng)屬性"jdk.net.useplansocketimpl"來使用他們。但默認(rèn)實(shí)現(xiàn)是最新版本的。
354 Switch Expressions (Preview) 擴(kuò)展開關(guān),以便它可以用作語句或表達(dá)式,并且兩種形式都可以使用傳統(tǒng)的情況…:標(biāo)簽(帶有貫穿線)或新案例…->標(biāo)簽(沒有掉進(jìn)去),還有一個(gè)新的語句,用于從開關(guān)表達(dá)式中產(chǎn)生值。這些變化將簡化日常編碼,并為在交換機(jī)中使用模式匹配做好準(zhǔn)備。這是jdk 13中的一個(gè)預(yù)覽語言特性。
355 Text Blocks (Preview) 向Java語言添加文本塊。文本塊是一個(gè)多行字符串文本,它避免了大多數(shù)轉(zhuǎn)義序列的需要,自動(dòng)以可預(yù)測的方式格式化字符串,并在需要時(shí)讓開發(fā)人員控制格式。這是jdk 13中的一個(gè)預(yù)覽語言特性。
此外,JDK8的截止時(shí)間為2019年1月份,到期后,Oracle將不再提供補(bǔ)丁及其它的更新服務(wù)。官網(wǎng)稱可能會(huì)更久,JDK9的截止時(shí)間是2018年3月,JDK10的截止版本是2018年9月。(詳細(xì)請前往:Oracle Java SE Support Roadmap),JDK 9和 JDK 10都是一個(gè)短期版本,故穩(wěn)定長期的版本可能是JAVA 11(LTS - Long Term Support)版本。
JAVA 14
2020-03-17
305 Pattern Matching for instanceof (Preview) instanceof 的模式匹配(預(yù)覽)
343 Packaging Tool (Incubator) 打包工具(孵化)
345 NUMA-Aware Memory Allocation for G1 G1 的NUMA 內(nèi)存分配優(yōu)化
349 JFR Event Streaming JFR事件流
352 Non-Volatile Mapped Byte Buffers 非原子性的字節(jié)緩沖區(qū)映射
358 Helpful NullPointerExceptions 非常有幫助的空指針異常
359 Records (Preview) Records(預(yù)覽)
361 Switch Expressions (Standard) Switch 表達(dá)式(標(biāo)準(zhǔn))
362 Deprecate the Solaris and SPARC Ports 棄用 Solaris 和S PARC 端口
363 Remove the Concurrent Mark Sweep (CMS) Garbage Collector 移除 CMS(Concurrent Mark Sweep)垃圾收集器
364 ZGC on macOS macOS 系統(tǒng)上的 ZGC
365 ZGC on Windows Windows 系統(tǒng)上的 ZGC
366 Deprecate the ParallelScavenge + SerialOld GC Combination 棄用 ParallelScavenge + SerialOld GC 組合
367 Remove the Pack200 Tools and API 移除Pack200 Tools和API
368 Text Blocks (Second Preview) 文本塊(第二個(gè)預(yù)覽版)
370 Foreign-Memory Access API (Incubator) 外部存儲(chǔ)器API(孵化)
JAVA 15
2020-09-15
339 Edwards-Curve Digital Signature Algorithm (EdDSA) 蒙哥馬利與扭曲愛德華曲線簽名算法
360 Sealed Classes (Preview) 密封類(預(yù)覽)
371 Hidden Classes 隱藏類
372 Remove the Nashorn JavaScript Engine 移除nasorn JavaScript引擎
373 Reimplement the Legacy DatagramSocket API 重新實(shí)現(xiàn)舊的DatagramSocket API
374 Disable and Deprecate Biased Locking 禁用和棄用偏置鎖
375 Pattern Matching for instanceof (Second Preview) 模式匹配的instanceof(第二次預(yù)覽)
377 ZGC: A Scalable Low-Latency Garbage Collector ZGC:一個(gè)可擴(kuò)展的低延遲垃圾收集器
378 Text Blocks 文本塊
379 Shenandoah: A Low-Pause-Time Garbage Collector Shenandoah:低暫停時(shí)間垃圾收集器
381 Remove the Solaris and SPARC Ports 移除Solaris和SPARC端口
383 Foreign-Memory Access API (Second Incubator) 外部內(nèi)存訪問API(第二個(gè)孵化器)
384 Records (Second Preview) 記錄(第二次預(yù)覽)
385 Deprecate RMI Activation for Removal 建議移除RMI激活
JAVA 16
2021-03-16
338 Vector API (Incubator) 病媒API(孵化器)
347 Enable C++14 Language Features 啟用C++ 14種語言特性
357 Migrate from Mercurial to Git 從Mercurial遷移到Git
369 Migrate to GitHub 遷移到GitHub
376 ZGC: Concurrent Thread-Stack Processing ZGC:并發(fā)線程堆棧處理
380 Unix-Domain Socket Channels Unix-Domain 套接字通道
386 Alpine Linux Port Alpine Linux端口
387 Elastic Metaspace 彈性Metaspace
388 Windows/AArch64 Port Windows / AArch64端口
389 Foreign Linker API (Incubator) 國外連接器API(孵化器)
390 Warnings for Value-Based Classes 對(duì)基于值的類的警告
392 Packaging Tool 包裝工具
393 Foreign-Memory Access API (Third Incubator) 外存儲(chǔ)器訪問API(第三孵化器)
394 Pattern Matching for instanceof instanceof匹配模式
395 Records 記錄
396 Strongly Encapsulate JDK Internals by Default 默認(rèn)情況下對(duì)JDK內(nèi)部進(jìn)行強(qiáng)封裝
397 Sealed Classes (Second Preview) 密封類(第二次預(yù)覽)
JAVA 17
2021-09-14
306 Restore Always-Strict Floating-Point Semantics 恢復(fù)總是嚴(yán)格的浮點(diǎn)語義
356 Enhanced Pseudo-Random Number Generators 增強(qiáng)型偽隨機(jī)數(shù)發(fā)生器
382 New macOS Rendering Pipeline 新的 macOS 渲染管道
391 macOS/AArch64 Port 將 JDK 移植到 macOS/AArch64
398 Deprecate the Applet API for Removal 不贊成刪除 Applet API
403 Strongly Encapsulate JDK Internals 強(qiáng)封裝 JDK 內(nèi)部構(gòu)件
406 Pattern Matching for switch (Preview) 模式匹配開關(guān)(預(yù)覽)
407 Remove RMI Activation 刪除 RMI 激活
409 Sealed Classes 封閉類別
410 Remove the Experimental AOT and JIT Compiler 刪除實(shí)驗(yàn) AOT 和 JIT 編譯器
411 Deprecate the Security Manager for Removal 請求刪除安全管理器
412 Foreign Function & Memory API (Incubator) 外部函數(shù)與內(nèi)存 API (孵化器)
414 Vector API (Second Incubator) 矢量 API (第二孵化器)
415 Context-Specific Deserialization Filters 特定于上下文的反序列化過濾器
Java 17 目前已經(jīng)進(jìn)入 Rampdown Phase One 階段,所有的功能特性都已經(jīng)被凍結(jié)。這說明 Java 17的新特性已經(jīng)定了,不會(huì)再增加新的 JEP (JDK增強(qiáng)建議)!
JAVA 18
2022-03-22
400 UTF-8 by Default 默認(rèn) UTF-8
408 Simple Web Server 簡單的網(wǎng)絡(luò)服務(wù)器
413 Code Snippets in Java API Documentation 代碼片段
416 Reimplement Core Reflection with Method Handles 重構(gòu) Reflection
417 Vector API (Third Incubator) 計(jì)算向量的 API
418 Internet-Address Resolution SPI 互聯(lián)網(wǎng)地址解析 SPI
419 Foreign Function & Memory API (Second Incubator) 新API,讓 JAVA 程序能夠與其他非 JAVA 運(yùn)行時(shí)的程序或數(shù)據(jù)進(jìn)行交互
420 Pattern Matching for switch (Second Preview) 開關(guān)模式匹配
421 Deprecate Finalization for Removal 棄用 finalize
JAVA 19
2022-09-20
405 Record Patterns (Preview) 記錄模式
422 Linux/RISC-V Port Linux/RISC-V 移植
424 Foreign Function & Memory API (Preview) 外部函數(shù)和內(nèi)存 API
425 Virtual Threads (Preview) 虛擬線程
426 Vector API (Fourth Incubator) 向量 API
427 Pattern Matching for switch (Third Preview) Switch 模式匹配
428 Structured Concurrency (Incubator) 結(jié)構(gòu)化并發(fā)
詳細(xì)可以參考 JDK 19
JAVA 20
2023-03-21
429 Scoped Values (Incubator) 作用域值 Scoped Value(孵化器)
432 Record Patterns (Second Preview) Record 模式(第二預(yù)覽版)
433 Pattern Matching for switch (Fourth Preview) switch 模式匹配(第四預(yù)覽版)
434 Foreign Function & Memory API (Second Preview) 外部函數(shù)內(nèi)存 API(第2版)
436 Virtual Threads (Second Preview) 虛擬線程(第二個(gè)預(yù)覽版)
437 Structured Concurrency (Second Incubator) 結(jié)構(gòu)化并發(fā)(第二個(gè)孵化器版本)
438 Vector API (Fifth Incubator) Vector API(第五個(gè)孵化器版本)