Java 11正式發(fā)布,告訴你到底應(yīng)不應(yīng)該升級(jí)
美國(guó)當(dāng)?shù)貢r(shí)間9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式發(fā)布,可在生產(chǎn)環(huán)境中使用!
本文,我們來(lái)看一下Java 11到底是什么、他有什么特別的、到底要不要升級(jí)到Java 11。
Java 11有什么特別的
在Oracle官網(wǎng)中,進(jìn)入下載頁(yè)面,***個(gè)可供下載的JDK版本已經(jīng)提換成了Java SE 11 (LTS),這里的LTS表示Long-Term-Support。
本次發(fā)布的Java 11和2017年9月份發(fā)布的Java 9以及 2018年3月份發(fā)布的Java 10相比,其***的區(qū)別就是:在長(zhǎng)期支持(Long-Term-Support)方面,Oracle表示會(huì)對(duì)Java 11提供大力支持,這一支持將會(huì)持續(xù)至2026年9月。

上圖是一張Oracle 公布的對(duì)于各個(gè)版本的JDK的Support Roadmap。途中列舉了Java 6 - Java 12的正式發(fā)布時(shí)間以及支持計(jì)劃。
從中可以看出,在Java 11之前,Java 9和Java 10是不提供長(zhǎng)期支持的,而上一個(gè)提供長(zhǎng)期支持的版本是Java 8,其將會(huì)支持到2025年3月。
- 長(zhǎng)期支持,表示Oracle會(huì)對(duì)其做長(zhǎng)期的補(bǔ)丁、安全等擴(kuò)展支持等。
- 下一個(gè)提供長(zhǎng)期支持的版本將會(huì)是Java 17,其將于2021年發(fā)布。
新特性
新發(fā)布的Java 11在新特性方面,提供了17個(gè)JEP(JDK Enhancement Proposal 特性增強(qiáng)提議)

上圖是Oracle公布的Java 11包含的所有新特性,其中幾個(gè)重點(diǎn)的新特性為:
ZGC:可擴(kuò)展的低延遲垃圾收集器
ZGC是一款號(hào)稱可以保證每次GC的停頓時(shí)間不超過(guò)10MS的垃圾回收器,并且和當(dāng)前的默認(rèn)垃圾回收起G1相比,吞吐量下降不超過(guò)15%。
Epsilon:什么事也不做的垃圾回收器
Java 11還加入了一個(gè)比較特殊的垃圾回收器——Epsilon,該垃圾收集器被稱為“no-op”收集器,將處理內(nèi)存分配而不實(shí)施任何實(shí)際的內(nèi)存回收機(jī)制。 也就是說(shuō),這是一款不做垃圾回收的垃圾回收器。這個(gè)垃圾回收器看起來(lái)并沒(méi)什么用,主要可以用來(lái)進(jìn)行性能測(cè)試、內(nèi)存壓力測(cè)試等,Epsilon GC可以作為度量其他垃圾回收器性能的對(duì)照組。大神Martijn說(shuō),Epsilon GC至少能夠幫助理解GC的接口,有助于成就一個(gè)更加模塊化的JVM。
增強(qiáng)var用法
Java 10中增加了本地變量類型推斷的特性,可以使用var來(lái)定義局部變量。盡管這一特性被很多人詬病,但是并不影響Java繼續(xù)增強(qiáng)他的用法,在Java 11中,var可以用來(lái)作為L(zhǎng)ambda表達(dá)式的局部變量聲明。
移除Java EE和CORBA模塊
早在發(fā)布Java SE 9的時(shí)候,Java就表示過(guò),會(huì)在未來(lái)版本中將Java EE和CORBA模塊移除,而這樣舉動(dòng)終于在Java 11中實(shí)施。終于去除了Java EE和CORBA模塊。
HTTP客戶端進(jìn)一步升級(jí)
JDK 9 中就已對(duì) HTTP Client API 進(jìn)行標(biāo)準(zhǔn)化,然后通過(guò)JEP 110,在 JDK 10 中進(jìn)行了更新。在本次的Java 11的更新列表中,由以JEP 321進(jìn)行進(jìn)一步升級(jí)。該API通過(guò)CompleteableFutures提供非阻塞請(qǐng)求和響應(yīng)語(yǔ)義,可以聯(lián)合使用以觸發(fā)相應(yīng)的動(dòng)作。 JDK 11完全重寫了該功能。現(xiàn)在,在用戶層請(qǐng)求發(fā)布者和響應(yīng)發(fā)布者與底層套接字之間追蹤數(shù)據(jù)流更容易了,這降低了復(fù)雜性,并***程度上提高了HTTP / 1和HTTP / 2之間的重用的可能性。
到底要不要升級(jí)
2017年8月,JCP執(zhí)行委員會(huì)提出將Java的發(fā)布頻率改為每六個(gè)月一次。
2017年9月,Java 9發(fā)布。
2018年3月,Java 10發(fā)布。
2018年9月,Java 11發(fā)布。
大部分人使用的JDK版本還是Java 8及以下版本,甚至某些公司的生產(chǎn)環(huán)境使用的還是JDK 1.6。
那么,對(duì)于公司和開(kāi)發(fā)者來(lái)說(shuō),到底要不要在生產(chǎn)及開(kāi)發(fā)環(huán)境中升級(jí)和學(xué)習(xí)Java 11呢?
對(duì)于企業(yè)來(lái)說(shuō)
對(duì)于企業(yè)來(lái)說(shuō),生產(chǎn)環(huán)境中的JDK版本升級(jí)到Java 11還是有必要的。主要有兩個(gè)原因:
1、Oracle會(huì)對(duì)Java 11提供長(zhǎng)期支持,企業(yè)可以放心使用這一版本。并且下一個(gè)長(zhǎng)期支持的版本會(huì)在三年后發(fā)布,時(shí)間比較久遠(yuǎn)。
2、Java 11確實(shí)提供了一些比較不錯(cuò)的特性,尤其重要的是提供了ZGC,這是一款具有劃時(shí)代意義的垃圾回收器。優(yōu)點(diǎn)不再贅述。有了ZGC,JVM的性能瓶頸可以被突破。
對(duì)于開(kāi)發(fā)者來(lái)說(shuō)
在編碼方面,Java 11并沒(méi)有像Java 8那樣變化巨大,畢竟Java 8提供了函數(shù)式編程的能力,這也是很多開(kāi)發(fā)者學(xué)習(xí)Java 8的一個(gè)重要原因。
但是,Java 11也并不是完全沒(méi)有提升,至少在新版本中,Java開(kāi)發(fā)者終于可以擺脫老舊的HttpURLConnection了。新的HTTP API提供了對(duì)HTTOP/2等業(yè)界前沿標(biāo)準(zhǔn)的支持,提供了精簡(jiǎn)而又友好的API接口。
所以,綜上所述,無(wú)論是對(duì)于企業(yè)還是開(kāi)發(fā)者來(lái)說(shuō),升級(jí)Java 11都是有必要的,至少比Java 9和Java 10的必要性要大很多。至于這個(gè)必要性到底有多大呢,作者給一個(gè)簡(jiǎn)單的說(shuō)明:
如果你現(xiàn)在時(shí)候用的JDK/Java版本低于Java 8,先升級(jí)到Java 8。
如果你現(xiàn)在時(shí)候用的JDK/Java版本高于Java 7,那么可以考慮升級(jí)到Java 11了。
當(dāng)然,你可以直接從Java 6跳躍到Java 11。
那么問(wèn)題來(lái)了,你現(xiàn)在用的JDK/Java哪個(gè)版本?你準(zhǔn)備學(xué)習(xí)并使用Java 11嗎?
【本文是51CTO專欄作者Hollis的原創(chuàng)文章,作者微信公眾號(hào)Hollis(ID:hollischuang)】