收藏版:《JDK13新特性詳解》

做者:木九天
原文:https://my.oschina.net/mdxlcj/blog/3107021複製代碼

一、switch優化更新

JDK11以及以前的版本:html

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版本java

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.一、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.二、SQL變化bash

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.三、解釋異步

文本塊

""" line 1 line 2 line 3 """複製代碼

至關於字符串文字:

"line 1\nline 2\nline 3\n"複製代碼

三、動態CDS檔案

目標:

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

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

摘要:

加強ZGC以將未使用的堆內存返回給操做系統。複製代碼

動機:

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

五、從新實現舊版套接字API

摘要:

使用更簡單,更現代的實現替換java.net.Socket和java.net.ServerSocketAPI 使用的底層實現,易於維護和調試。新的實
現很容易適應用戶模式線程,也就是光纖,目前正在Project Loom中進行探索。複製代碼

動機:

在java.net.Socket和java.net.ServerSocketAPI,以及它們的底層實現,能夠追溯到JDK 1.0。實現是遺留Java和C代
碼的混合,維護和調試很痛苦。該實現使用線程堆棧做爲I/O緩衝區,這種方法須要屢次增長默認線程堆棧大小。該實現使用本機數據
結構來支持異步關閉,這是多年來微妙可靠性和移植問題的根源。該實現還有幾個併發問題,須要進行大修才能正確解決。在將來的光
纖世界環境中,而不是在本機方法中阻塞線程,當前的實現不適用於目的。複製代碼

六、FileSystems.newFileSystem新方法

核心庫/ java.nio中添加了FileSystems.newFileSystem(Path,Map <String,?>)方法

添加了三種新方法java.nio.file.FileSystems,以便更輕鬆地使用將文件內容視爲文件系統的文件系統提供程序。加q羣:478052716 免費領取(Java架構資料,視頻資料,BATJ面試資料)

一、newFileSystem(Path)
二、newFileSystem(Path, Map<String, ?>)
三、newFileSystem(Path, Map<String, ?>, ClassLoader)    添加爲newFileSystem(Path, Map<String, ?>) 已使用現有2-arg newFileSystem(Path, ClassLoader)並指定類加載器
的代碼建立源(但不是二進制)兼容性問題。null.例如,因爲引用newFileSystem不明確,所以沒法編譯如下內容:    FileSystem fs = FileSystems.newFileSystem(path, null);爲了不模糊引用,須要修改此代碼以將第二個參數強制轉換爲java.lang.ClassLoader。複製代碼

七、nio新方法

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

八、核心庫/ java.time

新日本時代名稱Reiwa,此更新中添加了表明新Reiwa時代的實例。與其餘時代不一樣,這個時代沒有公共領域。它能夠經過調用
JapaneseEra.of(3)或得到JapaneseEra.valueOf("Reiwa")。JDK13及更高版本將有一個新的公共領域來表明這個時代。
    NewEra從2019年5月1日開始的日本時代的佔位符名稱「 」已被新的官方名稱取代。依賴佔位符名稱(請參閱JDK-8202088)獲
取新時代單例(JapaneseEra.valueOf("NewEra"))的應用程序將再也不起做用。請參閱JDK-8205432複製代碼

九、核心庫/ 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的擴展字形集羣。複製代碼

十、熱點/ GC

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

十一、安全庫/ java.security

11.1 該com.sun.security.crl.readtimeout系統屬性設置爲CRL檢索的最大讀取超時,單位爲秒。若是還沒有設置該屬性,
或者其值爲負,則將其設置爲默認值15秒。值0表示無限超時。
    11.2 新的keytool -showinfo -tls用於顯示TLS配置信息的命令keytool -showinfo -tls添加了一個顯示TLS配置信
息的新命令。
    11.3 SunMSCAPI提供程序如今支持如下一代加密(CNG)格式讀取私鑰。這意味着CNG格式的RSA和EC密鑰可從Windows密鑰
庫加載,例如「Windows-MY」。與EC(簽名算法SHA1withECDSA,SHA256withECDSA等等)也支持。複製代碼

十二、刪除功能

刪除的部分功能:

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類。這些方法對許多版本都不起做用,它們
的預期功能由Java虛擬機工具接口(JVMTI)提供。複製代碼
相關文章
相關標籤/搜索