1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        JDK 16 正式發(fā)布,一次性發(fā)布 17 個新特性…不服不行!

        共 5670字,需瀏覽 12分鐘

         ·

        2021-03-18 09:58

        點擊關(guān)注公眾號,Java干貨及時送達

        上一篇:Java 15 正式發(fā)布, 14 個新特性


        JDK 16 正式發(fā)布

        牛逼啊,JDK 15 剛發(fā)布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老鐵們,跟上。

        來看下 Oracle Java 支持路線圖:

        Oracle 繼續(xù)保持版本半年一發(fā)的節(jié)奏。。。

        試問:你還能追上 JDK 的發(fā)布速度嗎??

        可以看到,JDK 16 也不是一個長期支持的版本,只支持 6 個月到 2021 年 9 月,上一個長期支持版本還是 JDK 11,下一個長期支持版本是 JDK 17,還有半年也要發(fā)布了。

        所以千萬不要把 JDK 16(非長期支持版本)用于生產(chǎn),大家了解一下就好。

        JDK 16 新特性一覽

        IDJEPFeature
        1394Pattern Matching for instanceof
        2395Records
        3392Packaging Tool
        4387Elastic Metaspace
        5376ZGC: Concurrent Thread-Stack Processing
        6380UNIX-Domain Socket Channels
        7396Strongly Encapsulate JDK Internals by Default
        8390Warnings for Value-Based Classes
        9338Vector API (Incubator)
        10389Foreign Linker API (Incubator)
        11393Foreign-Memory Access API (Third Incubator)
        12397Sealed Classes (Second Preview)
        13347Enable C++14 Language Features (in the JDK source code)
        14357Migrate from Mercurial to Git
        15369Migrate to GitHub
        16386Alpine Linux Port
        17388Windows/Aarch64 Port

        JDK 16 這個版本提供了 17 個增強功能,包括全新的 Java 語言改進,工具和內(nèi)存管理,以及還有一些孵化和預覽特性,有了這些新功能,Java 會進一步提高開發(fā)人員的生產(chǎn)力。

        值得關(guān)注的變化是,JDK 14 中提供的預覽特性:模式匹配和記錄(Records),經(jīng)過一年的社區(qū)反饋和實際應(yīng)用,終于在 JDK 16 中完成最終落地了。

        另外,Oracle 還為 Java SE 訂閱服務(wù)中免費提供 GraalVM 企業(yè)版服務(wù),GraalVM 可以幫助提高應(yīng)用程序的性能并減少資源消耗,尤其是在微服務(wù)和云原生架構(gòu)中。

        JDK 16 新特性詳細介紹

        下面是 JDK 16 中的 17 個新特性詳細介紹。

        394:Pattern Matching for instanceof

        模式匹配 for instanceof,相當于是增強的 instanceof,在 JDK 14 中首次成為預覽特性,在 JDK 16 中正式轉(zhuǎn)正。

        模式匹配的到來將使得 instanceof 變得更簡潔、更安全,為什么這么說,請看下面的示例。

        正常的 instanceof 寫法:

        if (object instanceof Kid) {
          Kid kid = (Kid) object;
          // ...
        else if (object instanceof Kiddle) {
          Kid kid = (Kid) object;
          // ...
        }

        模式匹配的 instanceof 寫法:

        if (object instanceof Kid kid) {
          // ...
        else if (object instanceof Kiddle kiddle) {
          // ...
        }

        判斷、賦值一步到位,是不是很牛逼?具體這里就不詳細介紹了,棧長之前有寫過一篇文章,點擊這個鏈接進行閱讀,或者關(guān)注公眾號Java技術(shù)棧,回復 "java " 進行閱讀。

        395:Records

        簡單來說,Records 就是一種新的語法糖,目的還是為了簡化代碼,在 JDK 14 中首次成為預覽特性,在 JDK 16 中正式轉(zhuǎn)正。

        Records 可以在一定程度上避免低級冗余的代碼,比如:constructors, getters, equals(), hashCode(), toString() 方法等,相當于 Lombok 的 @Data 注解,但又不能完全替代。

        下面來看一個示例:

        public record Student(String name, int id, int age) {}

        沒錯,一行搞定(public 都可以省略),就是這么簡單粗暴?。。?/p>

        我們再通過 IDEA 反編譯 class 類的方式來看下它到底做了什么:

        看完是不是有點 Lombok 的感覺?具體這里就不詳細介紹了,棧長之前有寫過一篇文章,點擊這個鏈接進行閱讀,或者關(guān)注公眾號Java技術(shù)棧,回復 "java " 進行閱讀。

        392:Packaging Tool

        提供了 jpackage 打包工具,可用于打包獨立的 Java 應(yīng)用程序。

        jpackage 打包工具是在 JDK 14 中首次作為孵化工具引入的新特性,到了 JDK 15 它仍然還在孵化中,現(xiàn)在它終于轉(zhuǎn)正了。

        387:Elastic Metaspace

        彈性的元空間,可以幫助 HotSpot 虛擬機,將元空間中未使用的 class 元數(shù)據(jù)內(nèi)存更及時地返回給操作系統(tǒng),以減少元空間的內(nèi)存占用空間。

        另外,還簡化了元空間的代碼,以降低維護成本。

        376:ZGC: Concurrent Thread-Stack Processing

        ZGC 是一種較新的垃圾回收器,指在解決 HotSpot 虛擬機中的 GC 停頓及可伸縮問題。

        ZGC 最早是在 JDK 11 中集成進來的,在 JDK 15 中正式轉(zhuǎn)正。

        這個版本則是為了讓 ZGC 支持并發(fā)棧處理,解決了最后一個重大瓶頸,把 ZGC 中的線程棧處理從安全點移到了并發(fā)階段。并且還提供了一種機制,使得其他 HotSpot 子系統(tǒng)可以通過該機制延遲處理線程棧。

        380:UNIX-Domain Socket Channels

        UNIX 域套接字通道,為 java.nio.channels 包中的套接字通道和服務(wù)端套接字通道 APIs 增加 Unix 域套接字通道所有特性支持。

        UNIX 域套接字主要用于同一主機上的進程間通信(IPC),大部分方面與 TCP/IP套接字類似,不同的是 UNIX 域套接字是通過文件系統(tǒng)路徑名尋址,而不是通過 IP 地址和端口號。

        396:Strongly Encapsulate JDK Internals by Default

        JDK 內(nèi)部默認強封裝,JDK 16 開始對 JDK 內(nèi)部大部分元素默認進行強封裝,sun.misc.Unsafe 之類的關(guān)鍵內(nèi)部 API 除外,從而限制對它們的訪問。

        此外,用戶仍然可以選擇自 JDK 9 以來的默認的寬松的強封裝,這樣可以幫助用戶毫不費力地升級到未來的 Java 版本。

        390:Warnings for Value-Based Classes

        基于值的類的警告,將基礎(chǔ)類型包裝類指定為基于值的類,廢除其構(gòu)造函數(shù)以進行刪除,從而提示新的棄用警告。并且提供了在任何基于值的類的實例上不正常進行同步的警告。

        這個是對基本數(shù)據(jù)類型的包裝類動刀了,只是提供警告,也不用太在意。

        338:Vector API (Incubator)

        初步看,還以為是集合中的 Vector,原來不是!

        Vector API 這是一個新的初始迭代孵化器模塊,模塊包:jdk.incubator.vector,用于表示在運行時可靠地編譯到支持的 CPU 架構(gòu)上的最佳矢量硬件指令的矢量計算。

        很高端,搞不懂,后續(xù)有時間再研究。

        389:Foreign Linker API (Incubator)

        引入了一個新的 API,該 API 提供了對本地 native 代碼的靜態(tài)類型訪問支持。

        393:Foreign-Memory Access API (Third Incubator)

        外部內(nèi)存訪問 API(三次孵化中),引入了一個新的 API,可以幫助 Java 應(yīng)用程序更安全、有效地訪問 Java 堆之外的外部內(nèi)存。

        這個最早在 JDK 14 中成為孵化特性,JDK 15/ JDK 16 中繼續(xù)二、三次孵化并對其 API 有了一些更新,這個可以在 JDK 17 中好好期待一下轉(zhuǎn)正。

        397:Sealed Classes (Second Preview)

        封閉類(二次預覽),可以是封閉類和或者封閉接口,用來增強 Java 編程語言,防止其他類或接口擴展或?qū)崿F(xiàn)它們。

        來看下面這個示例:

        public abstract sealed class Student
            permits ZhangSan, LiSi, ZhaoLiu {
            ...
                
        }

        類 Student 被 sealed 修飾,說明它是一個封閉類,并且只允許指定的 3 個子類繼承。

        這個牛逼啊,有了這個特性,意味著以后不是你想繼承就繼承,想實現(xiàn)就實現(xiàn)了,你得經(jīng)過允許才行,這個也可以在 JDK 17 中好好期待一下轉(zhuǎn)正。

        347:Enable C++14 Language Features (in the JDK source code)

        允許在 JDK 底層的 C ++ 源代碼中使用 C ++ 14 的新語言特性,并且提供了在 HotSpot 虛擬機代碼中,哪些代碼使用了這些新特性的指南。

        357:Migrate from Mercurial to Git

        將 OpenJDK 社區(qū)的源代碼存儲庫從 Mercurial(hg)遷移到 Git。

        369:Migrate to GitHub

        在 GitHub 上托管 OpenJDK 社區(qū)的 Git 存儲庫。

        386:Alpine Linux Port

        在 x64 和 AArch64 平臺體系結(jié)構(gòu)上,將 JDK 移植到 Alpine Linux 以及使用 musl 作為其主要 C 語言庫的其他 Linux 發(fā)行版中。

        388:Windows/Aarch64 Port

        將 JDK 移植到 Windows/ AArch64 平臺系列。

        總結(jié)

        現(xiàn)在的 JDK 真變成了“版本帝”,無力吐槽啊,版本發(fā)到了 16,大部分人卻都還在用著 JDK 7/8,甚至 6。不過沒關(guān)系,多了解一下,多掌握一點新東西,對你來說沒有壞處。

        雖然更新很快,但話又說回來,更是因為 Java 這種不斷的更新、優(yōu)化和創(chuàng)新,才使得 Java 保持著源源活力,Java 仍然是現(xiàn)在最成功、最主流的開發(fā)語言之一。

        如果說 Java 第二,誰敢稱第一呢?如果你說 PHP,那我 Respect!

        最后,本文主要介紹了 JDK/Java 16 的 17 個新特性基本面,后面棧長有時間也會繼續(xù)更新一些 JDK 新特性詳細教程,關(guān)注公眾號Java技術(shù)棧第一時間推送哦。如果你想看歷史 Java 8+ 系列新特性教程,也可以在公眾號菜單中進行閱讀。

        往期 Java 教程及示例源碼:

        https://github.com/javastacks/javastack

        OracleJDK 16 發(fā)布地址:

        https://www.oracle.com/java/technologies/javase/16-relnotes.html

        OpenJDK 16 發(fā)布地址:

        https://openjdk.java.net/projects/jdk/16/

        Oracle JDK 16 下載地址:

        https://www.oracle.com/java/technologies/javase-downloads.html

        OpenJDK 16 下載地址:

        https://jdk.java.net/16/

        有興趣的可以下載嘗鮮了!!

        OracleJDK 和 OpenJDK 兩者的區(qū)別這里不撰述了,不清楚的請點擊這里進行查看。

        寫了大半天,頭發(fā)又在掉了。。。

        老鐵們,點個在看、轉(zhuǎn)發(fā)支持下哦,也歡迎分享給你的更多朋友們~

        關(guān)注Java技術(shù)棧,持續(xù)分享最新、最主流的Java技術(shù)~

        版權(quán)申明:本文系公眾號 "Java技術(shù)棧" 原創(chuàng),原創(chuàng)實屬不易,轉(zhuǎn)載、引用本文內(nèi)容請注明出處,禁止抄襲、洗稿,請自重,尊重他人勞動成果和知識產(chǎn)權(quán)。






        關(guān)注Java技術(shù)??锤喔韶?/strong>



        獲取 Spring Boot 實戰(zhàn)筆記!
        瀏覽 53
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

          <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲老头同性xxxxx老同 | 国产精品免费人成人网站酒店 | 北条麻妃日B视频 | 欧美怡红院院 | 毛片毛片毛片毛片4444 | 国产一级AA大片毛片 | 婷婷狠狠色 | 亚州精品无码 | 亚洲AV综合色区无码国产播放 | 日韩人妻无码一区二区三区四区 |