Java23

#Java23 #JDK23

JavaSE 功能

JDK 23 功能預覽:JEP 466 Class-File API 類別檔案存取

JEP 466 Class-File API

在 Java 開發生態系統中,類別檔案(Class File)的處理一直是重要但複雜的議題。JDK 23 中的 JEP 466 提出了標準化的 API,旨在簡化 Java 開發者處理類別檔案的工作流程,包括解析、生成和轉換等操作。 新的 API 不僅提供了更高層次的抽象層與更友善的介面,還透過現代 Java 語言特性的運用,為開發者帶來更直觀且更安全的類別檔案處理方式。本文簡介這項重要的預覽 API 更新,並說明它如何改善當前的開發體驗。 前言 在 Java 中,許多框架和工具都需要處理類別檔案,我們可以說它是 Java 生態系統的通用語言。解析、生成和轉換類別檔案的需求無處不在,我們可以使用獨立的工具和程式庫去檢查和擴展程式,而不會危及原始碼的可維護性。 目前有許多用於解析和生成類別檔案的程式庫,每個程式庫都有不同的設計目標、優點和缺點。處理類別檔案的框架通常會使用某個類別檔案程式庫,例如 ASM、BCEL 或 Javassist。然而,這些常用的解決方案存在著一些明顯的問題。 為何需要新的類別檔案 API? 首先,現有的工具都有其特定的設計目標和限制,導致開發者需要在不同場景下根據 …

JDK 23 功能預覽:JEP 466 Class-File API 類別檔案存取 閱讀全文 Read more...

,
JavaSE 功能

JDK 23 功能預覽:JEP 469 Vector API 向量計算

JEP 469 Vector API

在軟體開發周期中,效能優化一直是重要的課題。Java 作為企業級應用程式開發的主流語言之一,持續不斷地追求更好的執行效能。JDK 23 中的 JEP 469 提出的向量 API(Vector API),正是朝向這個目標邁進的重要一步。 這個新的 API 目的是為了要提供一個簡潔且高效的向量計算介面,讓開發人員能夠更好地利用現代處理器的向量運算能力,從而大幅提升程式的執行效能。由於尚在孵化階段,因此本篇僅簡介功能,待功能正式上線後再詳細介紹。 前言 在傳統的程式開發中,我們常常要處理大量的數值運算,特別是在科學計算、機器學習、圖形處理等領域。這些運算通常會透過迴圈逐一處理每個數值,但是這種方式並沒有充分利用到處理器的特性。 目前的處理器都具有向量運算的能力,也就是所謂的 SIMD(Single Instruction Multiple Data)指令集。這些指令可以在一個時鐘週期內同時處理多個數值,理論上可以大幅提升運算效能。然而,在 Java 中不太容易直接利用這項能力。 為什麼我們需要向量計算 API? 向量計算由一系列的向量操作所組成。向量通常包含一組固定的標量值(scalar v …

JDK 23 功能預覽:JEP 469 Vector API 向量計算 閱讀全文 Read more...

,
研討演講

JCConf 2024 – Java 22 & 23 新功能介紹 影片

JCConf_2024_Java_22_&_23_新功能介紹

活動頁面:JCConf 2024 JCConf 2024 Java 22 & 23 新功能介紹 影片:2024 年的 Java 22 和 Java 23 延續了之前版本的功能,正式提供了未命名變數與模式、外部函式與記憶體存取 API,並且也新增了有趣的 Markdown 文件註解和直接執行多檔案的原始碼程式等功能。同時,持續孵化中的項目有彈性的建構式、字串模板、向量處理、串流聚集器、隱式宣告類別和實例主方法、基本型別的模式匹配,以及模組匯入宣告等功能。本場演講將與大家分享這兩個版本所帶來的 Java 最新變化。 簡報檔 …

JCConf 2024 – Java 22 & 23 新功能介紹 影片 閱讀全文 Read more...

, ,
JavaSE 功能

JDK 23 功能:JEP 471 棄用 sun.misc.Unsafe 中的記憶體存取方法

JEP 471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal

為了達成 Write once, run anywhere 的目標,早期的 Java 平台中隱含了未正式開放的程式碼,以利程式在不同的作業系統中與記憶體溝通。在 JEP 454 Foreign Function & Memory API(官方規格)發表之後,JDK 23 中 JEP 471 提出要棄用並最終移除 sun.misc.Unsafe 類別中的記憶體存取方法。 這項提案的目的是為了鼓勵開發者使用更安全、更標準的 FFM API,從而提高 Java 應用程式的整體穩定性和安全性。本文將深入探討 JEP 471 的背景、動機、以及對 Java 開發者的影響。我們將分析這項變更的優缺點,並提供程式碼範例說明如何從使用 sun.misc.Unsafe 遷移到推薦的替代方案。 前言 sun.misc.Unsafe 類別自 2002 年引入以來,一直是 Java 開發者執行低階操作的重要工具。它的大多數方法(87 個中的 79 個)用來存取記憶體,無論是在 JVM 的垃圾收集器中或是在不受 JVM 控制的堆外記憶體中。 然而,正如其名稱所暗示,sun.misc.Unsafe 類別中 …

JDK 23 功能:JEP 471 棄用 sun.misc.Unsafe 中的記憶體存取方法 閱讀全文 Read more...

,
JavaSE 功能

JDK 23 功能:JEP 467 Markdown 文件註釋

JEP 467: Markdown Documentation Comments

身為 Java 開發人員都應該知道,當我們想要查詢某隻 API 的功能和用法時,我們會查看該 API 的 JavaDoc 以取得更多資訊。另外當我們需要提供函式庫讓他人使用時,撰寫 JavaDoc 亦是必要的程序。JDK 23 中的 JEP 467 針對既有的 JavaDoc 做出了改進,因為長久以來撰寫 JavaDoc 這件繁瑣的事情深深困擾著開發人員。 JEP 467 改變了我們對 JavaDoc 的認知。它為 JavaDoc 工具引入 Markdown 語法支援,徹底改變 Java 開發者撰寫 API 文件的方式。這項更新不僅簡化了文件撰寫過程,還提高了可讀性和維護性。本文將深入探討其實現方式、語法細節,以及它如何與現有的 JavaDoc 系統共存,為 Java 開發社群帶來更現代化、更靈活的文件編寫體驗。 前言 在 Java 推出之前,已有程式語言和工具支援文件註釋的功能,像是 Lisp(釋出於 1950 年代)允許開發人員在寫程式時,使用 docstrings 語法(開始於 1970 年代,其後發展成語言標準)提供內嵌文件註釋,並且可透過開發工具瀏覽和查詢。不過,其他大多數的 …

JDK 23 功能:JEP 467 Markdown 文件註釋 閱讀全文 Read more...

,
JavaSE 功能

JDK 23 功能:JEP 473 Stream Gatherer 串流聚集器

JEP 473: Stream Gatherers

Java 8 引入的 Stream API 為開發者提供了強大且清楚易懂的方式來處理資料串流集合。然而,隨著時間的推移,開發者們發現 Stream API 在某些複雜場景下仍然有不少的局限性。本文將介紹 JDK 23 Stream API 的重大進化如何去填補這些缺失的拼圖:JEP 473 的新功能 Stream Gatherers 串流聚集器。 JEP 473 Stream Gatherers 串流聚集器目的在加強 Stream API 的功能,使其能支援自定義的中間操作。這項新特性將允許開發者以更靈活的方式轉換資料流,解決了許多現有 Stream API 難以處理的複雜場景。接下來,讓我們深入探討串流聚集器會如何改變 Java 開發者處理資料串流的方式。 前言 Java 8 新增專為 lambda 表達式設計的第一個 API:Stream API(java.util.stream)。串流是一個惰性計算的、可能無邊界的資料序列,而 Stream API 支援循序或並行處理串流的能力。一個串流管道由三個部分組成:元素的來源、任意數量的中間操作和一個終端操作。例如: 這種程式設計風格既有 …

JDK 23 功能:JEP 473 Stream Gatherer 串流聚集器 閱讀全文 Read more...

,
JavaSE 功能

JDK 23 功能:JEP 481 範圍值是更安全且高效的資料共享方式

JEP 481_Scoped Values

在執行緒並行的應用程式中,如何做資料共享一直是個重要且棘手的議題。Java 平台長期以來使用 ThreadLocal 來實現執行緒內的資料共享,但是這種方式存在著一些缺陷。為了解決這些問題,Java 引入了一個新的功能:JEP 481 Scoped Values(範圍值)。 本文將探討 Scoped Values 範圍值的核心概念、設計動機、實現方式,以及與 ThreadLocal 相比的優勢。我們將通過實際的程式碼範例,展示如何實際運用這個新功能,以及它如何能夠改變我們的程式設計思維。 前言 ThreadLocal(執行緒局部變數)在 Java 1.2 時引入,提供了一種在執行緒內不同方法之間共享資料的便捷方式。然而,隨著時間的推移,其設計缺陷慢慢地顯現出來,例如:記憶體洩漏、記憶體開銷、變數值可以被修改等等。這些缺點導致雖然它在某些情況下很有用,但是執行時會造成異常拋出或未預期的錯誤。開發者需要仔細考慮這些缺點,並根據具體情況選擇更合適的資料共享機制。 ThreadLocal 的缺點 首先,ThreadLocal 變數預設具有不受限制的可變性,這代表著任何可以訪問它的程式碼都可以在 …

JDK 23 功能:JEP 481 範圍值是更安全且高效的資料共享方式 閱讀全文 Read more...

,
JavaSE 功能

JDK 23 功能:JEP 476 模組化的匯入宣告

JEP 476: Module Import Declarations

隨著 Java 程式語言的不斷演進,開發者們一直在尋求更簡潔且高效的程式碼編寫方式。因此 Java 23 中引入預覽功能 JEP 476 模組匯入宣告,可以簡化 Java 模組化程式中的模組 import 方式,並為開發者提供一種更便捷的方式來使用模組函式庫。 本文將探討模組匯入的核心概念、功能特性,並探討它在實際開發中的優勢和挑戰。無論您是經驗豐富的 Java 工程師,還是剛接觸模組化概念的新手,您都可以藉由本篇文章學習到此功能所帶來的好處。 前言 在前幾天介紹的 JEP 477 隱式宣告類別中有提到,Java 編譯器在建立隱式類別時,會自動添加模組匯入的語句: 其實自動匯入型別的能力,在 Java 誕生時就已經存在了。大家可以回想一下,我們撰寫 Java 程式時都不需要明確指定匯入 java.lang 套件(package)中的類別和介面(例如 Object、String 和 Comparable)。Java 編譯器會自動加上隨選型別匯入(type-import-on-demand)的語句,去匯入 java.lang 套件中的所有類別和介面,就好像每個原始檔的開頭都出現了以下語句一 …

JDK 23 功能:JEP 476 模組化的匯入宣告 閱讀全文 Read more...

,
JavaSE 功能

JDK 23 功能:JEP 477 隱式宣告類別和實例主方法的革新之路

JEP 477 Implicitly Declared Classes and Instance Main Methods

一直以來,Java 常常是企業級應用開發的首選語言之一。然而,在眾多新舊語言的包圍下,Java 對初學者的學習曲線顯得相當陡峭。為了解決這些問題,減少 Java 新手的學習難度,近幾年來的 Java 新功能有許多都環繞著如何降低語言與語法複雜度。 Java 23 中的預覽功能 JEP 477 隱式宣告類別和實例主方法就是在簡化 Java 入門程式的編寫過程,特別是針對初學者和小型程式的開發。本文亦將深入探討它的核心概念和功能,分析其如何改變初學者 Java 程式的編寫方式,以及這些變更對軟體工程師和開發人員的影響。 前言 每當面對新的程式語言時,第一個範例程式的複雜度高低常常會影響到新手是否願意持續投注心力學習。學習過 Java 的朋友們應該都很熟悉,如果你想要說聲 Hello, World! 的話,所需要輸入的字元數量和所需要理解的基礎知識硬是比其他語言多上一大堆: 我們只是想說聲「安安你好」但卻開不了口,因為身為一位 Java 初學者,你要先做的事是: Java 新手的學習困境 這些問題突顯了簡化 Java 初始學習體驗的必要性,而這正是 JEP 477 所要解決的問題。 JEP …

JDK 23 功能:JEP 477 隱式宣告類別和實例主方法的革新之路 閱讀全文 Read more...

,
研討演講

JCConf 2024 – Java 22 & 23 新功能介紹 簡報

JCConf_2024_Java_22_&_23_新功能介紹

活動頁面:JCConf 2024 JCConf 2024 – 2024 年的 Java 22 和 Java 23 延續了之前版本的功能,正式提供了未命名變數與模式、外部函式與記憶體存取 API,並且也新增了有趣的 Markdown 文件註解和直接執行多檔案的原始碼程式等功能。同時,持續孵化中的項目有彈性的建構式、字串模板、向量處理、串流聚集器、隱式宣告類別和實例主方法、基本型別的模式匹配,以及模組匯入宣告等功能。本場演講將與大家分享這兩個版本所帶來的 Java 最新變化。 JCConf 2024 – Java 22 & 23 新功能介紹 from Joseph Kuo …

JCConf 2024 – Java 22 & 23 新功能介紹 簡報 閱讀全文 Read more...

, ,
返回頂端