<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          重磅!JDK 17 發(fā)布,Oracle 宣布從 JDK 17 開始正式免費。。

          共 7720字,需瀏覽 16分鐘

           ·

          2021-09-18 11:54

          點擊關注公眾號,Java干貨及時送達

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


          JDK 17 正式發(fā)布+免費

          牛逼啊,JDK 16 剛發(fā)布半年(2021/03/16),JDK 17 又如期而至(2021/09/14),這個時間點牛逼啊,蹭蘋果發(fā)布會的熱度?記得當年 JDK 15 的發(fā)布也是同天,巧了。。

          雖然 iPhone 13 發(fā)布了,但真的不是 13 香,真沒什么創(chuàng)新和亮點,一如繼往蘋果式擠牙膏,在 13 上真的擠到精髓了,這次我想說,JDK 17 更香!!

          iPhone 13 降價算啥??JDK 17 直接干到免費!!!

          Oracle 宣布,從 JDK 17 開始,后面的 JDK 都全部免費提供!!!

          是的,你沒有看錯,Oracle 這次良心了,發(fā)大招了,Java 17+ 可以免費使用了,包括商用,更詳細的條款可以閱讀:

          https://www.oracle.com/downloads/licenses/no-fee-license.html

          來看下最新 Oracle Java 支持路線圖:

          可以看到,JDK 17 是自 2018 年 JDK 11 后的第二個長期支持版本,支持到 2029 年 9 月,好家伙,支持時間長達 8 年,這下可以不用死守 JDK 8 了,JDK 17+ 也可以是一種新的選擇了。。

          下一個第三個長期支持版本是 JDK 21,時間為 2023 年 9 月,這次長期支持版本發(fā)布計劃改了,不再是原來的 3 年一次,而是改成了 2 年一次!

          另外,非長期支持版本還是半年發(fā)一次不變,下一個非長期支持版本計劃在 2022/03 發(fā)布,但注意不要用在生產(chǎn)。

          JDK 17 新特性一覽

          ID特性說明
          1306:Restore Always-Strict Floating-Point Semantics恢復始終執(zhí)行嚴格模式的浮點定義
          2356:Enhanced Pseudo-Random Number Generators增強型偽隨機數(shù)生成器
          3382:New macOS Rendering Pipeline新的 macOS 渲染管道
          4391:macOS/AArch64 PortmacOS AArch64 端口
          5398:Deprecate the Applet API for Removal棄用 Applet API
          6403:Strongly Encapsulate JDK InternalsJDK 內(nèi)部強封裝
          7406:Pattern Matching for switch (Preview)為 switch 支持模式匹配
          8407:Remove RMI Activation移除 RMI 激活
          9409:Sealed Classes密封類
          10410:Remove the Experimental AOT and JIT Compiler移除實驗性的 AOT 和 JIT 編譯器
          11411:Deprecate the Security Manager for Removal棄用安全管理器
          12412:Foreign Function & Memory API (Incubator)外部函數(shù)和內(nèi)存 API(孵化中)
          13414:Vector API (Second Incubator)矢量 API(二次孵化中)
          14415:Context-Specific Deserialization Filters上下文特定反序列化過濾器

          JDK 17 這個版本提供了 14 個增強功能,另外在性能、穩(wěn)定性和安全性上面也得到了大量的提升,以及還有一些孵化和預覽特性,有了這些新變化,Java 會進一步提高開發(fā)人員的生產(chǎn)力。

          JDK 17 新特性詳細介紹

          下面是 JDK 17 中的 14 個新特性詳細介紹,分為 5 大類進行介紹!


          1. 語言增強

          409:Sealed Classes

          密封類,這個特性在 JDK 15 中首次成為預覽特性,在 JDK 16 中進行二次預覽,在 JDK 17 這個版本中終于正式轉(zhuǎn)正了。

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

          來看下面這個示例:

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

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

          這個牛逼啊,有了這個特性,意味著以后不是你想繼承就繼承,想實現(xiàn)就實現(xiàn)了,你得經(jīng)過允許才行。轉(zhuǎn)正了,棧長會再詳細寫一篇,關注公眾號:Java技術棧,公眾號第一時間推送哦。


          2. 預覽和孵化特性

          406:Pattern Matching for switch (Preview)

          為 switch 支持模式匹配(預覽中)

          instanceof 模式匹配的概念大家都清楚吧?不清楚的可以看下這篇文章:Java 14 之模式匹配,非常贊的一個新特性!

          這次在 JDK 17 中為 switch 語句支持模式匹配,是個什么鬼?來看下面的示例!

          老代碼寫法:

          static String formatter(Object o) {
              String formatted = "unknown";
              if (o instanceof Integer i) {
                  formatted = String.format("int %d", i);
              } else if (o instanceof Long l) {
                  formatted = String.format("long %d", l);
              } else if (o instanceof Double d) {
                  formatted = String.format("double %f", d);
              } else if (o instanceof String s) {
                  formatted = String.format("String %s", s);
              }
              return formatted;
          }

          模式匹配新寫法:

          static String formatterPatternSwitch(Object o) {
              return switch (o) {
                  case Integer i -> String.format("int %d", i);
                  case Long l    -> String.format("long %d", l);
                  case Double d  -> String.format("double %f", d);
                  case String s  -> String.format("String %s", s);
                  default        -> o.toString();
              };
          }

          牛逼,直接在 switch 上支持 Object 類型,這就等于同時支持多種類型,使用模式匹配得到具體類型,大大簡化了語法量,這個功能還是挺實用的,期待轉(zhuǎn)正,棧長會再詳細寫一篇,關注公眾號:Java技術棧,公眾號第一時間推送哦。

          412:Foreign Function & Memory API (Incubator)

          外部函數(shù)和內(nèi)存 API(孵化中)

          改進了 JDK 14JDK 15 引入的 API,通過有效調(diào)用外部函數(shù)(即 JVM 之外的代碼),以及安全地訪問外部內(nèi)存(JVM 之外的內(nèi)存),這些 API 可以調(diào)用本地庫和處理本地數(shù)據(jù),與 Java 運行環(huán)境之外的代碼和數(shù)據(jù)進行交互。

          414: Vector API (Second Incubator)

          矢量 API(二次孵化中)

          Vector API 這是一個新的初始迭代孵化器模塊,模塊包:jdk.incubator.vector,用于表示在運行時可靠地編譯到支持的 CPU 架構上的最佳矢量硬件指令的矢量計算,矢量運算可以提供優(yōu)于等效標量計算的性能,并且在機器學習、人工智能和密碼學等領域非常普遍。

          本次增強的 API 允許以一種在運行時,可靠地編譯為支持的 CPU 架構上的最佳向量指令的方式表達向量計算。


          3. 核心增強

          306:Restore Always-Strict Floating-Point Semantics

          恢復始終執(zhí)行嚴格模式的浮點定義。

          Java 最初只有嚴格的浮點語義,但從 JDK 1.2 開始,為了適應當時硬件架構的限制,默認情況下允許這些嚴格語義中的細微變化,而現(xiàn)在這些都沒有必要了,已被 JEP 306 刪除。

          356:Enhanced Pseudo-Random Number Generators

          增強型偽隨機數(shù)生成器,java.util.random 包更新了,提高了不同 PRNGs(偽隨機數(shù)生成器)的互操作性,并使基于需求而不是硬編碼特定實現(xiàn)的算法變得容易。

          這次更改包括偽隨機數(shù)生成器(PRNG)的新的接口類型和實現(xiàn),包括可跳 PRNGs 和一個可拆分的 PRNG 算法(LXM),以及全新的 RandomGeneratorFactory 類。

          382:New macOS Rendering Pipeline

          新的 macOS 渲染管道。

          這個新管道通過使用新的 Apple Metal API 為 macOS 實現(xiàn) Java 2D 渲染管道,減少了 JDK 對已棄用的 Apple OpenGL API 的依賴。

          415: Context-Specific Deserialization Filters

          上下文特定反序列化過濾器。

          允許應用配置 context-specific 和 dynamically-selected 過濾器,通過一個 JVM 范圍的過濾器工廠,用來為每個單獨的反序列化操作選擇一個過濾器。

          403:Strongly Encapsulate JDK Internals

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

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


          4. 新平臺支持

          391:macOS/AArch64 Port

          macOS AArch64 端口,即提供可適用于 macOS 的 JDK 版本,該版本可在基于 Arm 64 的較新的 macOS 系統(tǒng)上本地化運行。


          5. 棄用和移除項

          411:Deprecate the Security Manager for Removal

          棄用安全管理器。

          安全管理器從 Java 1.0 開始,這些年來它一直都不是保護 Java 應用程序代碼的主要手段,也很少用于保護 Java 服務器端代碼,所以這個版本標識為棄用狀態(tài)了,未來的版本會進行移除。

          398:Deprecate the Applet API for Removal

          棄用 Applet API。

          Applet 是一種運行在 Web 瀏覽器內(nèi)的 Java 程序,但 Applet 早就沒什么鳥用了,現(xiàn)在還有哪款瀏覽器支持 Java Applet 的嗎?在坐的各位估計都沒聽過吧?

          407:Remove RMI Activation

          移除 RMI 激活。

          RMI 激活機制已于 2020 年 9 月在 JDK 15 中移除了,遠程方法調(diào)用 (RMI) 激活機制現(xiàn)也已被移除,需要說明的是,RMI 激活是 RMI 中一個過時的組件,自 Java 8 以來一直是可選的。

          410:Remove the Experimental AOT and JIT Compiler

          移除實驗性的 AOT 和 JIT 編譯器。

          AOT 和 JIT 這兩個實驗性的編譯器,自從在 JDK 9 中引入以來幾乎沒有怎么使用,市面上也出現(xiàn)了更為廣泛使用的替代方案,并且維護它們所需的工作量很大,所以在 JDK 16 中就已經(jīng)刪除了,本次從 OpenJDK 項目中刪除了源代碼。

          JDK 17 都免費了,和 OpenJDK 還有區(qū)別?

          有的,雖然兩者很接近,但也還是有一點區(qū)別!

          1、Oracle JDK 提供了各種安裝程序,還包含更新規(guī)則,而 OpenJDK 只提供了一個純壓縮包;

          2、Usage Logging 僅在 Oracle JDK 中可用;

          3、Oracle JDK 要求第三方加密提供程序使用 Java 加密擴展(JCE)進行簽名,而 OpenJDK 繼續(xù)允許使用未簽名的第三方加密提供程序;

          4、java -version 的輸出也是不同的,Oracle JDK 返回 java 并包含 Oracle 特定的標識符,OpenJDK 返回 OpenJDK 并且不包含特定于 Oracle 的標識符;

          5、許可證不同,Oracle JDK 17+ 是根據(jù) Oracle 免費條款和條件許可發(fā)布的,而 OpenJDK 在 GPLv2wCP 下發(fā)布的;

          6、Oracle JDK 源代碼含有 "ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.",其使用受許可條款約束的,而 OpenJDK 源代碼可參考 GPL 許可條款;

          以上是兩者最主要的 6 點區(qū)別。

          總結

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

          Java 17 發(fā)布了,Oracle 宣布 JDK 17 及之后的版本都免費使用,包括商用,爽!!!Oracle 這次真的良心了,或許是趨于某種壓力進行免費?

          Java 確實是在走下坡路,即使如此,也是老當益壯,是現(xiàn)在各大企業(yè)必用的語言之一。

          雖然大部分人現(xiàn)在還在用著 JDK 7/8,甚至 6,還在寫著 JDK 5 的語法,現(xiàn)在隨著 JDK 17+ 的免費,或者在未來的不久,JDK 8 會逐漸被替代,JDK 17+ 慢慢走上舞臺。

          往期 Java 教程及示例源碼:

          https://github.com/javastacks/javastack

          OracleJDK 17 發(fā)布地址:

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

          OpenJDK 17 發(fā)布地址:

          http://openjdk.java.net/projects/jdk/17/

          Oracle JDK 17 下載地址:

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

          OpenJDK 17 下載地址:

          https://jdk.java.net/17/

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

          最后,JDK 17+ 開始免費了,你們會考慮用嗎?來投票看看!

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

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

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






          關注Java技術棧看更多干貨



          獲取 Spring Boot 實戰(zhàn)筆記!

          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲人操逼视频 | 真实操逼视频 | 国产精品九九九九九九九九 | 日本色情 电影在线播放 | 伊人婷婷丁香 |