Java 11的期望
過去的幾年對(duì)Java世界一直是動(dòng)蕩不安的,在相當(dāng)多的發(fā)行版中添加了各種各樣的功能。
在開發(fā)人員社區(qū)中,人們逐漸意識(shí)到Java的開發(fā)速度不夠快。 在最初的20年中,Java平臺(tái)和Java開發(fā)工具包(JDK)經(jīng)歷了龐大,不規(guī)則且有些不可預(yù)測的步驟。 每個(gè)功能版本均由一個(gè)或多個(gè)重要功能驅(qū)動(dòng)。 因此,每次發(fā)布的計(jì)劃都被推遲了多次,以適應(yīng)這些功能的完成。
這種方法很好地提供了高質(zhì)量的大型新功能。 但是,較小的功能和應(yīng)用程序編程接口(API)僅在大型功能就緒時(shí)才能交付。 幾年前這是可以接受的,但現(xiàn)在已經(jīng)不行了。 如今,開發(fā)人員可以從各種以更快速度發(fā)展的平臺(tái)中進(jìn)行選擇。
在Sun Microsystems的領(lǐng)導(dǎo)下,最新版本是Java 1.6(又名Java 6),并且一直是五年來的最后一個(gè)主要Java版本。 Sun很快陷入麻煩,并最終被Oracle收購。
Java 7是Oracle領(lǐng)導(dǎo)下的第一個(gè)主要版本,其次是Java8。Java平臺(tái)的演進(jìn)是從Java 9開始的。就像Java 8都是關(guān)于lambda及其后果(功能編程,流和默認(rèn)方法)一樣。 ,Java 9主要涉及模塊。
在查看Java 11中將出現(xiàn)哪些令人興奮的新功能之前,讓我們首先看一下自Java 9以來逐漸引入的新功能。
Java 9中引入的功能
在計(jì)劃延遲后,Java 9于2017年9月21日發(fā)布。大多數(shù)開發(fā)人員認(rèn)為Java 9主要與模塊化有關(guān)。
Java 9版本及其功能是Java生態(tài)系統(tǒng)中的一個(gè)里程碑。 模塊是構(gòu)建和部署軟件的新方法。 他們幫助開發(fā)人員創(chuàng)建了體積更小的架構(gòu)更好的軟件。 引入的關(guān)鍵功能是Project Jigsaw,JShell和其他一些功能改進(jìn)。
Jigsaw項(xiàng)目是JDK 9中最大的功能,它為Java平臺(tái)帶來了模塊化。 大型代碼庫通常會(huì)導(dǎo)致復(fù)雜,糾結(jié)的“意大利面條代碼”。 封裝代碼而在系統(tǒng)的各個(gè)部分(Java歸檔文件或JAR文件)之間沒有明確的依賴關(guān)系是非常具有挑戰(zhàn)性的。
Jigsaw項(xiàng)目引入了類似于OSGi的模塊化,其中可以使用附加的模塊描述符來表達(dá)模塊之間的依賴關(guān)系。 拼圖項(xiàng)目是我們?cè)O(shè)想和開發(fā)大型應(yīng)用程序的方式的一種范式轉(zhuǎn)變。
在Java平臺(tái)上的20年開發(fā)已經(jīng)付出了巨大的代價(jià)。 許多類已經(jīng)糾纏在一起,沒有簡單的方法將私有實(shí)現(xiàn)類封裝在JDK中。 這鼓勵(lì)了依賴內(nèi)部細(xì)節(jié)的外部庫的泛濫,同時(shí)也阻礙了平臺(tái)的發(fā)展。
有了Project Jigsaw,現(xiàn)在Java 9附帶了大約90個(gè)不同的模塊,這些模塊將相關(guān)軟件包組合在一起。 只有從模塊顯式導(dǎo)出的軟件包才能從其他模塊訪問。 這使得內(nèi)部實(shí)現(xiàn)類的封裝成為現(xiàn)實(shí)。
此外,模塊可以指定對(duì)其他模塊的依賴關(guān)系。 就像JDK已被模塊化一樣,應(yīng)用程序也可以使用相同的技術(shù)。 您可以創(chuàng)建自己的模塊來封裝包并指定依賴關(guān)系,而不必使用脆弱的類路徑(它具有重復(fù)的,丟失的或不一致的JAR)。 這將使結(jié)構(gòu)更好,更可靠的應(yīng)用程序大有幫助。
Java 9還引入了JShell(交互式Java REPL) ,它是Java Shell的縮寫,也稱為REPL(讀取-評(píng)估-打印循環(huán)) 。 它增加了執(zhí)行不同Java構(gòu)造(如類,接口,枚舉,對(duì)象和語句)的功能。 JShell具有多種用途,最常見的用途是對(duì)某些代碼執(zhí)行快速測試以了解其工作方式。 無需先創(chuàng)建一個(gè)類,編譯它,然后運(yùn)行它。 只需使用JShell進(jìn)行快速測試即可。
引入了不同的功能改進(jìn),例如升級(jí)的網(wǎng)絡(luò)通信和對(duì)具有HTTP / 2.0支持的WebSockets的支持,增強(qiáng)的Process API,以簡化對(duì)操作系統(tǒng)進(jìn)程的控制和管理,以及Stream API的改進(jìn),以創(chuàng)建對(duì)集合的聲明性轉(zhuǎn)換管道。
Java 10中引入的功能
Java 10于2018年3月20日發(fā)布。由于發(fā)布周期很短,因此僅引入了一些功能。 由于它應(yīng)該是短期發(fā)布,因此JDK 10的公共更新計(jì)劃在六個(gè)月內(nèi)結(jié)束。 許多開發(fā)人員可能不會(huì)遷移到Java 10,因?yàn)樗麄兿M却齁ava 11。
長期以來,開發(fā)人員一直要求類型推斷 ,因?yàn)樵S多靜態(tài)類型語言已經(jīng)支持此功能。
通過JEP 286,引入了局部變量類型推斷 (JDK增強(qiáng)建議),新的關(guān)鍵字var縮短了局部變量的聲明。 它指示編譯器從其初始化程序中推斷局部變量的類型。
在Java 10之前,我們?cè)?jīng)這樣聲明變量:
URL simpleProgrammer = new URL(http://www.simpleprogrammer.com); URLConnection connection = simpleProgrammer.openConnection(); Reader reader = new BufferedReader( New InputStreamReader(connection.getInputStream()));使用Java 10,我們可以避免顯式類型聲明并編寫如下代碼:
var simpleProgrammer = new URL(http://www.simpleprogrammer.com); var connection = simpleProgrammer.openConnection(); var reader = new BufferedReader( New InputStreamReader(connection.getInputStream()));通過從變量聲明中刪除冗余,關(guān)鍵字var使Java不再那么冗長。 可以根據(jù)使用它的上下文隱式確定變量的類型。
通過基于時(shí)間的發(fā)行版本控制 ,已更改了Java版本號(hào)的格式,以改善對(duì)基于時(shí)間的發(fā)行模型的支持。 新發(fā)行模型最顯著的方面是發(fā)行內(nèi)容可能會(huì)更改。
開始時(shí),僅宣布發(fā)布日期。 但是,如果此新功能的開發(fā)花費(fèi)的時(shí)間比預(yù)期的長,則將從發(fā)布節(jié)奏中刪除該功能并將其不包括在內(nèi)。 因此,需要一種描述時(shí)間流逝的版本號(hào),而不是所包括的更改的性質(zhì)。
G1中的并行完整GC是一個(gè)有趣的功能,可能會(huì)在大爆炸功能宣布的噪音中迷失。 實(shí)際上,許多開發(fā)人員甚至可能沒有注意到它。
G1 GC是Java 8中引入的,它成為Java 9中的默認(rèn)垃圾收集器。通過設(shè)計(jì),它避免了完整的垃圾收集,但是仍然會(huì)發(fā)生。
G1僅使用單線程的mark-sweep-compact算法來執(zhí)行完整收集,這可能會(huì)導(dǎo)致性能問題。
Java 10通過使用多個(gè)線程執(zhí)行完整GC來解決此問題。 用于完全收集的線程數(shù)與用于年輕和混合收集的線程數(shù)相同。 現(xiàn)在,G1收集器的完整GC性能將得到顯著改善。
長期發(fā)布和支持周期
Java 10剛剛發(fā)布,但是我們現(xiàn)在迫切希望在今年晚些時(shí)候發(fā)布Java 11。 由于Oracle旨在加快發(fā)布周期,因此我們將以更快的方式提供更多功能。 與JDK 10不同,Java 11將是一個(gè)長期支持版本,并將成為Java Platform Standard Edition(Java SE)11的參考實(shí)現(xiàn)。
除了新的發(fā)行系列,Oracle還更改了其支持模型。 在新的方案中,短期發(fā)布和長期發(fā)布之間有所不同。 像Java 9和10這樣的短期發(fā)行版將接受公共更新,直到下一個(gè)功能發(fā)行版可用為止。 這意味著對(duì)Java 9的支持將于2018年3月終止,對(duì)Java 10的支持將于2018年9月之后終止。
Java 11有一個(gè)獨(dú)特的區(qū)別,那就是它是第一個(gè)長期發(fā)行版,并且將得到更長時(shí)間的支持。 Java 11將在2023年9月之前獲得Oracle的首要支持,并將支持?jǐn)U展到2026年。
Java 11的新增功能?
Java 11可能會(huì)推出一些關(guān)鍵功能。 通過刪除CORBA (人們?nèi)栽谑褂盟?#xff09;, Java EE模塊 (最近更名為Jakarta EE)和JavaFX ,Java 11可能還會(huì)失去一些功能。
二十多年前,CORBA是創(chuàng)建分布式應(yīng)用程序的一種流行方式,但我認(rèn)為現(xiàn)在它僅在舊版應(yīng)用程序中使用。 Java EE和JavaFX不再完全適合JDK堆棧,現(xiàn)在還有其他第三方庫提供這些功能。 讓我們?cè)敿?xì)考慮這些方面。
Java 11計(jì)劃的新功能
此時(shí),Java 11設(shè)置為引入以下功能:
- JEP 318:Epsilon:任意低開銷的垃圾收集器-Epsilon被稱為“無操作”收集器,它承諾在不實(shí)現(xiàn)任何實(shí)際內(nèi)存回收機(jī)制的情況下處理內(nèi)存分配。 如提案中所述,目標(biāo)是“以有限的內(nèi)存分配和內(nèi)存吞吐量為代價(jià),提供一種有限的分配限制和最低的延遲開銷的完全被動(dòng)的GC實(shí)現(xiàn)?!?Epsilon的特定用例包括性能測試,內(nèi)存壓力測試和虛擬機(jī)(VM)接口測試。 這對(duì)于壽命極短的作業(yè),最后一次延遲的延遲或最后一次吞吐量的改善也很有用。
- JEP 323:Lambda參數(shù)的局部變量語法-Java 10中引入了局部變量類型推斷,以減少與編寫Java代碼相關(guān)的冗長性。 Java 11通過允許使用var聲明隱式類型的lambda表達(dá)式的形式參數(shù)來向前邁出了一步。
當(dāng)前,您需要為lambda表達(dá)式指定參數(shù),如下所示:
(var a, var b) -> a.process(b)從Java 11開始,可以通過以下方式對(duì)其進(jìn)行簡化:
(a, b) -> a.process(b)雖然這導(dǎo)致語法的統(tǒng)一,但也可以在不簡短的情況下將修飾符應(yīng)用于局部變量和lambda格式。 不需要多余的語法構(gòu)造,因?yàn)榭梢詮纳舷挛闹型茢喑鏊鼈儭?
- JEP 309:動(dòng)態(tài)類文件常量-Java類文件格式將得到擴(kuò)展,以支持新的常量池形式CONSTANT_Dynamic。 這將減少創(chuàng)建新形式的可實(shí)現(xiàn)類文件常量的成本并減少創(chuàng)建中斷。 當(dāng)前,鏈接invokedynamic呼叫站點(diǎn)會(huì)將鏈接委托給引導(dǎo)方法。 這是一條JVM指令,它允許編譯器生成代碼,該代碼以比以前更寬松的規(guī)范來調(diào)用方法。 它提供了進(jìn)行動(dòng)態(tài)調(diào)用的功能,JVM不僅可以識(shí)別它,而且可以像優(yōu)化普通的老式靜態(tài)類型調(diào)用一樣進(jìn)行優(yōu)化。 現(xiàn)在,加載CONSTANT_Dynamic會(huì)將創(chuàng)建委托到引導(dǎo)方法。 新的常量池形式將為語言設(shè)計(jì)人員和編譯器實(shí)施人員提供更廣泛的表達(dá)方式和性能選擇。
更快的JDK發(fā)布和更短的支持周期
Oracle旨在加快發(fā)布周期,因此,我們將以更快的速度提供更多功能。 甲骨文去年宣布,2018年將發(fā)布兩個(gè)JDK版本,并且JDK 10已經(jīng)發(fā)布。 與緩慢發(fā)布周期的時(shí)代相比,這是一個(gè)可喜的變化,每幾年主要發(fā)布中都會(huì)引入大量功能。
現(xiàn)在,我們可以期待每六個(gè)月發(fā)布一個(gè)較小的功能。 這具有許多好處,包括Java平臺(tái)的更快創(chuàng)新。 降低了更新Java版本的風(fēng)險(xiǎn)。 較小的功能集使開發(fā)人員更容易采用。
更快的發(fā)布周期使Java成為一種敏捷而敏捷的語言。 它已成為一種動(dòng)態(tài)語言,可以響應(yīng)市場力量和開發(fā)人員社區(qū)的關(guān)注。
什么不會(huì)使Java 11發(fā)揮作用?
盡管Java 11可能會(huì)提供一些新功能,但它仍會(huì)比Java 10更為精簡,這主要是因?yàn)橐恍┻z留功能將被刪除。
JEP 320:刪除Java EE和CORBA模塊旨在從Java SE平臺(tái)和JDK中刪除Java EE和CORBA模塊。 實(shí)際上,這些模塊在Java 9中已經(jīng)過時(shí),聲明要在將來的版本中刪除它們。
隨著Java SE 6于2006年12月發(fā)布,其中包括了完整的Web服務(wù)堆棧。 這包括四種技術(shù):
- JAX-WS-XML Web服務(wù)的Java API
- JAXB-用于XML綁定的Java體系結(jié)構(gòu)
- JAF-JavaBeans激活框架
- Java通用注釋
從那時(shí)起,Java EE版本不斷發(fā)展,這使得Java SE難以在兩個(gè)Java版本中包含無關(guān)的技術(shù)和繁瑣的維護(hù)工作。 有第三方站點(diǎn)提供獨(dú)立版本的Java EE技術(shù),因此Oracle不再感到有義務(wù)將它們包含在Java SE或JDK中。
關(guān)于刪除CORBA,這項(xiàng)技術(shù)來自1990年代,如今幾乎沒有人使用它開發(fā)應(yīng)用程序。 由于CORBA的維護(hù)成本遠(yuǎn)遠(yuǎn)超過收益,因此Oracle認(rèn)為Java SE或JDK中沒有必要包含它。
準(zhǔn)備好使用Java 11
作為Java開發(fā)人員,您現(xiàn)在可以選擇每六個(gè)月更新一次Java版本,也可以選擇每隔幾年更新一次長期版本。
Oracle還建議每個(gè)人都遷移到其Java SE Advanced產(chǎn)品。 對(duì)于每個(gè)長期版本,它將至少提供五年的支持。 我認(rèn)為,如果仍使用Java 8或Java 9之類的早期版本,則可以等待更長的時(shí)間,然后直接遷移到Java 11。
Java 11將通過令人興奮的新功能(例如低開銷的垃圾收集器),使用具有較少冗長性的lambda表達(dá)式以及為語言設(shè)計(jì)人員和編譯器實(shí)施人員提供更多選擇的新功能,幫助開發(fā)人員創(chuàng)建更好的軟件。 Java世界的未來看起來令人興奮。
翻譯自: https://www.javacodegeeks.com/2018/06/expect-java-11.html
總結(jié)
以上是生活随笔為你收集整理的Java 11的期望的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新房备案时间(接房备案日期)
- 下一篇: java8 javafx_Java8中的