您好,登錄后才能下訂單哦!
目前最新JDK 11,Oracle會一直維護到2026年。
Unicode 10(version 10.0 of the Unicode Standard),Unicode是一個不斷在演進的行業標準,Java一直在與它保持一致兼容。
Java8已經更新了Unicode8.0-9.0,Java10更新后將達到16018個characters、18種blocks和10種scripts。
原來作為jdk補充的http類放在jdk.incubator.http
包中,現在統一改到java.net.http
包下,核心類有下面4個。
HttpClient
HttpRequest
HttpResponse
WebSocket
HttpClient?client?=?HttpClient.newBuilder()? ????????.version(HttpClient.Version.HTTP_1_1)? ????????.connectTimeout(Duration.ofSeconds(3))? ????????.build();? HttpRequest?request?=?HttpRequest.newBuilder().uri(URI.create("http://www.baidu.com")).build();? HttpResponse<String>?response?=?client.send(request,?HttpResponse.BodyHandlers.ofString());? System.out.println(response.statusCode());????//?200System.out.println(response.body());??????????//?百度頁面的html
java.util.Collection增加新方法toArray(IntFunction),集合轉數組的不二之選。
String增加lines\stripLeading\stripTrailing等,一般項目都有StringUtils類。
java.io.InputStream增加構造方法
java.nio包下面很大類擴展了方法Channels\XXXBuffer等
推薦一篇博客:Java 11 新增 API 初探,總結的比較細致。
JVM啟動參數新增-XX:+UseDynamicNumberOfCompilerThreads
,動態的控制編程線程的數量,原來的編譯線程默認會啟動大量造成cpu和memory浪費。
低功耗可擴展GC(ZGC)模塊是一個試驗性的并發GC,在線程執行是ZGC會做一些重型回收工作,如string表清理等。執行周期在10ms內,處理heaps大小從MB到TB范圍,目前只能支持linux和x64系統,除此外還有個處理memory分配的Epsilon GZ,有興趣的可以自己研究。
提供了一個低負載的堆分配采集分析程序:JVMTI,默認啟動方案可以持續工作且不造成服務器壓力,面向接口編程,能夠收集活著和死去的對象信息。
簡稱TLS1.3是網絡傳輸層協議,需要注意的它不兼容歷史版本而且官方承認有風險,希望后續能不斷優化。
嵌套是一種訪問控制上下文,它允許多個class同屬一個邏輯代碼塊,但是被編譯成多個分散的class文件,它們訪問彼此的私有成員無需通過編譯器添加訪問擴展方法。
例子:
/** ?*?@author:?Owen?Jia ?*?@time:?2019/11/7 ?*/public?class?NestBasedTest?{????public?static?class?Nest1?{????????private?int?varNest1;????????public?void?f()?throws?Exception?{????????????final?Nest2?nest2?=?new?Nest2();????????????//這里沒問題 ????????????nest2.varNest2?=?2;????????????final?Field?f2?=?Nest2.class.getDeclaredField("varNest2");????????????//下面代碼在java?8環境下會報錯,但在java?11中是沒問題的 ????????????f2.setInt(nest2,?1); ????????????System.out.println(nest2.varNest2); ????????} ????}????public?static?class?Nest2?{????????private?int?varNest2; ????}????public?static?void?main(String[]?args)?throws?Exception?{????????new?Nest1().f(); ????} }
這里要提一下Class類新增的方法:
//?獲取宿主類。非嵌套類的宿主類是它本身。public?Class<?>?getNestHost()//?判斷該類是否是某個類的嵌套類public?boolean?isNestmateOf(Class<?>?c)//?返回某個類的嵌套類數組。第?1?個固定是宿主類,之后的是該宿主類的嵌套成員,但不保證順序,同時也會包含自身public?Class<?>[]?getNestMembers()
對PKCS#1 v2.2內提供更多算法,如RSASSA-PSS簽名算法。同時新增ChaCha20和Poly1305密碼算法,通過Cipher.getInstance?
使用。還有 Curve25519和Curve448被添加。AES128和265也支持了Kerberos 5 encryption。
簡單理解就是lambda表達式的變量申明可以用var。
lst.forEach((var?x)?->?{ System.out.print(x); });
單個的*.java文件可以直接用java命令來執行,格式:java HelloWorld.java
。
Jvm啟動參數:-XX:StartFlightRecording
Java11中將這款原來商用的工具集成到jdk標準中了,它是一種低開銷的事件信息收集框架,用來對應用程序和JVM 進行故障檢查、分析,收集應用程序、JVM 和 OS的數據并保存在單獨的事件記錄文件中,故障發生后,能夠從事件記錄文件中提取出有用信息對故障進行分析。
還有很多其他更新就不一一介紹了,這些都是JDK標準包支持的基礎能力,得感謝Oracle持續對JDK發布的支持。完整的jdk11變化清單可以去官網查看;
Removal of com.sun.awt.AWTUtilities Class
Removal of Lucida Fonts from Oracle JDK
Removal of appletviewer Launcher
Oracle JDK's javax.imageio JPEG Plugin No Longer Supports Images with alpha
Removal of sun.misc.Unsafe.defineClass
Removal of Thread.destroy() and Thread.stop(Throwable) Methods
Removal of sun.nio.ch.disableSystemWideOverlappingFileLockCheck Property
Removal of sun.locale.formatasdefault Property
Removal of JVM-MANAGEMENT-MIB.mib
Removal of SNMP Agent
Remove the Java EE and CORBA Modules
Removal of JavaFX from the Oracle JDK
Removal of JMC from the Oracle JDK
Removal of Java Deployment Technologies
更多請查看官網
從Java 11后Oracle不再單獨發布JRE和Server JRE了,并統一JDK名稱為:Oracle JDK?。
另外Java 11及之后的版本,將不會再發布對32位操作系統支持的版本。
新啟的Java項目建議直接從Oracle JDK 11開始搭建,千萬不要猶豫,因為技術都是越新越強的。Java8就像晚期的大眾,而Java11卻是新興的特斯拉。
歷史的項目如果只是維護的話,干脆就放著運行不要動好了,等哪天決定重構了再考慮升級到Java11。因為最大的問題不是自己公司開發的Code不能遷移到高版本,而是項目中引入的第三方Jar,這個東西搞起來十分頭疼。焦作國醫堂胃腸醫院怎么樣:http://jz.lieju.com/zhuankeyiyuan/37174739.htm
升級最擔心的就是被刪除的模塊!
推薦IBM公司Liberty團隊提供了一個十分好用的檢測Toolkit程序,可以掃描應用程序二進制文件(.war),發現的任何潛在的Java 11問題并生成Html報告。絕對的大利器,詳細內容直接查看IBM官方介紹:Scanner Kit。
直接運行java -jar binaryAppScannerInstaller.jar
,按步驟安裝有個lisence聲明和目錄指定,默認目錄名wamt
。
參考文檔中會有使用詳細介紹,也可以參考下面測試例子(掃描很慢,要些耐心等):
java -jar binaryAppScanner.jar Root.war --analyzeJavaSE --sourceJava=oracle8 --targetJava=java11 --output=./java11/RootReport.html
查看幫助命令:
java -jar binaryAppScanner.jar Root.war --help --all
報告結果如下:
推薦Oracle JDK,因為更加穩定可靠。
只有Oracle JDK支持Solaris系統;
只有Oracle JDK才支持msi這樣的安裝程序;
Oracle JDK版本將每三年發布一次,而OpenJDK版本每三個月發布一次;
OpenJDK 是一個參考模型并且是完全開源的,而Oracle JDK是 OpenJDK的一個實現,并不是完全開源的;
Oracle JDK 比 OpenJDK 更穩定。OpenJDK和Oracle JDK的代碼幾乎相同,但建議您選擇Oracle JDK,因為它經過了徹底的測試和穩定修復;
在響應性和JVM性能方面,Oracle JDK與OpenJDK相比提供了更好的性能;
Oracle JDK不會為即將發布的版本提供長期支持,用戶每次都必須通過更新到最新版本獲得支持來獲取最新版本;
Oracle JDK根據二進制代碼許可協議獲得許可,而OpenJDK根據GPL v2許可獲得許可。Oracle公司很善于打官司,所以這點很重要。https://www.jianshu.com/p/77c2ae79d38b
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。