Java 8-14版本新特性總結簡要

java8 新增特性

Lambda 表達式Lambda允許把函數作爲一個方法的參數(函數作爲參數傳遞進方法中。

方法引用 − 方法引用提供了非常有用的語法,可以直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,方法引用可以使語言的構造更緊湊簡潔,減少冗餘代碼。

默認方法 − 默認方法就是一個在接口裏面有了一個實現的方法。

新工具 − 新的編譯工具,如:Nashorn引擎 jjs、 類依賴分析器jdeps。

Stream API −新添加的Stream API(java.util.stream) 把真正的函數式編程風格引入到Java中。

Date Time API − 加強對日期與時間的處理。

Optional 類 − Optional 類已經成爲 Java 8 類庫的一部分,用來解決空指針異常。

Nashorn, JavaScript 引擎 − Java 8提供了一個新的Nashorn javascript引擎,它允許我們在JVM上運行特定的javascript應用。

 

Java9 新特性

模塊系統:模塊是一個包的容器,Java 9 最大的變化之一是引入了模塊系統(Jigsaw 項目)。

REPL (JShell):交互式編程環境。

HTTP 2 客戶端:HTTP2.0標準是HTTP協議的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服務器推送特性。

改進的 Javadoc:Javadoc 現在支持在 API 文檔中的進行搜索。另外,Javadoc 的輸出現在符合兼容 HTML5 標準。

多版本兼容 JAR 包:多版本兼容 JAR 功能能讓你創建僅在特定版本的 Java 環境中運行庫程序時選擇使用的 class 版本。

集合工廠方法:List,Set 和 Map 接口中,新的靜態工廠方法可以創建這些集合的不可變實例。

私有接口方法:在接口中使用private私有方法。我們可以使用 private 訪問修飾符在接口中編寫私有方法。

進程 API: 改進的 API 來控制和管理操作系統進程。引進 java.lang.ProcessHandle 及其嵌套接口 Info 來讓開發者逃離時常因爲要獲取一個本地進程的 PID 而不得不使用本地代碼的窘境。

改進的 Stream API:改進的 Stream API 添加了一些便利的方法,使流處理更容易,並使用收集器編寫複雜的查詢。

改進 try-with-resources:如果你已經有一個資源是 final 或等效於 final 變量,您可以在 try-with-resources 語句中使用該變量,而無需在 try-with-resources 語句中聲明一個新變量。

改進的棄用註解 @Deprecated:註解 @Deprecated 可以標記 Java API 狀態,可以表示被標記的 API 將會被移除,或者已經破壞。

改進鑽石操作符(Diamond Operator) :匿名類可以使用鑽石操作符(Diamond Operator)。

改進 Optional 類:java.util.Optional 添加了很多新的有用方法,Optional 可以直接轉爲 stream。

多分辨率圖像 API:定義多分辨率圖像API,開發者可以很容易的操作和展示不同分辨率的圖像了。

改進的 CompletableFuture API : CompletableFuture 類的異步機制可以在 ProcessHandle.onExit 方法退出時執行操作。

輕量級的 JSON API:內置了一個輕量級的JSON API

響應式流(Reactive Streams) API: Java 9中引入了新的響應式流 API 來支持 Java 9 中的響應式編程。

 

Java10 新特性

局部變量的類型推斷:Java開始引用像腳本語言JavaScript中的var類型(弱類型),允許你通過var定義任何類型的變量 爲了簡化Java應用程序的編寫。

並行全垃圾回收器 G1:G1 是設計來作爲一種低延時的垃圾回收器(但是如果它跟不上舊的堆碎片產生的提升速率的話,將仍然採用完整壓縮集合)。在 JDK9 之前,默認的收集器是並行,吞吐,收集器。爲了減少在使用默認的收集器的應用性能配置文件的差異,G1 現在有一個並行完整收集機制。

合併 JDK 多個代碼倉庫到一個單獨的儲存庫中: 在 JDK9 中,有 8 個倉庫: root、corba、hotspot、jaxp、jaxws、jdk、langtools 和 nashorn 。在 JDK10 中這些將被合併爲一個,使得跨相互依賴的變更集的存儲庫運行 atomic commit (原子提交)成爲可能。

應用類數據共享(CDS):CDS 在 JDK5 時被引進以改善 JVM 啓動的表現,同時減少當多個虛擬機在同一個物理或虛擬的機器上運行時的資源佔用。JDK10 將擴展 CDS 到允許內部系統的類加載器、內部平臺的類加載器和自定義類加載器來加載獲得的類。之前,CDS 的使用僅僅限制在了 bootstrap 的類加載器。

額外的 Unicode 語言標籤擴展:這將改善 java.util.Locale 類和相關的 API 以實現額外 BCP47 語言標籤的 Unicode 擴展。尤其是,貨幣類型,一週的第一天,區域覆蓋和時區等標籤現在將被支持。

根證書:在 JDK 中將提供一套默認的 CA 根證書。關鍵的安全部件,如 TLS ,在 OpenJDK 構建中將默認有效。這是 Oracle 正在努力確保 OpenJDK 二進制和 Oracle JDK 二進制功能上一樣的工作的一部分,是一項有用的補充內容。

移除 Native-Header 自動生成工具(Javah):Java9 開始了一些對 JDK 的家務管理,這項特性是對它的延續。當編譯 JNI 代碼時,已不再需要單獨的工具來生成頭文件,因爲這可以通過 javac 完成。在未來的某一時刻,JNI 將會被 Panama 項目的結果取代,但是何時發生還不清楚。

垃圾回收器接口:這不是讓開發者用來控制垃圾回收的接口;而是一個在 JVM 源代碼中的允許另外的垃圾回收器快速方便的集成的接口。

線程-局部變量管控:這是在 JVM 內部相當低級別的更改,現在將允許在不運行全局虛擬機安全點的情況下實現線程回調。這將使得停止單個線程變得可能和便宜,而不是隻能啓用或停止所有線程。

在備用存儲裝置上的堆分配: 硬件技術在持續進化,現在可以使用與傳統 DRAM 具有相同接口和類似性能特點的非易失性 RAM 。這項 JEP 將使得 JVM 能夠使用適用於不同類型的存儲機制的堆。

試驗性的基於 Java 的 JIT 編譯器:最近宣佈的 Metropolis 項目,提議用 Java 重寫大部分 JVM 。乍一想,覺得很奇怪。如果 JVM 是用 Java 編寫的,那麼是否需要一個 JVM 來運行 JVM ? 相應的,這導致了一個很好的鏡像類比。 現實情況是,使用 Java 編寫 JVM 並不意味着必須將其編譯爲字節碼,你可以使用 AOT 編譯,然後在運行時編譯代碼以提高性能。這項 JEP 將 Graal 編譯器研究項目引入到 JDK 中。並給將 Metropolis 項目成爲現實,使 JVM 性能與當前 C++ 所寫版本匹敵(或有幸超越)提供基礎

 

Java11 新特性

2018年9月26日,Oracle 官方宣佈 Java 11 正式發佈。這是 Java 大版本週期變化後的第一個長期支持版本(LTS版本,Long-Term-Support,持續支持到2026年9月),非常值得關注。

字符串加強:Java 11 增加了一系列的字符串處理方法

可伸縮低延遲垃圾收集器(ZGC):ZGC 即 Z Garbage Collector(垃圾收集器或垃圾回收器),這應該是 Java 11 中最爲矚目的特性,沒有之一。

標準 HTTP Client 升級:Java 11 對 Java 9 中引入並在 Java 10 中進行了更新的 Http Client API 進行了標準化,在前兩個版本中進行孵化的同時,Http Client 幾乎被完全重寫,並且現在完全支持異步非阻塞。並且,Java11 中,Http Client 的包名由 jdk.incubator.http 改爲java.net.http,該 API 通過 CompleteableFuture 提供非阻塞請求和響應語義。

簡化啓動單個源代碼文件的方法:Java 11 版本中最令人興奮的功能之一是增強 Java 啓動器,使之能夠運行單一文件的 Java 源代碼。此功能允許使用 Java 解釋器直接執行 Java 源代碼。源代碼在內存中編譯,然後由解釋器執行。唯一的約束在於所有相關的類必須定義在同一個 Java 文件中。

用於 Lambda 參數的局部變量語法:從 Java 10 開始,便引入了局部變量類型推斷這一關鍵特性。類型推斷允許使用關鍵字 var 作爲局部變量的類型而不是實際類型,編譯器根據分配給變量的值推斷出類型

其他特性:

新的垃圾回收器 Epsilon,一個完全消極的 GC 實現,分配有限的內存資源,最大限度的降低內存佔用和內存吞吐延遲時間
低開銷的 Heap Profiling:Java 11 中提供一種低開銷的 Java 堆分配採樣方法,能夠得到堆分配的 Java 對象信息,並且能夠通過 JVMTI 訪問堆信息
TLS1.3 協議:Java 11 中包含了傳輸層安全性(TLS)1.3 規範(RFC 8446)的實現,替換了之前版本中包含的 TLS,包括 TLS 1.2,同時還改進了其他 TLS 功能,例如 OCSP 裝訂擴展(RFC 6066,RFC 6961),以及會話散列和擴展主密鑰擴展(RFC 7627),在安全性和性能方面也做了很多提升
飛行記錄器:飛行記錄器之前是商業版 JDK 的一項分析工具,但在 Java 11 中,其代碼被包含到公開代碼庫中,這樣所有人都能使用該功能了

 

Java12 新特性

增強Switch表達式擴展:在 Java 12 中重新拓展了 Switch 讓它具備了新的能力,通過擴展現有的 Switch 語句,可將其作爲增強版的 Switch 語句或稱爲 "Switch 表達式"來寫出更加簡化的代碼。

Shenandoah GC(一個低停頓垃圾收集器(實驗階段)):Java 12 中引入一個新的垃圾收集器:Shenandoah,它是作爲一中低停頓時間的垃圾收集器而引入到 Java 12 中的,其工作原理是通過與 Java 應用程序中的執行線程同時運行,用以執行其垃圾收集、內存回收任務,通過這種運行方式,給虛擬機帶來短暫的停頓時間。

增加一套微基準套件:該套微基準測試套件基於 JMH(Java Microbenchmark Harness),使開發人員可以輕鬆運行現有的微基準測試並創建新的基準測試,其目標在於提供一個穩定且優化過的基準,其中包括將近 100 個基準測試的初始集合,並且能夠輕鬆添加新基準、更新基準測試和提高查找已有基準測試的便利性。

G1蒐集器提升:1、使其能夠中止混合集合:2、使其能自動返回未用堆內存給操作系統:

 

Java13 新特性

動態應用程序類-數據共享:Java 13 中對 Java 10 中引入的 應用程序類數據共享進行了進一步的簡化、改進和擴展,即:允許在 Java 應用程序執行結束時動態進行類歸檔,具體能夠被歸檔的類包括:所有已被加載,但不屬於默認基層 CDS 的應用程序類和引用類庫中的類

增強 ZGC 釋放未使用內存:在 Java 13 中,ZGC 將向操作系統返回被標識爲長時間未使用的頁面,這樣它們將可以被其他進程重用

Socket API 重構:Java 13 爲 Socket API 帶來了新的底層實現方法,並且在 Java 13 中是默認使用新的 Socket 實現,使其易於發現並在排除問題同時增加可維護性

Switch 表達式擴展(預覽):在 Java 13 之後,Switch 表達式中就多了一個關鍵字用於跳出 Switch 塊的關鍵字 yield,主要用於返回一個值,它和 return 的區別在於:return 會直接跳出當前循環或者方法,而 yield 只會跳出當前 Switch 塊,同時在使用 yield 時,需要有 default 條件。

文本塊(預覽):解決 Java 定義多行字符串時只能通過換行轉義或者換行連接符來變通支持的問題,引入三重雙引號來定義多行文本。

 

Java14 新特性

record 關鍵字:簡化數據類的定義方式,使用 record 代替 class 定義的類,只需要聲明屬性,就可以在獲得屬性的訪問方法,以及 toString,hashCode,equals 方法。

空指針異常精準提示:通過 JVM 參數中添加-XX:+ShowCodeDetailsInExceptionMessages,可以在空指針異常中獲取更爲詳細的調用信息,更快的定位和解決問題

switch 的增強終於轉正:JDK12 引入的 switch(預覽特性)在 JDK14 變爲正式版本,不需要增加參數來啓用,直接在 JDK14 中就能使用。主要是用->來替代以前的:+break;另外就是提供了 yield 來在 block 中返回值

instanceof 增強:instanceof 主要在類型強轉前探測對象的具體類型,然後執行具體的強轉。新版的 instanceof 可以在判斷的是否屬於具體的類型同時完成轉換

其他特性:

  • 從 Java11 引入的 ZGC 作爲繼 G1 過後的下一代 GC 算法,從支持 Linux 平臺到 Java14 開始支持 MacOS 和 Window(個人感覺是終於可以在日常開發工具中先體驗下 ZGC 的效果了,雖然其實 G1 也夠用)
  • 移除了 CMS 垃圾收集器(功成而退)
  • 新增了 jpackage 工具,標配將應用打成 jar 包外,還支持不同平臺的特性包,比如 linux 下的debrpm,window 平臺下的msiexe

 

參考站點:

https://juejin.im/post/5e9e3ab46fb9a03c8e5fa719#heading-23

https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-13/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章