JavaRush /Java Blog /Random-TW /Java 12 來了:有什麼新變化?

Java 12 來了:有什麼新變化?

在 Random-TW 群組發布
因此,Java 出現在第 12 位。儘管這不是 LTS 版本(即不是長期支持,不是長期支持的版本)。版本11被認為是第一個具有 8 個版本的 LTS 版本年支持期),更新中出現了有趣的事。讓我們看看其中最重要的一些。回想一下,在 Java 中,變更提案縮寫為 jeps(來自 JDK 增強提案)。 Java 12 來了:有什麼新變化? - 1

最有趣的 Jep 的 JDK 12

189:Shenandoah:低暫停時間垃圾收集器(實驗性) 垃圾收集器 Shenandoah 使用一種新演算法,透過在運行 Java 執行緒的同時進行清理來減少運行時間。在這種情況下,無論堆的大小如何,Shenandoah 中的暫停時間都將相同。由於某種原因,Oracle 沒有將 Sheandoah 包含在其「官方」版本中,儘管開發人員認為此功能是新版本中最重要的功能之一。因此,如果您打算嘗試高級垃圾收集器,則需要使用第三方構建,例如Azul230:Microbenchmark Suite Microbenchmark 是衡量某些小元素效能的微基準。在 Java 中,它們是使用 JMH 框架編寫和運行的。從版本 12 開始,JMH 已新增至 JDK 中,並且已經編寫了測試,這使開發人員的工作更加輕鬆。 325:Switch 表達式(預覽) 使用 switch 語句編寫表達式的新形式。這個功能頁面提供了使用傳統 switch 的範例程式碼,其中不斷使用break使其變得不必要的冗長,導致頻繁的隨機錯誤。
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
更新的作者建議引入一種新形式的開關標籤“case L ->”,以明確指示如果該標籤合適,則僅執行該標籤右側的程式碼。因此,使用新語法可以顯著縮短上面顯示的程式碼:
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}
334:JVM Constants API 常數池包含所謂的可載入常數。這些是值,例如 String 類型或任何原始類型,以及執行時間工件,例如類別和方法。當使用類別文件時,程式設計師將受益於操作可載入常量的便捷工具。這個 jep 的作者開始透過引入新的基於值的符號連結類型來解決這個問題,每個符號連結都將描述一種特定類型的常數。創新代碼340:一個 AArch64 端口,而不是兩個 這個複雜的名稱隱藏了 Java 9 中出現的問題的解決方案,當時 Oracle 的 64 位元 ARM 連接埠和 Red Hat 的 aarch64 同時出現在套件中。而且,在 JDK 11 發佈時,連 Oracle 本身也不支援 64 位元版本的 Oracle ports。因此,現在 64 位元 Oracle 連接埠已被刪除,只剩下 32 位元 ARM32 和 64 位元、效率更高的 aarch64。 341:預設 CDS 存檔 一個非常好的更新,因為它確實加快了應用程式的啟動速度。眾所周知,當 Java 應用程式啟動時,就會開始載入大量的類,這是一個相當漫長的過程。CDS 代表類別資料共享,此功能可讓您使用這些相同類別的預設列表,將啟動時啟動的所有這些類別打包到一個特殊的類別資料共用檔案中。結果,應用程式啟動速度顯著提高。 344:G1 的可中止混合收集 G1 是一個垃圾收集器,成為 JDK 9 中的主要垃圾收集器,取代了平行 GC。在Java 10中,G1學會了在多執行緒中收集垃圾。然而,並不是每個人都對他的工作感到滿意;主要問題之一是長時間的停頓。現在它們可以被取消。G1 基於程序行為的分析,確定工作量,然後將「活動」物件收集到 Collection 集中,直到收集完所有內容,而不會停止。G1經常會錯過工作量的計算,並且工作時間過長。一旦實現 jep-344,G1 就可以切換到增量垃圾收集,如果下一步需要比合理時間更長的時間來完成,則可以中止該步驟。 346:立即從 G1 返回未使用的提交內存 還有前面提到的 G1 組譯器陣營中的一些更新。有時候會出現Java堆記憶體一堆,但沒有人用,這塊記憶體。在 Java 12 中,您現在可以將不活動記憶體「返回」給作業系統。以前,讓G1放棄記憶體的情況很少見,但現在一切都變得簡單了。使用新功能,如果自上次建置以來的時間間隔已過且不存在並發週期,則應用程式將定義為非活動狀態。另一種情況是,如果已監控一段時間的 getloadavg() 函數顯示負載低於設定的可接受閾值。如果發生兩個事件之一,則部分垃圾收集開始。 Java 12 沒有的功能:原始字串文字 許多開發人員對這個功能很感興趣,但它從未出現在這個版本中。它的作者認為它仍然需要工作。因此,我們敢於希望在 Java 的下一版本中出現一個方便處理字串文字的函數。對原始字串文字的支援使您可以使用任何語言的字串資訊。這消除了屏蔽的需要。在廣泛使用反斜線的正規表示式中以及使用反斜線作為分隔符號的 Windows 路徑中特別有用。也就是說,要避免這樣的結構: C:\\My\\Test\\Pack\\
每個程式設計師在工作中常常會遇到這樣或那樣的困難。有時它們與開發人員的經驗不足有關,但有時與工具本身的不完美有關。Java 是一門偉大的語言,但它還遠非完美。也許您已經遇到過 Java 中的一些東西並且知道您想要在您的“工具”(語言)中更改什麼?在評論中分享吧!

結論

Java 12 沒有發生革命。然而,沒有人計劃這麼做。然而,許多創新旨在優化應用程式的運作並加快工作速度,這是個好消息。順便說一句,IDEA 已經支援 JDK 12,因此您可以嘗試它的功能。當然,很少有更新直接影響初學者,儘管即使是剛開始學習 JavaRush 的人也可以使用新的開關(在設定 --enable-preview 標誌之後)。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION