您好,登錄后才能下訂單哦!
今年三月份,Java發布了最新的版本Java14。本次發布的Java14更新了大量的內容,包括了JEP364、JEP365、JEP366、JEP367、打包功能、Nul、lPointerException異常信息、File API、switch語句、NUMA、JFR、Record、Solaris和SPARC端口、CMS垃圾收集器和instanceof。下面我們一起來看看這些更新的特性吧!
1、JEP364
JEP 364針對MacOS提供了ZGC垃圾收集器。它將ZGC垃圾收集器移植到了macOS。正如JEP351中的描述,該JEP的功能還包括使用收集器釋放未使用的設備內存。自Java13開始就支持此功能。ZGC的macOS實現包含兩個部分:在macOS上支持多重映射(multi-mapping)內存;ZGC支持不連續預留內存。
2、JEP365
JEP 365實際上和JEP 364一樣。JEP 365針對Windows提供了ZGC垃圾收集器支持。大多數ZGC代碼都與平臺無關,不需要為Windows修改。由于早期版本沒有預留內存必須的API,因此不支持Windows 10和Windows Server 1803之前的版本。ZGC的Windows實現進行了以下工作:支持多重映射內存、堆內存任意區域映射與取消映射操作和堆內存任意區域提交和撤銷提交操作等等。
3、JEP366
JEP366包含垃圾收集器,它的目標是棄用Parallel Scavenge和Serial Old垃圾收集算法的組合。除了棄用-XX:+UseParallelGC-XX :- UseParallelOldGC組合之外,-XX:UseParallelOld GC選項也被棄用,因為它的作用是取消老年代并行GC,支持老年代串行GC。因此,任何與UseUseParallelOldGC選項有關的用法都會輸出警告。
4、 JEP367
Pack 200是JavaSE 5.0中JSR 200實現的JAR文件壓縮方案。Java14從java.util.jar包中移除了pack200和unpack200工具以及pack200 API。這些工具和API在JavaSE 11中已廢棄,會在隨后的版本中移除。該JEP最終會從JDK主版本中移除3種類型。即之前標記 @Deprecated(forRemoval = true) 注解的基礎模塊:java.util.jar.Pack200、java.util.jar.Pack200.Packer、java.util.jar.Pack200.Unpacker
5、JEP368
在Java中,想要把HTML、XML、SQL或JSON代碼片段嵌入到代碼中通常難以閱讀和保留。并且為了克服此問題,Java14 引入了文本塊(Text Block)。文本塊包含零個或多個字符,這些字符由開始分隔符和結束分隔符包圍。
6、JEP370
許多流行的Java庫和程序都支持訪問外部存儲器,例如Ignite、MapDB、Memcached和Netty的ByteBuf API。這樣可以避免垃圾回收(比如維護大型緩存)、跨進程共享內存、通過將文件內存映射進行序列化和反序列化帶來的開銷以及引入的不可預測性。然而,Java API沒有提供適合的外存訪問解決方案。Java14通過JEP 370引入了高效的Java API,使得Java應用程序能夠安全有效地訪問Java堆外內存。外部存儲API提出了三個重要的抽象:MemorySegment、MemoryAddress和MemoryLayout。
7、打包功能
該特性是一種能夠簡化安裝過流程的打包功能,能解決應用所需的各種依賴項。有時僅提供一個JAR文件是不夠的,還需要提供原生安裝包。打包工具還可以作為其它技術的補充。jpackage工具把Java應用打包成平臺特定格式的包,其中包含應用所有的依賴項。即一組普通JAR文件或模塊的集合。支持的包格式: Linux:deb和rpm、macOS:pkg和dmg、Windows:MSI和EXE。
8、NullPointerException異常信息
Java14對JVM生成的NullPointerException異常信息進行了改進。程序提前終止時,新特性將為開發者和技術支持人員提供有用的信息。由于NPE幾乎可以出現在程序中的任何位置,嘗試捕獲它們并從中恢復通常不太可行。開發人員只能靠JVM確認NPE實際的發生時間。
9、File API
Java 14對MappedByteBuffer進行了更新,將部分文件數據加載到非易失性存儲器(NVM)中。NVM非易失性存儲是指類似ROM(只讀存儲器)、閃存、硬盤等存儲器,即使關閉電源數據也不會丟失。易失性存儲器比如RAM,如果關閉電源則無法保存數據。API唯一的變化是加入了一個新枚舉供FileChannel客戶端使用。表示請求映射位于NVM支持的文件系統而非傳統文件系統。
10、switch語句
Java14擴展了switch語句的功能,可以把switch作為表達式使用。支持箭頭(->)操作符生成或返回值。該特性在JDK12和JDK13中是預覽功能。
11、NUMA
非一致性內存訪問是一種將微處理器集群配置為多處理系統的方式,因此可以在本地共享內存、提高性能并擴展系統能力。Java14實現了NUMA內存分配優化,提升G1在大型計算機上表現。G1中的堆是一組固定大小區域。雖然指定-XX:+UseLargePages選項可以使用大頁面,多個區域可以組成一個物理頁面,但是一個區域通常是一組物理頁面。如果指定+XX:+UseNUMA選項,初始化JVM時上述將把區域平均分布在所有可用NUMA節點上。
12、JFR
Java14提供了一個新的API,JDK Flight Recorder(JFR)可以通過它持續監視進程內與進程外部應用程序。使用非Stream方式記錄相同的事件集,開銷可能甚至小于1%。事件流將與非Stream方式同時執行。jdk.jfr.consumer包位于 jdk.jfr模塊中,擴展了異步訂閱事件的功能。
13、Record
這是JDK14中一個預覽功能。使用record精簡類聲明代碼。定義一個數據類需要編寫很多低效重復的模板代碼:構造函數、accessor、equals()、hashCode()、toString()等。Java計劃使用record精簡這些重復代碼。
14、Solaris和SPARC端口
Java14棄用了Solaris/SPARC、Solaris/x64和Linux/SPARC端口,未來可能將它們移除。取消對這些端口的支持,能讓OpenJDK社區的貢獻者加速開發新功能,推動平臺向前發展。
15、CMS垃圾收集器
Java14刪除了CMS垃圾收集器。不僅停用CMS編譯,從源代碼中刪除了gc/cms目錄中的內容,而且刪除了僅限CMS的選項。
16、instanceof
instanceof操作符用來檢查對象引用是否為指定的Type實例,檢查的結果使用boolean返回。Java14對instanceof操作符進行了改進,加入了模式匹配。改進后的instanceof讓實現邏輯變得清晰,不用在條件判斷后再為對象強制類型轉換。
if (!(obj instanceof String str))
.. str.contains(..)..// 不必再聲明str對象進行強制類型轉換
} else
.. str....
}
關于Java14發布有哪些新的內容更新就分享到這里了,當然并不止以上和大家分析的辦法,不過小編可以保證其準確性是絕對沒問題的。希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。