摘要:千呼萬喚,于正式發(fā)布版本即,也就是官方推薦可以廣泛使用的版本,其中發(fā)布了包括等個新特性,讓我們一睹為快。一新特性一覽二發(fā)布計劃日期階段說明對進(jìn)入階段的變化會應(yīng)用越來越嚴(yán)格的審查。我們需要支持以保持競爭力并與最新標(biāo)準(zhǔn)保持同步。
千呼萬喚,JDK11于2018-09-25正式發(fā)布GA版本(GA即General Availability,也就是官方推薦可以廣泛使用的版本),其中發(fā)布了包括ZGC、Flight Recorder等17個新特性,讓我們一睹為快。一、JDK11新特性一覽
181: Nest-Based Access Control
309: Dynamic Class-File Constants
315: Improve Aarch64 Intrinsics
318: Epsilon: A No-Op Garbage Collector
320: Remove the Java EE and CORBA Modules
321: HTTP Client (Standard)
323: Local-Variable Syntax for Lambda Parameters
324: Key Agreement with Curve25519 and Curve448
327: Unicode 10
328: Flight Recorder
329: ChaCha20 and Poly1305 Cryptographic Algorithms
330: Launch Single-File Source-Code Programs
331: Low-Overhead Heap Profiling
332: Transport Layer Security (TLS) 1.3
333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
335: Deprecate the Nashorn JavaScript Engine
336: Deprecate the Pack200 Tools and API
二、JDK11發(fā)布計劃日期 | 階段 | 說明 |
---|---|---|
2018/06/28 | Rampdown Phase One (fork from main line) | 對進(jìn)入Rampdown階段的變化會應(yīng)用越來越嚴(yán)格的審查。在階段1中,只能修復(fù) P1-P3 錯誤。 |
2018/07/26 | Rampdown Phase Two | 在階段2中,只能修復(fù) showstopper 錯誤 |
2018/08/16 | Initial Release Candidate | |
2018/08/30 | Final Release Candidate | 在此階段必須宣布最終候選版的發(fā)布日期并提交以進(jìn)行測試 |
2018/09/25 | General Availability | 最終版本,可在生產(chǎn)環(huán)境正式使用 |
Java的類型文件格式將被拓展,支持一種新的常量池格式:CONSTANT_Dynamic,加載CONSTANT_Dynamic會將創(chuàng)建委托給bootstrap方法。
目標(biāo)其目標(biāo)是降低開發(fā)新形式的可實現(xiàn)類文件約束帶來的成本和干擾。
JEP 315: Improve Aarch64 Intrinsics(改進(jìn) Aarch64 函數(shù)) JEP 318: Epsilon: A No-Op Garbage Collector(Epsilon — 一個無操作的垃圾收集器)JDK上對這個特性的描述是:開發(fā)一個處理內(nèi)存分配但不實現(xiàn)任何實際內(nèi)存回收機制的GC,一旦可用堆內(nèi)存用完,JVM就會退出。
如果有System.gc()的調(diào)用,實際上什么也不會發(fā)生(這種場景下和-XX:+DisableExplicitGC效果一樣),因為沒有內(nèi)存回收,這個實現(xiàn)可能會警告用戶嘗試強制GC是徒勞。
用法非常簡單:
-XX:+UseEpsilonGC。動機
提供完全被動的GC實現(xiàn),具有有限的分配限制和盡可能低的延遲開銷,但代價是內(nèi)存占用和內(nèi)存吞吐量。
眾所周知,Java實現(xiàn)可廣泛選擇高度可配置的GC實現(xiàn)。 各種可用的收集器最終滿足不同的需求,即使它們的可配置性使它們的功能相交。 有時更容易維護多帶帶的實現(xiàn),而不是在現(xiàn)有GC實現(xiàn)上堆積另一個配置選項。
它的主要用途如下:
性能測試(它可以幫助過濾掉GC引起的性能假象);
內(nèi)存壓力測試(例如,知道測試用例應(yīng)該分配不超過1 GB的內(nèi)存,我們可以使用-Xmx1g配置-XX:+UseEpsilonGC,如果違反了該約束,則會heap dump并崩潰);
非常短的JOB任務(wù)(對于這種任務(wù),接受GC清理堆那都是浪費空間);
VM接口測試;
Last-drop 延遲&吞吐改進(jìn);
JEP 320: Remove the Java EE and CORBA Modules(刪除 Java EE 和 CORBA 模塊)Java EE和CORBA兩個模塊在JDK9中已經(jīng)標(biāo)記"deprecated",在JDK11中正式移除。JDK中deprecated的意思是在不建議使用,在未來的release版本會被刪除。
動機JavaEE由4部分組成:
JAX-WS (Java API for XML-Based Web Services),
JAXB (Java Architecture for XML Binding)
JAF (the JavaBeans Activation Framework)
Common Annotations.
但是這個特性和JavaSE關(guān)系不大。并且JavaEE被維護在Github(https://github.com/javaee)中,版本同步造成維護困難。最后,JavaEE可以多帶帶引用,maven中心倉庫也提供了JavaEE(http://mvnrepository.com/arti...),所以沒必要把JavaEE包含到JavaSE中。
至于CORBA,使用Java中的CORBA開發(fā)程序沒有太大的興趣。因此,在JavaEE就把CORBA標(biāo)記為"Proposed Optional",這就表明將來可能會放棄對這些技術(shù)的必要支持。
JEP 321: HTTP Client (Standard)(標(biāo)準(zhǔn)HTTP客戶端)將JDK9引進(jìn)并孵化的HTTP客戶端API作為標(biāo)準(zhǔn),即HTTP/2 Client。它定義了一個全新的實現(xiàn)了HTTP/2和WebSocket的HTTP客戶端API,并且可以取代HttpURLConnection。
動機
已經(jīng)存在的HttpURLConnection有如下問題:
在設(shè)計時考慮了多種協(xié)議,但是現(xiàn)在幾乎所有協(xié)議現(xiàn)已不存在。
API早于HTTP/1.1并且太抽象;
使用很不友好;
只能以阻塞模式工作;
非常難維護;
JEP 323: Local-Variable Syntax for Lambda Parameters(用于 Lambda 參數(shù)的局部變量語法)在聲明隱式類型的lambda表達(dá)式的形參時允許使用var。
動機lamdba表達(dá)式可能是隱式類型的,它形參的所有類型全部靠推到出來的。隱式類型lambda表達(dá)式如下:
(x, y) -> x.process(y)
Java SE 10讓隱式類型變量可用于本地變量:
var foo = new Foo(); for (var foo : foos) { ... } try (var foo = ...) { ... } catch ...
為了和本地變量保持一致,我們希望允許var作為隱式類型lambda表達(dá)式的形參:
(var x, var y) -> x.process(y)
統(tǒng)一格式的一個好處就是modifiers和notably注解能被加在本地變量和lambda表達(dá)式的形參上,并且不會丟失簡潔性:
@Nonnull var x = new Foo(); (@Nonnull var x, @Nullable var y) -> x.process(y)JEP 324: Key Agreement with Curve25519 and Curve448(Curve25519 和 Curve448 算法的密鑰協(xié)議)
用RFC 7748中描述到的 Curve25519 和Curve448 實現(xiàn)秘鑰協(xié)議。RFC 7748定義的秘鑰協(xié)商方案更高效,更安全。這個JEP的主要目標(biāo)就是為這個標(biāo)準(zhǔn)定義API和實現(xiàn)。
動機密碼學(xué)要求使用 Curve25519 和Curve448 是因為它們的安全性和性能。JDK會增加兩個新的接口XECPublicKey 和 XECPrivateKey,示例代碼如下:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("XDH"); NamedParameterSpec paramSpec = new NamedParameterSpec("X25519"); kpg.initialize(paramSpec); // equivalent to kpg.initialize(255) // alternatively: kpg = KeyPairGenerator.getInstance("X25519") KeyPair kp = kpg.generateKeyPair(); KeyFactory kf = KeyFactory.getInstance("XDH"); BigInteger u = ... XECPublicKeySpec pubSpec = new XECPublicKeySpec(paramSpec, u); PublicKey pubKey = kf.generatePublic(pubSpec); KeyAgreement ka = KeyAgreement.getInstance("XDH"); ka.init(kp.getPrivate()); ka.doPhase(pubKey, true); byte[] secret = ka.generateSecret();JEP 327: Unicode 10
更新平臺API支持Unicode 10.0版本(Unicode 10.0概述:Unicode 10.0 增加了8518 個字符, 總計達(dá)到了136,690個字符. 并且增加了4個腳本, 總結(jié)139個腳本, 同時還有56個新的emoji表情符號。參考:http://unicode.org/versions/U...)。
動機Unicode是一個不斷進(jìn)化的工業(yè)標(biāo)準(zhǔn),因此必須不斷保持Java和Unicode最新版本同步。
JEP 328: Flight Recorder(飛行記錄器)提供一個低開銷的,為了排錯Java應(yīng)用問題,以及JVM問題的數(shù)據(jù)收集框架,希望達(dá)到的目標(biāo)如下:
提供用于生產(chǎn)和消費數(shù)據(jù)作為事件的API;
提供緩存機制和二進(jìn)制數(shù)據(jù)格式;
允許事件配置和事件過濾;
提供OS,JVM和JDK庫的事件;
動機排錯,監(jiān)控,性能分析是整個開發(fā)生命周期必不可少的一部分,但是某些問題只會在大量真實數(shù)據(jù)壓力下才會發(fā)生在生產(chǎn)環(huán)境。
Flight Recorder記錄源自應(yīng)用程序,JVM和OS的事件。 事件存儲在一個文件中,該文件可以附加到錯誤報告中并由支持工程師進(jìn)行檢查,允許事后分析導(dǎo)致問題的時期內(nèi)的問題。工具可以使用API從記錄文件中提取信息。
JEP 329: ChaCha20 and Poly1305 Cryptographic Algorithms(ChaCha20 和 Poly1305 加密算法)實現(xiàn)RFC 7539中指定的 ChaCha20 和 ChaCha20-Poly1305 兩種加密算法。
動機唯一一個其他廣泛采用的RC4長期以來一直被認(rèn)為是不安全的,業(yè)界一致認(rèn)為當(dāng)下ChaCha20-Poly1305是安全的。
JEP 330: Launch Single-File Source-Code Programs(啟動單一文件的源代碼程序)增強Java啟動器支持運行單個Java源代碼文件的程序。
動機單文件程序是指整個程序只有一個源碼文件,通常是早期學(xué)習(xí)Java階段,或者寫一個小型工具類。以HelloWorld.java為例,運行它之前需要先編譯。我們希望Java啟動器能直接運行這個源碼級的程序:
java HelloWorld.java
等價于:
javac -dHelloWorld.java java -cp helloWorld java Factorial.java 3 4 5
等價于:
javac -dFactorial.java java -cp Factorial 3 4 5
到JDK10為止,Java啟動器能以三種方式運行:
啟動一個class文件;
啟動一個JAR中的main方法類;
啟動一個模塊中的main方法類;
JDK11再加一個,即第四種方式:啟動一個源文件申明的類。
JEP 331: Low-Overhead Heap Profiling(低開銷的 Heap Profiling)提供一種低開銷的Java堆分配采樣方法,得到堆分配的Java對象信息,可通過JVMTI訪問。希望達(dá)到的目標(biāo)如下:
足夠低的開銷,可以默認(rèn)且一直開啟;
能通過定義好的程序接口訪問;
能采樣所有分配;
能給出生存和死亡的Java對象信息;
動機
對用戶來說,了解它們堆里的內(nèi)存是很重要的需求。目前有一些已經(jīng)開發(fā)的工具,允許用戶窺探它們的堆,比如:Java Flight Recorder, jmap, YourKit, 以及VisualVM tools.。但是這工具都有一個很大的缺點:無法得到對象的分配位置。headp dump以及heap histo都沒有這個信息,但是這個信息對于調(diào)試內(nèi)存問題至關(guān)重要。因為它能告訴開發(fā)者,他們的代碼發(fā)生(尤其是壞的)分配的確切位置。
JEP 332: Transport Layer Security (TLS) 1.3(支持 TLS 1.3)實現(xiàn)TLS協(xié)議1.3版本。(TLS允許客戶端和服務(wù)端通過互聯(lián)網(wǎng)以一種防止竊聽,篡改以及消息偽造的方式進(jìn)行通信)。
動機TLS 1.3是TLS協(xié)議的重大改進(jìn),與以前的版本相比,它提供了顯著的安全性和性能改進(jìn)。其他供應(yīng)商的幾個早期實現(xiàn)已經(jīng)可用。我們需要支持TLS 1.3以保持競爭力并與最新標(biāo)準(zhǔn)保持同步。這個特性的實現(xiàn)動機和Unicode 10一樣,也是緊跟歷史潮流。
JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (可伸縮低延遲垃圾收集器)ZGC:這應(yīng)該是JDK11最為矚目的特性,沒有之一。但是后面帶了Experimental,說明還不建議用到生產(chǎn)環(huán)境。看看官方對這個特性的目標(biāo)描述:
GC暫停時間不會超過10ms;
即能處理幾百兆小堆,也能處理幾個T的大堆(OMG);
和G1相比,應(yīng)用吞吐能力不會下降超過15%;
為未來的GC功能和利用colord指針以及Load barriers優(yōu)化奠定基礎(chǔ);
初始只支持64位系統(tǒng);
動機GC是Java主要優(yōu)勢之一。然而,當(dāng)GC停頓太長,就會開始影響應(yīng)用的響應(yīng)時間。消除或者減少GC停頓時長,Java將對更廣泛的應(yīng)用場景是一個更有吸引力的平臺。此外,現(xiàn)代系統(tǒng)中可用內(nèi)存不斷增長, 用戶和程序員希望JVM能夠以高效的方式充分利用這些內(nèi)存,并且無需長時間的GC暫停時間。
ZGC一個并發(fā),基于region,壓縮型的垃圾收集器,只有root掃描階段會STW,因此GC停頓時間不會隨著堆的增長和存活對象的增長而變長。
ZGC和G1停頓時間比較:
ZGC avg: 1.091ms (+/-0.215ms) 95th percentile: 1.380ms 99th percentile: 1.512ms 99.9th percentile: 1.663ms 99.99th percentile: 1.681ms max: 1.681ms G1 avg: 156.806ms (+/-71.126ms) 95th percentile: 316.672ms 99th percentile: 428.095ms 99.9th percentile: 543.846ms 99.99th percentile: 543.846ms max: 543.846ms
用法:
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
因為ZGC還處于實驗階段,所以需要通過JVM參數(shù)UnlockExperimentalVMOptions 來解鎖這個特性。
JEP 335: Deprecate the Nashorn JavaScript Engine(棄用 Nashorn JavaScript 引擎) JEP 336: Deprecate the Pack200 Tools and API(棄用 Pack200 工具和 API)參考:http://openjdk.java.net/proje...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77284.html
摘要:從版本開始,不再單獨發(fā)布或者版本了,有需要的可以自己通過去定制官方解讀官方細(xì)項解讀穩(wěn)步推進(jìn)系列六的小試牛刀一文讀懂的為何如此高效棄用引擎 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性 序 本文主要講述一下Java11的新...
摘要:新特性概述系列一安裝及使用系列二運行系列三模塊系統(tǒng)精要系列四更新系列五系列六系列七系列八系列九與的區(qū)別遷移注意事項參數(shù)遷移相關(guān)選項解析使用構(gòu)建實例使用示例帶你提前了解中的新特性 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...
摘要:的這個特性新增了兩個參數(shù)分別是及,設(shè)置為的話,表示禁用。語法層面引入了版本的層面引入了,引入,讓支持,對等新增方法方面引入了版本的,不過的沒有另外主要對及進(jìn)行了改進(jìn)其中對支持了,默認(rèn)是開啟,使用可以禁用對于則新增支持以及特性 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新...
摘要:前言線程中的包里面都是類都是針對多線程下的原子變量,有包括等等多種變量的原子化實現(xiàn)。這也會對理解現(xiàn)實場景中,多線程程序原子化使用某個資源也有更好的理解。 前言 Java線程中的java.util.concurrent.atomic包里面都是類都是針對多線程下的原子變量,有包括AtomicInteger, AtomicBoolean等等多種變量的原子化實現(xiàn)。 本次我們將會解讀Atomic...
摘要:已經(jīng)發(fā)布了,下一個版本也在準(zhǔn)備之中了。按照新的版本發(fā)布標(biāo)準(zhǔn),將在個月后到來,現(xiàn)在它還只有一部分新功能。據(jù)了解,將移除和最近更名為模塊同時也會移除,因此,也將失去一些功能。 Oracle 已經(jīng)發(fā)布了 Java Development Kit 10,下一個版本 JDK 11 也在準(zhǔn)備之中了。按照 Java 新的版本發(fā)布標(biāo)準(zhǔn),Java 11 將在 6 個月后到來,現(xiàn)在它還只有一部分新功能。 ...
閱讀 882·2021-09-02 09:55
閱讀 1519·2019-12-27 12:02
閱讀 1728·2019-08-30 14:24
閱讀 1151·2019-08-30 14:18
閱讀 2762·2019-08-29 13:57
閱讀 2209·2019-08-26 11:51
閱讀 1375·2019-08-26 10:37
閱讀 773·2019-08-23 16:09