摘要:的核心變化就是引入了一種新的編程組件,也就是模塊,按照的說法,它是一個(gè)可命名的自描述的代碼和數(shù)據(jù)集合。宣布會按照每六個(gè)月一次的節(jié)奏進(jìn)行發(fā)布,意味著是最后一次特性驅(qū)動(dòng)的版本發(fā)布,這反映出了目前管理的特點(diǎn)。
Java SE 9.0于2017年9月21日發(fā)布。JDK 9的核心變化就是引入了一種新的Java編程組件,也就是模塊,按照Oracle的說法,它是一個(gè)可命名的、自描述的代碼和數(shù)據(jù)集合。模塊技術(shù)的核心目標(biāo)是減少Java應(yīng)用和Java核心運(yùn)行時(shí)環(huán)境的大小與復(fù)雜性。為此,JDK本身進(jìn)行了模塊化,Oracle希望通過這種方式提升性能、安全性和可維護(hù)性。
為了支持Java 9的模塊,引入一種新的模塊化JAR文件形式,按照這種形式會在其根目錄中包含一個(gè)module-info.class文件。Oracle同時(shí)提供了工具,允許我們組合和優(yōu)化一組模塊,形成自定義的運(yùn)行時(shí)鏡像(image),這樣的鏡像不必將整個(gè)Java運(yùn)行時(shí)包含進(jìn)來。模塊化所帶來的其他變化包括從Java運(yùn)行時(shí)鏡像中移除了rt.jar和tools.jar。
Java社區(qū)進(jìn)程(JCP)執(zhí)行委員會的成員Ben Evans認(rèn)為最急需重構(gòu)的應(yīng)用恰好就是最適合進(jìn)行模塊化的應(yīng)用。如果你已經(jīng)備受Lava Flow/God Class/Stovepipe System地獄的折磨,而且你的利益相關(guān)方明確知道這一點(diǎn),那么你可能更容易說服他們進(jìn)行一次完整的底層重構(gòu),通過漸進(jìn)式的努力形成一個(gè)完成的模塊解決方案(而不是簡單重構(gòu)并遷移至Java 8)是值得去做的。
Oracle宣布Java 8會是一個(gè)長期支持的發(fā)布版本,會一直支持到2022年,因此Evans認(rèn)為很多的應(yīng)用將會停留在Java 8上,根本不會升級到Java 9。Evans補(bǔ)充說,有些應(yīng)用可能會讓開發(fā)和構(gòu)建工具鏈?zhǔn)褂肑ava 8版本,而在生產(chǎn)環(huán)境使用Java 9的運(yùn)行時(shí)。
對特定類型的應(yīng)用來說,這是很有幫助的。例如,我曾經(jīng)見到有的電子商務(wù)網(wǎng)站具有非常大的堆空間,其中包含了大約40G的字符串?dāng)?shù)據(jù)。Java 9的ompact Strings技術(shù)能夠?qū)⑦@種類型的內(nèi)存使用減半。這反過來又會對GC的性能帶來積極的影響。對于有些應(yīng)用來說(這可能就包括大型的Solr安裝環(huán)境及類似場景),單單這一項(xiàng)收益就值得將運(yùn)行時(shí)升級到Java 9。
Java 9使用G1作為默認(rèn)的垃圾收集器,替代了之前默認(rèn)使用的Parallel GC。Evans對這項(xiàng)變化的評論:
這項(xiàng)變更是很重要的,因?yàn)橄鄬τ赑arallel來說,G1會在應(yīng)用線程上做更多的事情,而Parallel幾乎沒有在應(yīng)用線程上做任何事情,它基本上完全依賴GC線程完成所有的內(nèi)存管理。這意味著切換到G1將會為應(yīng)用線程帶來額外的工作,從而直接影響到應(yīng)用的性能。
在很多(甚至可以說大多數(shù))場景中,這種額外的性能損耗都不是什么問題。但是,在這方面,我確實(shí)也曾經(jīng)見過從Parallel切換到G1時(shí),有一定比例的工作負(fù)載會引起性能的下降。對于這些應(yīng)用來說,這種性能下降是無法接受的,所以他們無法切換至G1收集器。隨著G1成為默認(rèn)的收集器,這將會影響到升級至Java 9的每個(gè)應(yīng)用。
JClarity的CEO Martijn Verburg認(rèn)為大型的代碼庫需要重構(gòu)為模塊的形式。Verburg給出了一些通用的模塊化建議,并且指出了開發(fā)人員在采用Java 9模塊系統(tǒng)時(shí),需要注意的一些事情:
閱讀Paul和Sander的圖書“Java 9 modularity”:它是本權(quán)威指南,提到了所有需要注意的地方,闡述了模塊、包以及JAR之間如何運(yùn)行的關(guān)聯(lián)關(guān)系;
在模塊邊界的地方,使用定義良好的接口并且針對這些接口編程;
不要拆分包(split package),也就是說一個(gè)包不要分散到兩個(gè)模塊中。Adopt OpenJDK有個(gè)探測工具,我們可以用它來探測已有的代碼;
確保不要存在循環(huán)依賴(Jigsaw不允許這樣);
模塊在源碼的布局上與我們已習(xí)慣的方式有所不同,需要確保構(gòu)建工具能夠進(jìn)行對應(yīng)的處理;
Jigsaw不支持多版本。
按照Verburg的說法,核心要點(diǎn)在于處理循環(huán)依賴、拆分包的問題,并確保針對接口進(jìn)行編碼。在嘗試使用Jigsaw模塊化重構(gòu)之前,針對已有的代碼庫,這些工作需要預(yù)先完成。他還澄清了一個(gè)誤解,那就是只有模塊化的應(yīng)用才能在Java 9上運(yùn)行。
由于誤解,在這方面有一種FUD(恐懼、不確定和懷疑)情緒,有人誤認(rèn)為在Java 9上運(yùn)行的必須是模塊化的應(yīng)用。事實(shí)并非如此,我們可以將已有的基于類路徑的應(yīng)用直接在Java 9上運(yùn)行。這里會有一些新的安全限制,因此我們需要設(shè)置一些特定的運(yùn)行時(shí)標(biāo)記(除非你重構(gòu)代碼,使用更安全的方式來訪問Java的內(nèi)部資源),即便如此,默認(rèn)的行為也只是警告,而不是完全阻止我們(Java 10的限制會更嚴(yán)格)。
Verburg認(rèn)為Jigsaw會是一個(gè)基石,會讓Java的演進(jìn)更快,這要?dú)w功于Mark Reinhold、Alan Bateman、Mandy Chung以及Jigsaw團(tuán)隊(duì)的其他成員多年來不知疲倦的工作,正是他們的努力使這一切得以實(shí)現(xiàn)。
Java 9還引入了jshell工具。這個(gè)命令行環(huán)境為Java平臺帶來了讀入-求值-打印-循環(huán)(Read-Eval-Print-Loop,REPL)功能。它的目的在于以即時(shí)結(jié)果和反饋的形式,簡化原型的實(shí)現(xiàn)并幫助我們探索語言在編碼時(shí)的可選項(xiàng)。
Verburg和Evans看到Java 9中包含了jShell都非常興奮,但令他們失望的是,HTTP/2只是作為Java 9的一個(gè)孵化模塊(incubator module)提供的。鑒于社區(qū)對這項(xiàng)特性的興趣和提供的幫助,Evans認(rèn)為Oracle應(yīng)該投入足夠的工程資源,將HTTP/2交付為GA版本。
JDK 9完整的變更列表可以在Oracle的站點(diǎn)上查閱。Oracle宣布會按照每六個(gè)月一次的節(jié)奏進(jìn)行發(fā)布,意味著Java 9是最后一次“keystone”特性驅(qū)動(dòng)的版本發(fā)布,這反映出了Oracle目前管理Java的特點(diǎn)。Java下一階段的演化將會按照更短的發(fā)布周期并且會按照更加面向特性的方式來發(fā)布。Java是否依然能夠在服務(wù)端技術(shù)中占據(jù)領(lǐng)導(dǎo)者地位尚有待觀察。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70608.html
摘要:發(fā)布史年月日,公司正式發(fā)布語言,這一天是的生日。年月日,發(fā)布,成為語言發(fā)展史上的又一里程碑。年月,發(fā)布,三個(gè)版本分別改為,,,。年月日,以億美元收購公司,并取得了的版權(quán)。年月日,發(fā)布,并改用的命名方式。 特此聲明:本文為本人公司郭總原創(chuàng)書籍的前言,該書還未出版,作為該書籍的初版在接下來的時(shí)間里,將免費(fèi)在本人微信公眾號內(nèi)不間斷更新與大家一起學(xué)習(xí)閱讀。喜歡學(xué)習(xí)的小伙伴可以搜索微信公眾號:程...
摘要:目標(biāo)發(fā)布目前有兩個(gè)主要功能針對局部變量類型推斷這將刪除大部分對象實(shí)例化所需的冗長的包含手動(dòng)類型信息整合源樹的庫即不同的庫將被合并成一個(gè)單一的存儲庫。特別是,承諾為局部變量實(shí)例化引入類型推斷機(jī)制,并將現(xiàn)有的存儲庫合并到一個(gè)存儲庫中。 JDK 10 何時(shí)發(fā)布? JDK 10 是 Java 10 標(biāo)準(zhǔn)版的部分實(shí)現(xiàn),將于 2018 年 3 月 20 日發(fā)布,改進(jìn)的關(guān)鍵點(diǎn)包括一個(gè)本地類型推斷、一...
摘要:物聯(lián)網(wǎng)已經(jīng)成為現(xiàn)實(shí)只要去年單獨(dú)參加過會議或者搜索過專門的技術(shù)網(wǎng)站,你現(xiàn)在會越來越清楚地注意到物物互聯(lián)正在蓬勃發(fā)展。有大量的討論在口頭上承認(rèn)了物聯(lián)網(wǎng),年這方面的激烈討論只會更多。兩年過去了,期待已久的更新應(yīng)該在月日發(fā)布。 導(dǎo)讀 如果你還在為Oracle收購Sun公司給Java社區(qū)的變化所糾結(jié),請站在Oracle的角度替它想想吧。2013年大部分時(shí)間里,Oracle都在與遺留的Java安...
摘要:近日宣布,他們將的發(fā)布頻率改為每六個(gè)月一次。該決定將在正式發(fā)布之后開始實(shí)行,也就是說,的下一個(gè)發(fā)布日期是年初。的版本將在月號發(fā)布。新的發(fā)布周期嚴(yán)格遵循時(shí)間點(diǎn),將在每年的月份和月份發(fā)布,相應(yīng)的版本號為等。 Oracle近日宣布,他們將Java的發(fā)布頻率改為每六個(gè)月一次。 JCP執(zhí)行委員會在八月份的會議上提到了這一說法,隨后,Oracle發(fā)言人Donald Smith在他的博客中確認(rèn)了這一...
摘要:雅虎從很早就開始招聘和培養(yǎng)研究型人才,雅虎研究院就是在這個(gè)過程中應(yīng)運(yùn)而生的。今天我就來說一說雅虎研究院的歷史,以及過去十多年間取得的成就,聊一聊如何通過引進(jìn)高級人才,迅速構(gòu)建起一支世界級的研發(fā)團(tuán)隊(duì)。 showImg(https://segmentfault.com/img/remote/1460000013995512); 作者:王下邀月熊 編輯:徐川 前端每周清單專注大前端領(lǐng)域內(nèi)容,...
閱讀 1398·2021-10-19 11:42
閱讀 735·2021-09-22 16:04
閱讀 1886·2021-09-10 11:23
閱讀 1865·2021-07-29 14:48
閱讀 1265·2021-07-26 23:38
閱讀 2827·2019-08-30 15:54
閱讀 1041·2019-08-30 11:25
閱讀 1710·2019-08-29 17:23