一篇文章看清楚JDK13的特性!

1、switch優化更新

JDK11以及之前的版本:

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; 
}

JDK12版本

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);
 }

JDK13版本

static void howMany(int k) {
    System.out.println(
        switch (k) {
            case  1 -> "one"
            case  2 -> "two"
            default -> "many"
        }
    );}

2、文本塊升級

2.1、html例子
JDK13之前

String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, world</p>\n" +
              "    </body>\n" +
              "</html>\n";

JDK13優化的:

String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

2.2、SQL變化
JDK13之前

String query = "SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`\n" +
               "WHERE `CITY` = 'INDIANAPOLIS'\n" +
               "ORDER BY `EMP_ID`, `LAST_NAME`;\n";

JDK13

String query = """    
                SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
                WHERE `CITY` = 'INDIANAPOLIS'
                ORDER BY `EMP_ID`, `LAST_NAME`;
               """;

2.3、解釋
文本塊

"""
line 1
line 2
line 3
"""

相當於字符串文字:

"line 1\nline 2\nline 3\n"

3、動態CDS檔案

目標:
提高應用程序類 - 數據共享(AppCDS)的可用性。消除了用戶進行試運行以創建每個應用程序的類列表的需要。
-Xshare:dump
使用類列表由該選項啓用的靜態歸檔應繼續工作。這包括內置類加載器和用戶定義的類加載器的類。

4、取消使用未使用的內存

摘要:
增強 ZGC 以將未使用的堆內存返回給操作系統。
動機:
ZGC 目前沒有取消提交併將內存返回給操作系統,即使該內存長時間未使用。對於所有類型的應用程序和環境,此行爲並非最佳, 尤其是那些需要關注內存佔用的應用程序和環境 例如:通過使用支付資源的容器環境。應用程序可能長時間處於空閒狀態並與許多其 他應用程序共享或競爭資源的環境。應用程序在執行期間可能具有非常不同的堆空間要求。
例如,啓動期間所需的堆可能大於穩態執行期間稍後所需的堆。HotSpot 中的其他垃圾收集器,如 G1 和 Shenandoah,今天提供了這種功能,某些類別的用戶發現它非常有用。將此功能添加到 ZGC 將受到同一組用戶的歡迎。

5、重新實現舊版套接字API

摘要:
使用更簡單,更現代的實現替換 java.net.Socket 和 java.net.ServerSocketAPI 使用的底層實現,易於維護和調試。新的實 現很容易適應用戶模式線程,也就是光纖,目前正在 Project Loom 中進行探索。
動機:
在 java.net.Socket 和 java.net.ServerSocketAPI,以及它們的底層實現,可以追溯到JDK 1.0。實現是遺留 Java 和 C 代碼的混合,維護和調試很痛苦。該實現使用線程堆棧作爲 I/O 緩衝區,這種方法需要多次增加默認線程堆棧大小。
該實現使用本機數據 結構來支持異步關閉,這是多年來微妙可靠性和移植問題的根源。該實現還有幾個併發問題,需要進行大修才能正確解決。在未來的光 纖世界環境中,而不是在本機方法中阻塞線程,當前的實現不適用於目的。

6、FileSystems.newFileSystem新方法

核心庫 java.nio 中添加了 FileSystems.newFileSystem(Path,Map )方法
添加了三種新方法 java.nio.file.FileSystems,以便更輕鬆地使用將文件內容視爲文件系統的文件系統提供程序。
1、newFileSystem(Path)
2、newFileSystem(Path, Map)
3、newFileSystem(Path, Map, ClassLoader)
添加爲 newFileSystem(Path, Map) 已使用現有 newFileSystem(Path, ClassLoader) 並指定類加載器 的代碼創建源(但不是二進制)兼容性問題。例如,由於引用 newFileSystem 不明確,因此無法編譯以下內容:
FileSystem fs = FileSystems.newFileSystem(path, null);
爲了避免模糊引用,需要修改此代碼以將第二個參數強制轉換爲java.lang.ClassLoader。

7、nio新方法

核心庫 java.nio 中新的 java.nio.ByteBuffer 批量獲取/放置方法轉移字節而不考慮緩衝區位置。
在其他緩衝區類型定義絕對批量 get 和 put 傳輸連續字節序列的方法,而不考慮或影響緩衝區位置。

8、核心庫/ java.time

新日本時代名稱 Reiwa,此更新中添加了代表新 Reiwa 時代的實例。與其他時代不同,這個時代沒有公共領域。它可以通過調用 JapaneseEra.of(3) 或獲得 JapaneseEra.valueOf("Reiwa")。JDK13 及更高版本將有一個新的公共領域來代表這個時代。
NewEra 從 2019 年 5 月 1 日開始的日本時代的佔位符名稱“ ”已被新的官方名稱取代。依賴佔位符名稱(請參閱 JDK-8202088)獲取新時代單例( JapaneseEra.valueOf("NewEra"))的應用程序將不再起作用,請參閱 JDK-8205432。

9、核心庫/ java.util中:I18N

支持 Unicode 12.1,此版本將 Unicode支持升級到12.1,其中包括以下內容:
java.lang.Character 支持 12.1 級的 Unicode 字符數據庫,其中 12.0 從 11.0 開始增加 554 個字符,總共 137,928 個字符。這些新增內容包括 4 個新腳本,總共 150 個腳本,以及 61 個新的表情符號字符。U+32FF SQUARE ERA NAME REIWA從 12.0 開始,12.1 只添加一個字符。java.text.Bidi 和 java.text.Normalizer 類分別支持 12.0 級的 Unicode 標準附件, #9和#15。java.util.regexpackage 支持基於12.0 級 Unicode 標準附件#29 的擴展字形集羣。

10、熱點/ GC

10.1 JEP 351 ZGC 取消提交未使用的存儲器。 10.2 添加了 -XXSoftMaxHeapSize 標誌。 10.3 ZGC 支持的最大堆大小從 4 TB增加到 16 TB。

11、安全庫/ java.security

11.1 該 com.sun.security.crl.readtimeout 系統屬性設置爲 CRL 檢索的最大讀取超時,單位爲秒。如果尚未設置該屬性,或者其值爲負,則將其設置爲默認值 15秒,值 0 表示無限超時。
11.2 新的 keytool -showinfo -tls 用於顯示 TLS 配置信息的命令 keytool -showinfo -tls 添加了一個顯示 TLS 配置信息的新命令。歡迎大家關注我的公種浩【程序員追風】,整理了1000道2019年多家公司java面試題400多頁pdf文檔,文章都會在裏面更新,整理的資料也會放在裏面。
11.3 SunMSCAPI 提供程序現在支持以下一代加密(CNG)格式讀取私鑰。這意味着 CNG 格式的 RSA 和 EC 密鑰可從 Windows 密鑰庫加載,例如 “Windows-MY”。與 EC(簽名算法SHA1withECDSA,SHA256withECDSA等等)也支持。

12、刪除功能

刪除的部分功能:
12.1 核心庫 java.net 中,不再支持 Pre-JDK 1.4 SocketImpl 實現 java.net.SocketImpl 此版本已刪除對爲 JavaSE1.3 及更早版本編譯的自定義實現的支持。此更改對 SocketImpl 爲 Java SE 1.4(2002年發佈)或更新版本編譯的實現沒有影響。
12.2 核心庫 java.lang 中,刪除運行時跟蹤方法,過時的方法traceInstructions(boolean),並 traceMethodCalls(boolean) 已經從刪除 java.lang.Runtime 類。這些方法對許多版本都不起作用,它們的預期功能由J ava虛擬機工具接口(JVMTI)提供。

最後

歡迎大家一起交流,喜歡文章記得關注我點贊轉發喲,感謝支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章