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