北京時間 2018年9 月 26 日,Oracle 官方宣佈 Java 11 正式發佈。這是 Java 大版本週期變化後的第一個長期支持版本,很是值得關注。從官網便可下載, 最新發布的 Java11 將帶來 ZGC、Http Client 等重要特性。Java 11 新特性:java
從時間節點來看,JDK 11 的發佈正好處在 JDK 8 免費更新到期的前夕,同時 JDK 九、10 也陸續成爲「歷史版本」。JDK 11 將是一個 企業不可忽視的版本。程序員
在過去的不少年中,Oracle 和 OpenJDK 社區提供了接近免費的午飯,致使人們忽略了其背後的海量工做和價值,這其中包括但不單單限於:最新的安全更新,如,安全協議等基礎設施的升級和維護,安全漏洞的及時修補,這是 Java 成爲企業核心設施的基礎之一。大量的新特性、Bug 修復,例如,容器環境支持,GC 等基礎領域的加強。不少生產開發中的 Hack,其實升級 JDK 就能解決了。不斷改進的 JVM,提供接近零成本的性能優化…shell
JDK11 引入了兩種新的 GC,其中包括也許是劃時代意義的 ZGC,雖然其目前仍是實驗特性,可是從能力上來看,這是 JDK 的一個巨大突破,爲特定生產環境的苛刻需求提供了一個可能的選擇。例如,對部分企業核心存儲等產品,若是可以保證不超過 10ms 的 GC 暫停,可靠性會上一個大的臺階,這是過去咱們進行 GC 調優幾乎作不到的,是能與不能的問題。安全
對於 G1 GC,相比於 JDK 8,升級到 JDK 11 便可免費享受到:並行的 Full GC,快速的 CardTable 掃描,自適應的堆佔用比例調整(IHOP),在併發標記階段的類型卸載等等。這些都是針對 G1 的不斷加強,其中串行 Full GC 等甚至是曾經被普遍詬病的短板,你會發現 GC 配置和調優在 JDK11 中愈來愈方便。性能優化
**Flight Recorder(JFR)**是 Oracle 剛剛開源的強大特性。JFR 是一套集成進入 JDK、JVM 內部的事件機制框架,經過良好架構和設計的框架,硬件層面的極致優化,生產環境的普遍驗證,它能夠作到極致的可靠和低開銷。在 SPECjbb2015 等基準測試中,JFR 的性能開銷最大不超過 1%,因此,工程師能夠基本沒有心理負擔地在大規模分佈式的生產系統使用,這意味着,咱們既能夠隨時主動開啓 JFR 進行特定診斷,也可讓系統長期運行 JFR,用以在複雜環境中進行「After-the-fact」分析。微信
在保證低開銷的基礎上,JFR 提供的能力能夠應用在對鎖競爭、阻塞、延遲,JVM GC、SafePoint 等領域,進行很是細粒度分析。甚至深刻 JIT Compiler 內部,全面把握熱點方法、內聯、逆優化等等。JFR 提供了標準的 Java、C++ 等擴展 API,能夠與各類層面的應用進行定製、集成,爲複雜的企業應用棧或者複雜的分佈式應用,提供 All-in-One 解決方案。而這一切都是內建在 JDK 和 JVM 內部的,並不須要額外的依賴,開箱即用。架構
它來源於 Google 等業界前沿廠商的一線實踐,經過獲取對象分配細節,爲 JDK 補足了對象分配診斷方面的一些短板,工程師能夠經過 JVMTI 使用這個能力加強自身的工具。併發
新的 HTTP API 提供了對 HTTP/2 等業界前沿標準的支持,精簡而又友好的 API 接口,與主流開源 API(如,Apache HttpClient, Jetty, OkHttp 等)對等甚至更高的性能。與此同時它是 JDK 在 Reactive-Stream 方面的第一個生產實踐,普遍使用了 Java Flow API 等,終於讓 Java 標準 HTTP 類庫在擴展能力等方面,知足了現代互聯網的需求。框架
就是安全類庫、標準等方面的大範圍升級,它仍是中國安全專家範學雷所領導的 JDK 項目,徹底不一樣於以往的修修補補,是個很是大規模的工程。分佈式
動態 class 文件常量。擴展了 Java class 文件格式,支持一種新的常量池形式:CONSTANT_Dynamic。
主要是針對 ARM Aarch64 架構的優化,好比提供優化的 sin、cos 等函數。
無操做的垃圾收集器。Epsilon 是一個特殊的垃圾收集器,只處理內存分配,不負責回收。一旦堆耗盡,就關閉 JVM。
聽上去這個收集器好像沒什麼意義。不過它仍是有很多用處的。好比:
性能測試。GC 會影響性能,有了這麼一個幾乎什麼都不幹的 GC,咱們能夠過濾掉 GC 帶來的影響因素。還有些性能因素不是 GC 引入的,好比編譯器變換,利用 Epsilon GC,咱們能夠對比。就像生物學裏作實驗,咱們能夠用它作一個對照組。
另外還有內存壓力測試、VM接口測試等。
升級現有 API 支持 Unicode 10。Java SE 10 實現的是 Unicode 8.0。與 Java 10 相比,Java 11 多支持 16 018 個新字符,10 種新的文字類型。
基於嵌套的訪問控制。Java 11 引入了 nest 的概念,這是一個新的訪問控制上下文(context),邏輯上處於同一代碼實體中的類,儘管會被編譯爲不一樣的 class 文件,可是能夠訪問彼此的 private 成員,再也不須要編譯器插入輔助訪問的橋方法。
動態 class 文件常量。擴展了 Java class 文件格式,支持一種新的常量池形式:CONSTANT_Dynamic。
將 Java SE 9 中標記爲廢棄的 Java EE 和 CORBA 正式從 Java SE 平臺中刪除。
支持運行單個文件中的源代碼。在剛學習 Java 或者編寫小的工具程序時,咱們通常要先用 javac 編譯源文件,再用 java 命令運行。有了這個功能,咱們能夠直接用 java 命令運行源程序。就像這樣:
java HelloWorld.java
複製代碼
廢棄 Nashorn JavaScript 腳本引擎、API 和 jjs 工具。Nashorn 是在 JDK 8 中引入的,當時完整實現了 ECMAScript-262 5.1。不過隨着 ECMAScript 的演進加快,Nashorn 維護愈來愈困難。
廢棄了 pack200 和 unpack200 工具,以及 java.util.jar 包中的 Pack200 API。
歡迎掃碼或微信搜索公衆號《程序員果果》關注我,關注有驚喜~