<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 開始正式免費(fèi)。。

          共 7453字,需瀏覽 15分鐘

           ·

          2021-09-26 11:06

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

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

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

          iPhone 13 降價(jià)算啥??JDK 17 直接干到免費(fèi)!!!

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

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

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

          來(lái)看下最新 Oracle Java 支持路線圖:

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

          下一個(gè)第三個(gè)長(zhǎng)期支持版本是 JDK 21,時(shí)間為 2023 年 9 月,這次長(zhǎng)期支持版本發(fā)布計(jì)劃改了,不再是原來(lái)的 3 年一次,而是改成了 2 年一次!

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

          JDK 17 新特性一覽

          ID特性說(shuō)明
          1306:Restore Always-Strict Floating-Point Semantics恢復(fù)始終執(zhí)行嚴(yán)格模式的浮點(diǎn)定義
          2356:Enhanced Pseudo-Random Number Generators增強(qiáng)型偽隨機(jī)數(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)部強(qiáng)封裝
          7406:Pattern Matching for switch (Preview)為 switch 支持模式匹配
          8407:Remove RMI Activation移除 RMI 激活
          9409:Sealed Classes密封類
          10410:Remove the Experimental AOT and JIT Compiler移除實(shí)驗(yàn)性的 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上下文特定反序列化過(guò)濾器

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

          JDK 17 新特性詳細(xì)介紹

          下面是 JDK 17 中的 14 個(gè)新特性詳細(xì)介紹,分為 5 大類進(jìn)行介紹!


          1. 語(yǔ)言增強(qiáng)

          409:Sealed Classes

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

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

          來(lái)看下面這個(gè)示例:

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

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

          這個(gè)牛逼啊,有了這個(gè)特性,意味著以后不是你想繼承就繼承,想實(shí)現(xiàn)就實(shí)現(xiàn)了,你得經(jīng)過(guò)允許才行。


          2. 預(yù)覽和孵化特性

          406:Pattern Matching for switch (Preview)

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

          instanceof 模式匹配的概念大家都清楚吧?

          這次在 JDK 17 中為 switch 語(yǔ)句支持模式匹配,是個(gè)什么鬼?來(lái)看下面的示例!

          老代碼寫法:

          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 類型,這就等于同時(shí)支持多種類型,使用模式匹配得到具體類型,大大簡(jiǎn)化了語(yǔ)法量,這個(gè)功能還是挺實(shí)用的,期待轉(zhuǎn)正。

          412:Foreign Function & Memory API (Incubator)

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

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

          414: Vector API (Second Incubator)

          矢量 API(二次孵化中)

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

          本次增強(qiáng)的 API 允許以一種在運(yùn)行時(shí),可靠地編譯為支持的 CPU 架構(gòu)上的最佳向量指令的方式表達(dá)向量計(jì)算。


          3. 核心增強(qiáng)

          306:Restore Always-Strict Floating-Point Semantics

          恢復(fù)始終執(zhí)行嚴(yán)格模式的浮點(diǎn)定義。

          Java 最初只有嚴(yán)格的浮點(diǎn)語(yǔ)義,但從 JDK 1.2 開始,為了適應(yīng)當(dāng)時(shí)硬件架構(gòu)的限制,默認(rèn)情況下允許這些嚴(yán)格語(yǔ)義中的細(xì)微變化,而現(xiàn)在這些都沒(méi)有必要了,已被 JEP 306 刪除。

          356:Enhanced Pseudo-Random Number Generators

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

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

          382:New macOS Rendering Pipeline

          新的 macOS 渲染管道。

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

          415: Context-Specific Deserialization Filters

          上下文特定反序列化過(guò)濾器。

          允許應(yīng)用配置 context-specific 和 dynamically-selected 過(guò)濾器,通過(guò)一個(gè) JVM 范圍的過(guò)濾器工廠,用來(lái)為每個(gè)單獨(dú)的反序列化操作選擇一個(gè)過(guò)濾器。

          403:Strongly Encapsulate JDK Internals

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

          此外,用戶仍然可以選擇自 JDK 9 以來(lái)的默認(rèn)的寬松的強(qiáng)封裝,這樣可以幫助用戶毫不費(fèi)力地升級(jí)到未來(lái)的 Java 版本。


          4. 新平臺(tái)支持

          391:macOS/AArch64 Port

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


          5. 棄用和移除項(xiàng)

          411:Deprecate the Security Manager for Removal

          棄用安全管理器。

          安全管理器從 Java 1.0 開始,這些年來(lái)它一直都不是保護(hù) Java 應(yīng)用程序代碼的主要手段,也很少用于保護(hù) Java 服務(wù)器端代碼,所以這個(gè)版本標(biāo)識(shí)為棄用狀態(tài)了,未來(lái)的版本會(huì)進(jìn)行移除。

          398:Deprecate the Applet API for Removal

          棄用 Applet API。

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

          407:Remove RMI Activation

          移除 RMI 激活。

          RMI 激活機(jī)制已于 2020 年 9 月在 JDK 15 中移除了,遠(yuǎn)程方法調(diào)用 (RMI) 激活機(jī)制現(xiàn)也已被移除,需要說(shuō)明的是,RMI 激活是 RMI 中一個(gè)過(guò)時(shí)的組件,自 Java 8 以來(lái)一直是可選的。

          410:Remove the Experimental AOT and JIT Compiler

          移除實(shí)驗(yàn)性的 AOT 和 JIT 編譯器。

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

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

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

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

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

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

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

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

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

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

          總結(jié)

          最后,本文主要介紹了 JDK/Java 17 的 14 個(gè)新特性基本面。

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

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

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

          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+ 開始免費(fèi)了,你們會(huì)考慮用嗎?來(lái)評(píng)論看看!


          程序汪資料鏈接

          程序汪接的7個(gè)私活都在這里,經(jīng)驗(yàn)整理

          Java項(xiàng)目分享  最新整理全集,找項(xiàng)目不累啦 04版

          堪稱神級(jí)的Spring Boot手冊(cè),從基礎(chǔ)入門到實(shí)戰(zhàn)進(jìn)階

          臥槽!字節(jié)跳動(dòng)《算法中文手冊(cè)》火了,完整版 PDF 開放下載!

          臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開放下載!

          字節(jié)跳動(dòng)總結(jié)的設(shè)計(jì)模式 PDF 火了,完整版開放下載!

          歡迎添加程序汪個(gè)人微信 itwang008  進(jìn)粉絲群或圍觀朋友圈

          瀏覽 82
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  欧美愤水视频 | 黄色www91 | 亚洲韩日在线 | 爱情岛成人网 | 亚洲黄色免费视频 |