動(dòng)蕩的 Java 今年將有哪些新變化握恳?

我們?cè)凇?018 編程語(yǔ)言流行度大調(diào)查》中談到瞒窒,在用戶最喜愛和最關(guān)注的編程語(yǔ)言中,Java獨(dú)領(lǐng)風(fēng)騷乡洼。其中崇裁,Java 9關(guān)注度不斷上升匕坯,62% 的人希望在 2018 年更多地關(guān)注 Java 9,此外有三分之一的參與者表示對(duì)即將到來(lái)的Java 10 和 11版本很感興趣拔稳。

在過(guò)去的一年中Java經(jīng)歷了一段時(shí)間的動(dòng)蕩葛峻,今年Java又有什么新進(jìn)展呢?本文讓我們一起來(lái)看看Java的狀況吧巴比。

以下為譯文:

2017年是Java界最動(dòng)蕩的一年泞歉。期待已久的Java 9帶來(lái)了許多的變化和有趣的新功能,同時(shí)Oracle也宣布了JDK最新的發(fā)布時(shí)間表匿辩。而這一切只是個(gè)開始腰耙。過(guò)去開發(fā)人員常常抱怨Java的發(fā)展速度不夠快。我認(rèn)為這些抱怨將在不久的將來(lái)消失铲球,甚至有可能帶來(lái)意外的驚喜挺庞。

從2018年開始,JDK建立了全新的發(fā)布時(shí)間表稼病。以前一次大的版本升級(jí)需要等好幾年选侨,現(xiàn)在則縮短為每隔6個(gè)月發(fā)布一次小版本。繼2017年9月Java 9發(fā)布之后然走,Java 10將在2018年3月發(fā)布援制,以及之后更多的新版本都將很快到來(lái)。

歡迎工作一到五年的Java工程師朋友們加入Java技術(shù)交流:611481448

群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用芍瑞、高并發(fā)晨仑、高性能及分布式、Jvm性能調(diào)優(yōu)拆檬、Spring源碼洪己,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來(lái)學(xué)習(xí)提升自己竟贯,不要再用"沒有時(shí)間“來(lái)掩飾自己思想上的懶惰答捕!趁年輕,使勁拼屑那,給未來(lái)的自己一個(gè)交代拱镐!

企業(yè)技術(shù)棧概覽

大多數(shù)企業(yè)項(xiàng)目不僅使用JDK,還依賴一系列的企業(yè)級(jí)函數(shù)庫(kù)持际,如Spring Boot沃琅、Java EE等,而這些函數(shù)庫(kù)也將在接下來(lái)幾個(gè)月中得到升級(jí)选酗。我將在本文中重點(diǎn)討論JDK阵难,但是首先讓我們來(lái)看看Java界中兩個(gè)主要的企業(yè)技術(shù)棧將有哪些變化岳枷。

Spring開發(fā)團(tuán)隊(duì)正在努力開發(fā)Spring Boot 2芒填,并在今年1月份發(fā)布了第一個(gè)RC版本呜叫。該團(tuán)隊(duì)并沒有在API方面做出重大的變化,也不打算在最終版本發(fā)布之前添加任何新功能殿衰。所以朱庆,如果你的項(xiàng)目中用到了Spring Boot,那么最好現(xiàn)在仔細(xì)研究新版本闷祥,并開始計(jì)劃現(xiàn)有Spring Boot應(yīng)用程序的更新娱颊。

在2017年年底,Oracle將Java EE標(biāo)準(zhǔn)移交給了由Eclipse基金會(huì)管理的EE4J項(xiàng)目凯砍。正如大家所料箱硕,移交這樣的一個(gè)大項(xiàng)目不可能在幾天內(nèi)完成,其中有很多組織和技術(shù)方面的工作需要完成悟衩。Java EE需要一個(gè)新名字并建立全新的開發(fā)流程剧罩。另一方面,保存在各種bug跟蹤工具中的源代碼和二進(jìn)制文件的移交仍在進(jìn)行中座泳。開發(fā)者還需要等待很長(zhǎng)一段時(shí)間惠昔,才能看到此次移交帶來(lái)的效果,以及更強(qiáng)大的社區(qū)參與挑势。

縮短JDK的發(fā)布和支持周期

Oracle去年宣布將在2018年內(nèi)發(fā)布兩個(gè)新的JDK版本镇防。以往Oracle一貫秉承緩慢的版本發(fā)布節(jié)奏,每隔幾年才發(fā)布一個(gè)主版本潮饱,其中包含大量的變化来氧,從今年起將改為每6個(gè)月發(fā)布一個(gè)較小的版本。這一變化可以加速Java平臺(tái)的創(chuàng)新香拉,還可以降低Java更新帶來(lái)的風(fēng)險(xiǎn)饲漾。而Java開發(fā)人員可以更加容易地熟悉小版本的最新變化,并將其應(yīng)用到項(xiàng)目中缕溉。

我認(rèn)為這對(duì)Java界是個(gè)非常積極的改變考传,它將為Java語(yǔ)言的開發(fā)增添新動(dòng)力,JDK團(tuán)隊(duì)也可以更快地適應(yīng)和創(chuàng)新证鸥。

JDK 10帶來(lái)的變化和新功能

由于發(fā)布周期較短僚楞,Java 10只包含少量的變化。請(qǐng)參照OpenJDK網(wǎng)站公布的有關(guān)JDK 10的最新消息(http://openjdk.java.net/projects/jdk/10/)枉层,其中包含12個(gè)JEP(JDK Enhancement Proposal泉褐,JDK改進(jìn)提案)。

其中最值得一提的變化是局部變量的類型推斷(JEP 286鸟蜡,http://openjdk.java.net/jeps/286)膜赃。其次你應(yīng)該了解下新增的基于時(shí)間的版本命名方式(JEP 322,http://openjdk.java.net/jeps/322)揉忘,以及G1(或稱Garbage First垃圾收集器)開始支持并行Full GC(JEP 307跳座,http://openjdk.java.net/jeps/307)端铛。

類型推斷

JDK 10終于引入了類型推斷。許多其他靜態(tài)類型語(yǔ)言很早就已經(jīng)支持這個(gè)功能了疲眷,眾多Java開發(fā)人員一直希望引入這項(xiàng)功能禾蚕。

JEP 286引入了關(guān)鍵字var,簡(jiǎn)化了局部變量的聲明狂丝,并由編譯器根據(jù)初始化代碼推斷變量的類型换淆。以往我們必須寫:

List paramNames = List.of("host.name","host.port");Configuration config = initializeConfig(paramNames);

現(xiàn)在可以簡(jiǎn)化為:

var paramNames = List.of("host.name","host.port");var config = initializeConfig(paramNames);

以上代碼中,關(guān)鍵字var替代了冗長(zhǎng)的變量聲明几颜。這可以增加代碼的閱讀性倍试,特別在代碼有合理的變量命名規(guī)則,并且變量?jī)H在聲明后使用幾次的情況下尤為明顯蛋哭。

如果想更深入地了解JEP 286以及使用方法易猫,可以參照Nicolai Parlog的這篇文章:https://blog.codefx.org/java/java-10-var-type-inference/。

基于時(shí)間的版本命名方式

從Java 10開始具壮,Java的版本號(hào)格式將發(fā)生變化准颓,以更好地支持基于時(shí)間的發(fā)布方式。

新的發(fā)布方式帶來(lái)的最大難點(diǎn)在于:版本的實(shí)際內(nèi)容可能發(fā)生變化棺妓。由于開始時(shí)唯一可以確定的只有新版本的發(fā)布時(shí)間攘已,所以如果新功能的開發(fā)時(shí)間比預(yù)期長(zhǎng),無(wú)法在新版本發(fā)布時(shí)完成怜跑,就不能進(jìn)入新版本样勃。因此版本號(hào)需要以時(shí)間點(diǎn)為準(zhǔn),而非版本內(nèi)包含的變更內(nèi)容性芬。

JEP 322定義的版本號(hào)格式為:$ 功能號(hào).$ 臨時(shí)號(hào).$ 更新號(hào).$ 補(bǔ)丁號(hào)峡眶,具體使用方法如下:

開發(fā)團(tuán)隊(duì)將在每6個(gè)月發(fā)布一個(gè)新功能版本,并將版本號(hào)的“$ 功能號(hào)”加1植锉。

2018年3月發(fā)布的版本為JDK 10辫樱,那么9月份的新版本就是JDK 11。開發(fā)團(tuán)隊(duì)在JEP 223中表示俊庇,他們希望每次新功能發(fā)布可以至少包含一到兩個(gè)重要功能狮暑。

“$ 臨時(shí)號(hào)”可以靈活使用,目前以6個(gè)月為期的發(fā)布方式中并沒有用到此項(xiàng)辉饱,所以到目前為止搬男,這個(gè)數(shù)字始終是0。

開發(fā)團(tuán)隊(duì)還將在功能發(fā)布之間穿插小的升級(jí)彭沼,這種升級(jí)不會(huì)包含不兼容的改動(dòng)缔逛。他們可以在功能發(fā)布后的1個(gè)月或3個(gè)月蛾茉,發(fā)布一次小的升級(jí)非洲,屆時(shí)可以將“$ 更新號(hào)”加1搀庶。

G1的并行Full GC

對(duì)于大多數(shù)開發(fā)者來(lái)說(shuō)屿脐,這只是個(gè)很小的變化。有的應(yīng)用程序甚至都不會(huì)注意到這個(gè)變化歉糜。

JDK 9中G1成了默認(rèn)的垃圾回收器。G1的設(shè)計(jì)目的旨在避免全面的垃圾回收望众,但是并不代表這種現(xiàn)象永遠(yuǎn)不會(huì)發(fā)生匪补。不幸的是,G1在執(zhí)行全面回收時(shí)僅使用了單線程的“標(biāo)記-清理-壓縮”算法烂翰,與之前的并行回收器相比這可能導(dǎo)致性能的下降夯缺。

JEP 307實(shí)現(xiàn)了這一算法的多線程版,從而解決了該問(wèn)題甘耿。從JDK 10開始踊兜,它將使用與Young GC和Mixed GC同樣多的線程數(shù)。

因此佳恬,如果應(yīng)用程序需要強(qiáng)制垃圾回收器執(zhí)行全面的回收捏境,那么JDK 10可以提高效率。

有關(guān)JDK 11的計(jì)劃

JDK 10還沒有正式發(fā)布毁葱,而距離JDK 11的發(fā)布只有7個(gè)月了垫言。所以,其開發(fā)團(tuán)隊(duì)已經(jīng)制定了幾個(gè)JEP的計(jì)劃倾剿,請(qǐng)參照2018年第二次新功能發(fā)布的信息:http://openjdk.java.net/projects/jdk/11/筷频。

除了刪除廢棄的Java EE和CORBA模型(JEP 320)、以及引入新的垃圾回收器(JEP 318)之外前痘,JDK 11還有可能引入動(dòng)態(tài)的類文件常量(JEP 309)凛捏,以及在隱含類型的匿名表達(dá)式中支持關(guān)鍵字var(JEP 323)。

JDK 11目前的范圍體現(xiàn)了縮短發(fā)布周期所帶來(lái)的優(yōu)勢(shì)芹缔,JEP 309和310引入了新功能坯癣,而其他兩個(gè)JEP則負(fù)責(zé)通過(guò)迭代方法改進(jìn)已有功能。

2017年9月JDK 9發(fā)布的時(shí)候最欠,Java EE和CORBA模塊就被廢棄了坡锡。一年以后,隨著JDK 11的發(fā)布窒所,JEP 320將把它們從JDK中刪除鹉勒。所以它們不會(huì)在Java中逗留太久,很快就要計(jì)劃刪除了吵取。

繼JEP 286在JDK 10中引入局部變量的類型推斷后禽额,JEP 323將進(jìn)一步提升這一功能。將來(lái)我們可以看到更多關(guān)于這方面的改進(jìn)。發(fā)布周期縮短后脯倒,團(tuán)隊(duì)可以分步在一次或多次功能發(fā)布中完成一個(gè)大功能实辑,從而降低發(fā)布的難度。

縮短支持周期需要快速適應(yīng)

Oracle在推出新的發(fā)布方式的同時(shí)藻丢,也改變了他們的支持方式剪撬。這個(gè)新的方式對(duì)短期發(fā)布和長(zhǎng)期發(fā)布的支持所有不同。

短期發(fā)布(如Java 9和10等)悠反,相關(guān)的面向公眾的支持會(huì)在下個(gè)版本發(fā)布時(shí)終止残黑。因此Java 9的支持將于2018年3月停止,而2018年9月后Java 10也無(wú)法再獲得支持斋否。

Java 11是一次長(zhǎng)期發(fā)布梨水。Oracle對(duì)這類發(fā)布的支持期限更長(zhǎng),但是到目前為止茵臭,他們還沒有宣布對(duì)Java 11的支持會(huì)持續(xù)到什么時(shí)候疫诽。

應(yīng)用程序開發(fā)者需要決定是否要每6個(gè)月更新一次Java版本,還是選擇多等幾年使用長(zhǎng)期的發(fā)布版本旦委。另外奇徒,Oracle鼓勵(lì)所有人使用Java SE的高級(jí)產(chǎn)品,它們的每個(gè)長(zhǎng)期發(fā)布版都包含至少5年的支持缨硝。

總結(jié)

過(guò)去逼龟,大量開發(fā)者抱怨Java的升級(jí)太慢,2018年后這種情況將有所改善追葡。全新的腺律、6個(gè)月為期的發(fā)布周期和相應(yīng)的支持模型,可以加速已有應(yīng)用程序的升級(jí)宜肉,并定期引入新功能匀钧。加上Java EE和Spring等已有框架的提升,Java界內(nèi)將出現(xiàn)全新的活力谬返。另一方面之斯,那些若干年才更新一次應(yīng)用程序的各大公司要做好心理準(zhǔn)備哦。

喜歡小編輕輕點(diǎn)個(gè)關(guān)注吧遣铝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末佑刷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子酿炸,更是在濱河造成了極大的恐慌瘫絮,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件填硕,死亡現(xiàn)場(chǎng)離奇詭異麦萤,居然都是意外死亡鹿鳖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門壮莹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)翅帜,“玉大人,你說(shuō)我怎么就攤上這事命满±缘危” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵胶台,是天一觀的道長(zhǎng)歼疮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)概作,這世上最難降的妖魔是什么腋妙? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任默怨,我火速辦了婚禮讯榕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匙睹。我一直安慰自己愚屁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布痕檬。 她就那樣靜靜地躺著霎槐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梦谜。 梳的紋絲不亂的頭發(fā)上丘跌,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音唁桩,去河邊找鬼闭树。 笑死,一個(gè)胖子當(dāng)著我的面吹牛荒澡,可吹牛的內(nèi)容都是我干的报辱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼单山,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碍现!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起米奸,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昼接,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后悴晰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辩棒,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了一睁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钻弄。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖者吁,靈堂內(nèi)的尸體忽然破棺而出窘俺,到底是詐尸還是另有隱情,我是刑警寧澤复凳,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布瘤泪,位于F島的核電站,受9級(jí)特大地震影響育八,放射性物質(zhì)發(fā)生泄漏对途。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一髓棋、第九天 我趴在偏房一處隱蔽的房頂上張望实檀。 院中可真熱鬧,春花似錦按声、人聲如沸膳犹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)须床。三九已至,卻和暖如春渐裂,著一層夾襖步出監(jiān)牢的瞬間豺旬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工柒凉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留族阅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓扛拨,卻偏偏與公主長(zhǎng)得像耘分,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绑警,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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