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