您好,登錄后才能下訂單哦!
文章首發于公眾號《程序員果果》
地址 : https://mp.weixin.qq.com/s/cOqRVlDgOqfDfKtkk1JGxw
北京時間 2018年9 月 26 日,Oracle 官方宣布 Java 11 正式發布。這是 Java 大版本周期變化后的第一個長期支持版本,非常值得關注。從官網即可下載, 最新發布的 Java11 將帶來 ZGC、Http Client 等重要特性。Java 11 新特性:
從時間節點來看,JDK 11 的發布正好處在 JDK 8 免費更新到期的前夕,同時 JDK 9、10 也陸續成為“歷史版本”。JDK 11 將是一個?企業不可忽視的版本。
在過去的很多年中,Oracle 和 OpenJDK 社區提供了接近免費的午餐,導致人們忽略了其背后的海量工作和價值,這其中包括但不僅僅限于:最新的安全更新,如,安全協議等基礎設施的升級和維護,安全漏洞的及時修補,這是 Java 成為企業核心設施的基礎之一。大量的新特性、Bug 修復,例如,容器環境支持,GC 等基礎領域的增強。很多生產開發中的 Hack,其實升級 JDK 就能解決了。不斷改進的 JVM,提供接近零成本的性能優化…
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 Aarch74 架構的優化,比如提供優化的 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。
歡迎關注我的公眾號《程序員果果》,關注有驚喜~~
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。