java17學習筆記

Java17是一個重要的特性發布,也是比較常用的一個版本,根據?2024Java生態統計,Java 17、11 和 8 的用戶比例分別為 35%、33% 和 29%。它遵循了自Java10以來引入的Java發布步調,并于2021年 9 月 14 日發布,在Java16發布后的六個月內發布。

306:Restore Always-Strict Floating-Point Semantics
356:Enhanced Pseudo-Random Number Generators
382:New macOS Rendering Pipeline
391:macOS/AArch64 Port
398:Deprecate the Applet API for Removal
403:Strongly Encapsulate JDK Internals
406:Pattern Matching for switch (Preview)
407:Remove RMI Activation
409:Sealed Classes
410:Remove the Experimental AOT and JIT Compiler
411:Deprecate the Security Manager for Removal
412:Foreign Function & Memory API (Incubator)
414:Vector API (Second Incubator)
415:Context-Specific Deserialization Filters

JEP 306: Restore Always-Strict Floating-Point Semantics

默認使用嚴格的浮點語義即在類上默認都會加上strictfp修飾詞如下圖

strictfp是用來避免因硬件或操作系統的差異導致的計算結果不一致。但是即使加了strictfp關鍵字,計算的精度也不準確,所以精確計算還是要用BigDecimal

JEP 356: Enhanced Pseudo-Random Number Generators

為偽隨機數提供新的接口類型和實現(PRNG),包括可跳轉的 PRNG 和附加類 可拆分的 PRNG 算法 (LXM)

詳情可以查看文章??java17學習筆記-增強型偽隨機數生成器-CSDN博客

JEP 382: New macOS Rendering Pipeline

使用 Apple Metal API 作為現有管道的替代方法,為 macOS 實現 Java 2D 內部渲染管道,該管道使用已棄用的 Apple OpenGL API。

大多數圖形 Java 應用程序都是使用 Swing UI 工具包編寫的,該工具包通過 Java 2D API 進行渲染。在內部,Java 2D 可以使用軟件渲染加上屏幕的 blit,也可以使用特定于平臺的 API,例如 Linux 上的 X11/Xrender、Windows 上的 Direct3D 或 macOS 上的 OpenGL。這些特定于平臺的 API 通常提供比軟件渲染更好的性能,并且通常會減輕 CPU 的負擔。Metal 是用于此類渲染的新 macOS 平臺 API,取代了已棄用的 OpenGL API。(這個名稱與 Swing “Metal” Look and Feel 無關,這只是一個巧合。

此次更新創建了大量新的內部實現代碼來使用 Metal 框架,就像我們已經為其他特定于平臺的 API 所做的那樣。雖然很容易適應現有框架,但新代碼在使用圖形硬件方面更加現代,使用著色器而不是固定的函數管道。這些更改僅限于特定于 macOS 的代碼,即使 Metal 和 OpenGL 之間共享的代碼也只有極少量被更新。我們沒有引入任何新的 Java API,也沒有更改任何現有的 API。

Metal 管道可以與 OpenGL 管道共存。當圖形應用程序啟動時,會選擇其中一個。目前,OpenGL 仍然是默認值。僅當在啟動時指定 Metal 或 OpenGL 初始化失敗時才使用 Metal,就像在不支持 OpenGL 的未來版本的 macOS 中發生的情況一樣。

在集成此 JEP 時,Apple 尚未刪除 OpenGL。在此之前,應用程序可以通過在命令行上指定來選擇加入 Metal。我們將在未來的版本中將 Metal 渲染管線設為默認值。-Dsun.java2d.metal=truejava

JEP 391: macOS/AArch64 Port

將 JDK 移植到 macOS/AArch64。

和windows一樣,將 JDK 移植到 Windows/AArch64。windows在java16中已經實現了

JEP 398: Deprecate the Applet API for Removal

棄用 Applet API 以進行刪除。這基本上是無關緊要的,因為所有 Web 瀏覽器供應商要么已經刪除了對 Java 瀏覽器插件的支持,要么宣布了這樣做的計劃。

棄用標準 Java API 的以下類和接口,以便刪除:

  • java.applet.Applet
  • java.applet.AppletStub
  • java.applet.AppletContext
  • java.applet.AudioClip
  • javax.swing.JApplet
  • java.beans.AppletInitializer

棄用引用上述類和接口的任何 API 元素,包括以下方法和字段,以進行刪除:

  • java.beans.Beans
  • javax.swing.RepaintManager
  • javax.naming.Context

JEP 403: Strongly Encapsulate JDK Internals

強烈封裝JDK的所有內部元素,但關鍵的內部API(如sun.misc.Unsafe)除外將不再可能像JDK 9到JDK 16,通過單個命令行選項放寬對內部元素的強封裝

本JEP的目標、非目標、動機、風險和假設部分與JEP 396基本相同。

可以瀏覽文章?java17學習筆記-Deprecate the Applet API for Removal-CSDN博客

JEP 406: Pattern Matching for switch (Preview)

繼續增強switch表達式后續幾個版本都會增強,直到java21版本發布

增強內容可以查看和總結可以查看文章:java17學習筆記-switch總結-CSDN博客

JEP 407: Remove RMI Activation

刪除遠程方法調用 (RMI) 激活機制,同時保留 RMI 的其余部分。

java15就已經提出?JEP 385: Deprecate RMI Activation for Removal

原因

RMI激活已過時

RMI激活大多未使用

RMI激活會帶來持續的維護負擔

  • 從 Java SE API 規范中刪除包java.rmi.activation
  • 更新?RMI 規范以刪除提及 RMI 激活
  • 刪除實現 RMI 激活機制的 JDK 庫代碼
  • 刪除 RMI 激活機制的 JDK 回歸測試
  • 刪除 JDK 的激活守護程序及其文檔rmid

JEP 409: Sealed Classes

密封類是java15中提出來新加入的類

詳情可以查看文章?java15學習筆記-密封類-CSDN博客

JEP 410: Remove the Experimental AOT and JIT Compiler

刪除實驗性的基于Java的提前(AOT)和準時(JIT)編譯器。自引入以來,這個編譯器幾乎沒有什么用且維護成本巨高。

保留實驗性的Java級JVM編譯器接口(JVMCI),以便開發人員可以繼續使用外部構建的編譯器版本進行JIT編譯。

JEP 411: Deprecate the Security Manager for Removal

棄用安全管理器,以便在未來的版本中刪除。安全管理器可以追溯到Java 1.0。多年來,它一直不是保護客戶端Java代碼的主要手段,很少用于保護服務器端代碼,而且維護成本很高。為了推動Java平臺的發展,我們將棄用Security Manager,以便與遺留的Applet API(JEP 398)一起刪除。

JEP 412: Foreign Function & Memory API (Incubator)

引入API,Java程序可以通過該API與Java運行時之外的代碼和數據進行互操作。通過有效地調用外部函數(即JVM外部的代碼),并通過安全地訪問外部內存(即不受JVM管理的內存),API使Java程序能夠調用本機庫并處理本機數據,而不會出現JNI的脆弱性和危險性。

JEP 412: Foreign Function & Memory API (Incubator)

引入一個 API,Java 程序可以通過該 API 與 Java 運行時之外的代碼和數據進行互作。通過有效地調用外部函數(即 JVM 外部的代碼)以及安全地訪問外部內存(即不受 JVM 管理的內存),API 使 Java 程序能夠調用本機庫并處理本機數據,而沒有 JNI 的脆性和危險性。

詳情可以查看文章?Foreign-Memory Access API外部內存API -CSDN博客

JEP 414: Vector API (Second Incubator)

加入矢量,主要用于機器學習、線性代數、密碼學、金融和JDK本身的使用。

詳情可以查看文章?java16學習筆記-Vector API-CSDN博客

JEP 415: Context-Specific Deserialization Filters

允許應用程序配置特定于上下文和動態選擇的 反序列化過濾器通過調用 JVM 范圍的過濾器工廠來選擇 每個單獨反序列化作的篩選器。

import java.io.ObjectInputFilter;
import java.util.function.BinaryOperator;public class FilterInThread implements BinaryOperator<ObjectInputFilter> {// ThreadLocal to hold the serial filter to be appliedprivate final ThreadLocal<ObjectInputFilter> filterThreadLocal = new ThreadLocal<>();// Construct a FilterInThread deserialization filter factory.public FilterInThread() {}/*** The filter factory, which is invoked every time a new ObjectInputStream* is created.  If a per-stream filter is already set then it returns a* filter that combines the results of invoking each filter.** @param curr the current filter on the stream* @param next a per stream filter* @return the selected filter*/@Overridepublic ObjectInputFilter apply(ObjectInputFilter curr, ObjectInputFilter next) {if (curr == null) {// Called from the OIS constructor or perhaps OIS.setObjectInputFilter with no current filtervar filter = filterThreadLocal.get();if (filter != null) {// Prepend a filter to assert that all classes have been Allowed or Rejectedfilter = ObjectInputFilter.rejectUndecidedClass(filter);}if (next != null) {// Prepend the next filter to the thread filter, if any// Initially this is the static JVM-wide filter passed from the OIS constructor// Append the filter to reject all UNDECIDED resultsfilter = ObjectInputFilter.merge(next, filter);filter = ObjectInputFilter.rejectUndecidedClass(filter);}return filter;} else {// Called from OIS.setObjectInputFilter with a current filter and a stream-specific filter.// The curr filter already incorporates the thread filter and static JVM-wide filter// and rejection of undecided classes// If there is a stream-specific filter prepend it and a filter to recheck for undecidedif (next != null) {next = ObjectInputFilter.merge(next, curr);next = ObjectInputFilter.rejectUndecidedClass(next);return next;}return curr;}}/*** Apply the filter and invoke the runnable.** @param filter the serial filter to apply to every deserialization in the thread* @param runnable a Runnable to invoke*/public void doWithSerialFilter(ObjectInputFilter filter, Runnable runnable) {var prevFilter = filterThreadLocal.get();try {filterThreadLocal.set(filter);runnable.run();} finally {filterThreadLocal.set(prevFilter);}}
}
        var filterInThread = new FilterInThread();ObjectInputFilter.Config.setSerialFilterFactory(filterInThread);// Create a filter to allow example.* classes and reject all othersvar filter = ObjectInputFilter.Config.createFilter("example.*;java.base/*;!*");filterInThread.doWithSerialFilter(filter, () -> {byte[] bytes = new byte[1024];var o = deserializeObject(bytes);System.out.println("111111111111111111111111111111111111111");});

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919476.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919476.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919476.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【AI應用】修改向量數據庫Milvus默認密碼

說明&#xff1a; 1&#xff09;部署向量數據庫milvus運行一段時間后&#xff0c;想開啟密碼認證登錄attu頁面 2&#xff09;開啟密碼認證登錄&#xff0c;提示用戶和密碼不正確&#xff0c;因為默認密碼已存儲在物理機 3&#xff09;通過attu管理頁面修改向量數據庫milvus默認…

分布式系統消息隊列:可靠投遞與延時消息實戰

在分布式系統架構中&#xff0c;消息隊列&#xff08;MQ&#xff09;作為解耦服務、削峰填谷、異步通信的核心組件&#xff0c;其消息投遞的可靠性與延時消息的精準性直接影響業務系統的穩定性。本文結合實際業務場景&#xff0c;詳細解析消息投遞的全流程設計與延時消息的通用…

Java 學習筆記(基礎篇6)

面向對象基礎1. 類和對象(1) 示例&#xff1a;public class Student {String name "張三";int age 23;public void study() {System.out.println("學習 Java");}public void eat() {System.out.println("吃飯");} }public class Test {public …

光學件加工廠倚光科技:陪跑光學未來力量

在光學創新的漫漫長路上&#xff0c;總有一些看似 “不劃算” 的堅持&#xff0c;卻在悄然改寫行業的未來。倚光科技的故事&#xff0c;就始于這樣一種選擇 —— 明知光學打樣利潤微薄&#xff0c;明知上百個項目中能走到量產的寥寥無幾&#xff0c;仍愿意投入全球頂尖的設備與…

RabbitMQ:生產者可靠性(生產者重連、生產者確認)

目錄一、生產者重連二、生產者確認一、生產者重連 當網絡不穩定的時候&#xff0c;利用重試機制可以有效提高消息發送的成功率。不過SpringAMQP提供的重試機制是阻塞式的重試&#xff0c;也就是說多次重試過程中&#xff0c;當前線程是被阻塞的&#xff0c;會影響業務性能。 …

【深度學習新浪潮】空天地數據融合技術在城市三維重建中的應用

空天地數據融合技術在城市三維重建中的應用已取得顯著進展,尤其在提升精度以滿足具身智能機器人仿真訓練需求方面,研究和產品均呈現多樣化發展。以下是關鍵研究進展、產品方案及精度要求的詳細分析: 一、研究進展與技術路徑 1. 多源數據融合的技術突破 時空基準統一:通過…

Selenium自動化測試入門:cookie處理

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快driver.get_cookies() # 獲得cookie 信息driver.get_cookies(name) # 獲得對應name的cookie信息add_cookie(cookie_dict) # 向cookie 添加會話信息delete_cookie(na…

快解析如何讓遠程訪問更安全?

一、勒索病毒攻擊服務器的途徑很多用戶服務器對外開放&#xff0c;實現外網訪問&#xff0c;擔心服務器被勒索病毒攻擊&#xff01;勒索病毒攻擊服務器的途徑之一是通過路由器開放的端口進行掃描攻擊&#xff0c;所以盡量不要在服務器的路由器和防火墻中開放端口二、快解析如何…

Linux下編譯ARPACK

本文記錄Linux下編譯ARPACK的流程。 零、環境 操作系統Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1oneAPI2024.2.1 一、依賴 1.1 安裝oneAPI 參見&#xff1a;Get the Intel oneAPI Base Toolkit , Get the Intel oneAPI HPC Toolkit 二、編譯ARPACK …

芋道RBAC實現介紹

說明&#xff1a;之前寫過一篇博客&#xff0c;介紹如何搭建一個基于角色的權限驗證框架 搭建一個基于角色的權限驗證框架 本文介紹在非常受歡迎的開源框架——芋道中是如何實現 RBAC 的&#xff0c;芋道的部署參考下面這篇文章&#xff1a; 芋道微服務代碼部署 介紹 一般…

Docker部署Jellyfin,沒有公網IP如何使用內網穿透遠程訪問?

Jellyfin是一款完全開源、免費的媒體服務器&#xff0c;可幫助你快速搭建屬于自己的私人流媒體平臺&#xff1a;電影、劇集、音樂、照片統統收納&#xff0c;跨設備隨點隨播。本文將以最簡潔的步驟&#xff0c;演示如何在Docker容器中部署Jellyfin&#xff0c;并通過貝銳花生殼…

Podman:Mysql(使用卷)

下載鏡像hpphcomp:~$ podman pull docker.1ms.run/mysql:latest Trying to pull docker.1ms.run/mysql:latest... Getting image source signatures Copying blob c81e70a25040 done | Copying blob 31f7d8dc4024 done | Copying blob b9916866e45f done | Copying blob …

2025年滲透測試面試題總結-21(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 一、文件上傳繞過方式&#xff08;Top 5&#xff09; 二、文件包含高危函數&#xff08;PHP為例&#xff0…

像海綿一樣吸收技術書籍的高效學習方法

像海綿一樣吸收技術書籍的高效學習方法前言六步高效閱讀法步驟1&#xff1a;快速瀏覽章節步驟2&#xff1a;先讀章末測驗步驟3&#xff1a;只讀粗體字步驟4&#xff1a;只讀每段的首句和末句步驟5&#xff1a;通讀整章步驟6&#xff1a;復習與重復高效學習技術書籍的實用技巧1.…

Day60--圖論--94. 城市間貨物運輸 I(卡碼網),95. 城市間貨物運輸 II(卡碼網),96. 城市間貨物運輸 III(卡碼網)

Day60–圖論–94. 城市間貨物運輸 I&#xff08;卡碼網&#xff09;&#xff0c;95. 城市間貨物運輸 II&#xff08;卡碼網&#xff09;&#xff0c;96. 城市間貨物運輸 III&#xff08;卡碼網&#xff09; 今天是Bellman_ford專場。帶你從普通的Bellman_ford&#xff0c;到隊列…

Jenkins服務器SSH公鑰配置步驟

步驟1. 在Jenkins服務器上生成SSH密鑰在Jenkins服務器上執行以下命令&#xff1a;# 1. 生成SSH密鑰對 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""# 2. 設置正確的權限 chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub# 3. 查看公鑰內…

數據鏈路層-網絡層-傳輸層

文章目錄深入淺出理解網絡核心&#xff1a;從交換機到TCP/UDP一、數據鏈路層&#xff1a;交換機的"地盤"1. 數據鏈路層的核心功能2. 以太網的發展歷程3. 以太網中的MAC地址4. 以太網幀格式&#xff1a;數據的"快遞包裝"5. 交換機的工作原理&#xff1a;高效…

專題:2025跨境電商市場布局、供應鏈與產業帶賦能報告 |附130+份報告PDF、原數據表匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p43616 2025年&#xff0c;跨境圈的老板們集體焦慮&#xff1a;美國關稅飆到145%&#xff0c;亞馬遜封號潮卷土重來&#xff0c;而東南亞卻悄悄漲了246%&#xff01;這不是危言聳聽——66%的美國消費者說&#xff0c;海外貨漲10%就換本…

LINUX 818 shell:random;for for

問題 [rootweb ~]# a$(echo $[$RANDOM%10]) 您在 /var/spool/mail/root 中有郵件 [rootweb ~]# echo $a 3 [rootweb ~]# echo 139$a$a$a$a$a$a$a$a 13933333333 您在 /var/spool/mail/root 中有郵件 [rootweb ~]# echo 139 $a 139 3 [rootweb ~]# echo $a 3 [rootweb ~]# echo …

JavaScript 原型機制詳解:從概念到實戰(附個人學習方法)

原型是 JavaScript 實現繼承與代碼復用的核心機制,也是面試高頻考點。本文結合個人學習經驗、核心概念解析與實戰案例,幫你徹底搞懂原型、prototype、__proto__ 及相關知識點,同時分享高效的學習方法。 一、個人學習方法:高效掌握復雜知識點 復雜概念(如原型)的學習,關…