Java11的新特性

Java語(yǔ)言特性系列

本文主要講述一下Java11的新特性

版本號(hào)

java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
  • General-Availability Release版本是基于tag為jdk-11+28的版本編譯
  • 從version信息可以看出是build 11+28

特性列表

相關(guān)解讀Java Nestmate穩(wěn)步推進(jìn)睛低,Specification for JEP 181: Nest-based Access Control
簡(jiǎn)單的理解就是Class類(lèi)新增了getNestHost,getNestMembers方法

相關(guān)解讀Specification for JEP 309: Dynamic Class-File Constants (JROSE EDITS)
jvm規(guī)范里頭對(duì)Constant pool新增一類(lèi)CONSTANT_Dynamic

對(duì)于AArch64處理器改進(jìn)現(xiàn)有的string、array相關(guān)函數(shù)钱雷,并新實(shí)現(xiàn)java.lang.Math的sin骂铁、cos、log方法

引入名為Epsilon的垃圾收集器罩抗,該收集器不做任何垃圾回收拉庵,可用于性能測(cè)試、短生命周期的任務(wù)等套蒂,使用-XX:+UseEpsilonGC開(kāi)啟

將java9標(biāo)記廢棄的Java EE及CORBA模塊移除掉钞支,具體如下:(1)xml相關(guān)的,java.xml.ws, java.xml.bind操刀,java.xml.ws烁挟,java.xml.ws.annotation,jdk.xml.bind骨坑,jdk.xml.ws被移除撼嗓,只剩下java.xml,java.xml.crypto,jdk.xml.dom這幾個(gè)模塊欢唾;(2)java.corba且警,java.se.ee,java.activation礁遣,java.transaction被移除斑芜,但是java11新增一個(gè)java.transaction.xa模塊

相關(guān)解讀java9系列(六)HTTP/2 Client (Incubator)HTTP Client Examples and Recipes祟霍,在java9及10被標(biāo)記incubator的模塊jdk.incubator.httpclient押搪,在java11被標(biāo)記為正式,改為java.net.http模塊浅碾。

相關(guān)解讀New Java 11 Language Feature: Local-Variable Type Inference (var) extended to Lambda Expression Parameters
允許lambda表達(dá)式使用var變量大州,比如(var x, var y) -> x.process(y),如果僅僅是這樣寫(xiě)垂谢,倒是無(wú)法看出寫(xiě)var有什么優(yōu)勢(shì)而且反而覺(jué)得有點(diǎn)多此一舉厦画,但是如果要給lambda表達(dá)式變量標(biāo)注注解的話(huà),那么這個(gè)時(shí)候var的作用就突顯出來(lái)了(@Nonnull var x, @Nullable var y) -> x.process(y)

使用RFC 7748中描述的Curve25519和Curve448實(shí)現(xiàn)key agreement

升級(jí)現(xiàn)有的API滥朱,支持Unicode10.0.0

相關(guān)解讀Java 11 Features: Java Flight Recorder
Flight Recorder以前是商業(yè)版的特性根暑,在java11當(dāng)中開(kāi)源出來(lái),它可以導(dǎo)出事件到文件中徙邻,之后可以用Java Mission Control來(lái)分析排嫌。可以在應(yīng)用啟動(dòng)時(shí)配置java -XX:StartFlightRecording缰犁,或者在應(yīng)用啟動(dòng)之后淳地,使用jcmd來(lái)錄制怖糊,比如

$ jcmd <pid> JFR.start
$ jcmd <pid> JFR.dump filename=recording.jfr
$ jcmd <pid> JFR.stop

實(shí)現(xiàn) RFC 7539的ChaCha20 and ChaCha20-Poly1305加密算法

相關(guān)解讀Launch Single-File Source-Code Programs in JDK 11
有了這個(gè)特性,可以直接java HelloWorld.java來(lái)執(zhí)行java文件了颇象,無(wú)需先javac編譯為class文件然后再java執(zhí)行class文件伍伤,兩步合成一步

通過(guò)JVMTI的SampledObjectAlloc回調(diào)提供了一個(gè)開(kāi)銷(xiāo)低的heap分析方式

支持RFC 8446中的TLS 1.3版本

相關(guān)解讀JDK11的ZGC小試牛刀一文讀懂Java 11的ZGC為何如此高效

相關(guān)解讀Oracle棄用Nashorn JavaScript引擎遣钳,Oracle GraalVM announces support for Nashorn migration
廢除Nashorn javascript引擎扰魂,在后續(xù)版本準(zhǔn)備移除掉,有需要的可以考慮使用GraalVM

廢除了pack200以及unpack200工具以及java.util.jar中的Pack200 API蕴茴。Pack200主要是用來(lái)壓縮jar包的工具劝评,不過(guò)由于網(wǎng)絡(luò)下載速度的提升以及java9引入模塊化系統(tǒng)之后不再依賴(lài)Pack200,因此這個(gè)版本將其移除掉倦淀。

細(xì)項(xiàng)解讀

上面列出的是大方面的特性付翁,除此之外還有一些api的更新及廢棄,主要見(jiàn)What's New in JDK 11 - New Features and Enhancements以及90 New Features (and APIs) in JDK 11晃听,這里舉幾個(gè)例子。

添加項(xiàng)

  • Collection.toArray(IntFunction)
    @Test
    public void testCollectionToArray(){
        Set<String> names = Set.of("Fred", "Wilma", "Barney", "Betty");
        String[] copy = new String[names.size()];
        names.toArray(copy);
        System.out.println(Arrays.toString(copy));
        System.out.println(Arrays.toString(names.toArray(String[]::new)));
    }

Collection類(lèi)新增toArray(IntFunction)的default方法砰识,可以直接通過(guò)傳入IntFunction告知要轉(zhuǎn)換的目標(biāo)類(lèi)型

  • String.strip
    @Test
    public void testStrip(){
        String text = "  \u2000a  b  ";
        Assert.assertEquals("a  b",text.strip());
        Assert.assertEquals("\u2000a  b",text.trim());
        Assert.assertEquals("a  b  ",text.stripLeading());
        Assert.assertEquals("  \u2000a  b",text.stripTrailing());
    }

java11對(duì)String類(lèi)新增了strip能扒,stripLeading以及stripTrailing方法,除了strip相關(guān)的方法還新增了isBlank辫狼、lines初斑、repeat(int)等方法

  • 添加了Google Trust Services GlobalSign Root Certificates
  • 添加了GoDaddy Root Certificates
  • 添加了T-Systems, GlobalSign and Starfield Services Root Certificates
  • 添加了Entrust Root Certificates

移除項(xiàng)

  • 移除了com.sun.awt.AWTUtilities
  • 移除了sun.misc.Unsafe.defineClass,使用java.lang.invoke.MethodHandles.Lookup.defineClass來(lái)替代
  • 移除了Thread.destroy()以及 Thread.stop(Throwable)方法
  • 移除了sun.nio.ch.disableSystemWideOverlappingFileLockCheck膨处、sun.locale.formatasdefault屬性
  • 移除了jdk.snmp模塊
  • 移除了javafx见秤,openjdk估計(jì)是從java10版本就移除了,oracle jdk10還尚未移除javafx真椿,而java11版本則oracle的jdk版本也移除了javafx
  • 移除了Java Mission Control鹃答,從JDK中移除之后,需要自己?jiǎn)为?dú)下載
  • 移除了這些Root Certificates :Baltimore Cybertrust Code Signing CA突硝,SECOM 测摔,AOL and Swisscom

廢棄項(xiàng)

  • 廢棄了Nashorn JavaScript Engine
  • 廢棄了-XX+AggressiveOpts選項(xiàng)
  • -XX:+UnlockCommercialFeatures以及-XX:+LogCommercialFeatures選項(xiàng)也不再需要
  • 廢棄了Pack200工具及其API

小結(jié)

  • java11是java改為6個(gè)月發(fā)布一版的策略之后的第一個(gè)LTS(Long-Term Support)版本(oracle版本才有LTS),這個(gè)版本最主要的特性是:在模塊方面移除Java EE以及CORBA模塊解恰,在JVM方面引入了實(shí)驗(yàn)性的ZGC锋八,在API方面正式提供了HttpClient類(lèi)。
  • 從java11版本開(kāi)始护盈,不再單獨(dú)發(fā)布JRE或者Server JRE版本了挟纱,有需要的可以自己通過(guò)jlink去定制runtime image

doc

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市腐宋,隨后出現(xiàn)的幾起案子紊服,更是在濱河造成了極大的恐慌檀轨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件围苫,死亡現(xiàn)場(chǎng)離奇詭異裤园,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)剂府,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)拧揽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人腺占,你說(shuō)我怎么就攤上這事淤袜。” “怎么了衰伯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵铡羡,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我意鲸,道長(zhǎng)烦周,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任怎顾,我火速辦了婚禮读慎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘槐雾。我一直安慰自己夭委,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布募强。 她就那樣靜靜地躺著株灸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擎值。 梳的紋絲不亂的頭發(fā)上慌烧,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音鸠儿,去河邊找鬼杏死。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捆交,可吹牛的內(nèi)容都是我干的淑翼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼品追,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼玄括!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起肉瓦,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤遭京,失蹤者是張志新(化名)和其女友劉穎胃惜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哪雕,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡船殉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斯嚎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片利虫。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖堡僻,靈堂內(nèi)的尸體忽然破棺而出糠惫,到底是詐尸還是另有隱情,我是刑警寧澤钉疫,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布硼讽,位于F島的核電站,受9級(jí)特大地震影響牲阁,放射性物質(zhì)發(fā)生泄漏固阁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一城菊、第九天 我趴在偏房一處隱蔽的房頂上張望备燃。 院中可真熱鬧,春花似錦役电、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至唁奢,卻和暖如春霎挟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背麻掸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工酥夭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脊奋。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓熬北,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诚隙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讶隐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容