Java8很香但還是想升級到Java11批旺,教你怎么從Java8升級到Java11

Java11的新特性

1、更新支持到Unicode 10編碼


Unicode 10(version 10.0 of the Unicode Standard),Unicode是一個不斷在演進的行業(yè)標準,Java一直在與它保持一致兼容。

Java8已經(jīng)更新了Unicode8.0-9.0,Java10更新后將達到16018個characters译荞、18種blocks和10種scripts瓤的。

2、將Http Client作為JDK標準發(fā)布磁椒、


原來作為jdk補充的http類放在jdk.incubator.http包中堤瘤,現(xiàn)在統(tǒng)一改到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());? ? // 200

System.out.println(response.body());? ? ? ? ? // 百度頁面的html

3本辐、新增優(yōu)化很多方法


java.util.Collection增加新方法toArray(IntFunction),集合轉數(shù)組的不二之選医增。

String增加lines\stripLeading\stripTrailing等慎皱,一般項目都有StringUtils類。

java.io.InputStream增加構造方法

java.nio包下面很大類擴展了方法Channels\XXXBuffer等

4叶骨、支持動態(tài)分配 Compiler Threads


JVM啟動參數(shù)新增-XX:+UseDynamicNumberOfCompilerThreads茫多,動態(tài)的控制編程線程的數(shù)量,原來的編譯線程默認會啟動大量造成cpu和memory浪費忽刽。

5天揖、GC能力大幅提升


低功耗可擴展GC(ZGC)模塊是一個試驗性的并發(fā)GC,在線程執(zhí)行是ZGC會做一些重型回收工作跪帝,如string表清理等今膊。執(zhí)行周期在10ms內(nèi),處理heaps大小從MB到TB范圍伞剑,目前只能支持linux和x64系統(tǒng)斑唬,除此外還有個處理memory分配的Epsilon GZ,有興趣的可以自己研究黎泣。

6恕刘、堆分析能力提升:JVMTI


提供了一個低負載的堆分配采集分析程序:JVMTI,默認啟動方案可以持續(xù)工作且不造成服務器壓力抒倚,面向接口編程褐着,能夠收集活著和死去的對象信息。

7衡便、Transport Layer Security 1.3更新


簡稱TLS1.3是網(wǎng)絡傳輸層協(xié)議献起,需要注意的它不兼容歷史版本而且官方承認有風險,希望后續(xù)能不斷優(yōu)化镣陕。

8、嵌套訪問控制


嵌套是一種訪問控制上下文姻政,它允許多個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環(huán)境下會報錯鹊碍,但在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)

// 返回某個類的嵌套類數(shù)組侈咕。第 1 個固定是宿主類公罕,之后的是該宿主類的嵌套成員,但不保證順序耀销,同時也會包含自身

public Class<?>[] getNestMembers()

9楼眷、新增和優(yōu)化諸多加密算法


對PKCS#1 v2.2內(nèi)提供更多算法,如RSASSA-PSS簽名算法熊尉。同時新增ChaCha20和Poly1305密碼算法罐柳,通過Cipher.getInstance使用。還有 Curve25519和Curve448被添加狰住。AES128和265也支持了Kerberos 5 encryption张吉。

10、本地參數(shù)支持Lambda


簡單理解就是lambda表達式的變量申明可以用var催植。

lst.forEach((var x) -> {System.out.print(x);});復制代碼

11肮蛹、單java文件加載運行


單個的*.java文件可以直接用java命令來執(zhí)行,格式:java HelloWorld.java创南。

12伦忠、飛行記錄器分析工具


Jvm啟動參數(shù):-XX:StartFlightRecording

Java11中將這款原來商用的工具集成到jdk標準中了,它是一種低開銷的事件信息收集框架扰藕,用來對應用程序和JVM 進行故障檢查缓苛、分析,收集應用程序邓深、JVM 和 OS的數(shù)據(jù)并保存在單獨的事件記錄文件中未桥,故障發(fā)生后,能夠從事件記錄文件中提取出有用信息對故障進行分析芥备。

更多其他能力


還有很多其他更新就不一一介紹了冬耿,這些都是JDK標準包支持的基礎能力,得感謝Oracle持續(xù)對JDK發(fā)布的支持萌壳。完整的jdk11變化清單可以去官網(wǎng)查看亦镶;

從11開始移除的模塊清單

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

更多請查看官網(wǎng)

升級建議(重要)

從Java 11后Oracle不再單獨發(fā)布JRE和Server JRE了,并統(tǒng)一JDK名稱為:Oracle JDK袱瓮。

另外Java 11及之后的版本缤骨,將不會再發(fā)布對32位操作系統(tǒng)支持的版本。


新舊項目不同策略


新啟的Java項目建議直接從Oracle JDK 11開始搭建尺借,千萬不要猶豫绊起,因為技術都是越新越強的。Java8就像晚期的大眾燎斩,而Java11卻是新興的特斯拉虱歪。

歷史的項目如果只是維護的話蜂绎,干脆就放著運行不要動好了,等哪天決定重構了再考慮升級到Java11笋鄙。因為最大的問題不是自己公司開發(fā)的Code不能遷移到高版本师枣,而是項目中引入的第三方Jar,這個東西搞起來十分頭疼萧落。

JDK升級分析工具

升級最擔心的就是被刪除的模塊践美!

推薦IBM公司Liberty團隊提供了一個十分好用的檢測Toolkit程序,可以掃描應用程序二進制文件(.war)铐尚,發(fā)現(xiàn)的任何潛在的Java 11問題并生成Html報告拨脉。絕對的大利器,詳細內(nèi)容直接查看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







報告結果如下:

JDK不同于OpenJDK

推薦Oracle JDK灵妨,因為更加穩(wěn)定可靠解阅。

只有Oracle JDK支持Solaris系統(tǒng);

只有Oracle JDK才支持msi這樣的安裝程序泌霍;

Oracle JDK版本將每三年發(fā)布一次货抄,而OpenJDK版本每三個月發(fā)布一次;

OpenJDK 是一個參考模型并且是完全開源的朱转,而Oracle JDK是 OpenJDK的一個實現(xiàn)蟹地,并不是完全開源的;

Oracle JDK 比 OpenJDK 更穩(wěn)定藤为。OpenJDK和Oracle JDK的代碼幾乎相同怪与,但建議您選擇Oracle JDK,因為它經(jīng)過了徹底的測試和穩(wěn)定修復缅疟;

在響應性和JVM性能方面分别,Oracle JDK與OpenJDK相比提供了更好的性能;

Oracle JDK不會為即將發(fā)布的版本提供長期支持存淫,用戶每次都必須通過更新到最新版本獲得支持來獲取最新版本耘斩;

Oracle JDK根據(jù)二進制代碼許可協(xié)議獲得許可,而OpenJDK根據(jù)GPL v2許可獲得許可桅咆。Oracle公司很善于打官司煌往,所以這點很重要。


相關鏈接

JDK 11 Documentation Home

Java SE Development Kit 11 Downloads

java 11 release docs list

JDK 6~13 Release List

學習過程中遇到什么問題或者想獲取學習資源的話轧邪,歡迎加入Java學習交流群982489835刽脖。等你哦!


作者:程序員java耕耘者

鏈接:https://juejin.im/post/5e187b1f5188254dc42d9985

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忌愚,一起剝皮案震驚了整個濱河市曲管,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硕糊,老刑警劉巖院水,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異简十,居然都是意外死亡檬某,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門螟蝙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恢恼,“玉大人,你說我怎么就攤上這事胰默〕“撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵牵署,是天一觀的道長漏隐。 經(jīng)常有香客問我,道長奴迅,這世上最難降的妖魔是什么青责? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮取具,結果婚禮上脖隶,老公的妹妹穿的比我還像新娘。我一直安慰自己者填,他們只是感情好浩村,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著占哟,像睡著了一般心墅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上榨乎,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天怎燥,我揣著相機與錄音,去河邊找鬼蜜暑。 笑死铐姚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隐绵,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼之众,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了依许?” 一聲冷哼從身側響起棺禾,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峭跳,沒想到半個月后膘婶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蛀醉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年悬襟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拯刁。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡脊岳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筛璧,到底是詐尸還是另有隱情逸绎,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布夭谤,位于F島的核電站棺牧,受9級特大地震影響,放射性物質發(fā)生泄漏朗儒。R本人自食惡果不足惜颊乘,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望醉锄。 院中可真熱鬧乏悄,春花似錦、人聲如沸恳不。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烟勋。三九已至规求,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卵惦,已是汗流浹背阻肿。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沮尿,地道東北人丛塌。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赴邻。 傳聞我的和親對象是個殘疾皇子印衔,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容