JDK 24:Java 24 中的新特性
ccwgpt 2024-12-20 11:33 143 浏览 0 评论
Java 的下一个版本提出了 12 个功能,包括紧凑标头、模式中的原始类型、instanceof 和 switch,以及无需 JMOD 即可链接运行时镜像。
继9 月 17 日发布Java 开发工具包 (JDK) 23之后,计划中的后续版本JDK 24 的开发工作仍在继续,目前已提出 17 个功能。最新的五个功能包括删除 32 位 x86 端口、同步虚拟线程而不进行固定、简单的源文件和实例主方法、永久禁用安全管理器以及模块导入声明。
先前提出的功能包括紧凑标头的实验版本;模式中的原始类型、instanceof和switch;无需 JMOD 即可链接运行时图像;分代 Shenandoah 垃圾收集器;范围值;密钥派生函数 API;删除 Z 垃圾收集器中的非分代模式;流收集器;向量 API;类文件 API;警告以便开发人员为未来使用 JNI(Java 本机接口)的限制做好准备;以及 G1 垃圾收集器的后期屏障扩展。
JDK 24 将于 2025 年 3 月 18 日到期,已被指定为非长期支持 (LTS) 版本。与 JDK 23 一样,JDK 24 也将仅获得 Oracle 六个月的Premier 级支持。JDK 24 的早期访问版本可在jdk.java.net上找到。
新特性:
- Windows 32 位 x86 端口已在 JDK 21 中弃用并删除,目的是在未来版本中将其删除。计划最终删除对 Windows 32 位 x86 端口的源代码和构建支持。JDK 24 将更新构建系统,以便在尝试配置 Windows 32 位 x86 (x86-32) 构建时发出错误消息。该错误消息将通过新的配置选项来抑制。端口和相关的端口特定功能将在相关文档中标记为弃用并删除。
- 同步虚拟线程而不固定:涉及提高使用同步方法和语句的 Java 代码的可扩展性,方法是安排在此类构造中阻塞的虚拟线程释放其底层平台以供其他线程使用。这将消除几乎所有虚拟线程被固定到平台线程的情况,这严重限制了可用于处理应用程序工作负载的虚拟线程数量。
- 简单源文件和实例主方法:第四个预览将改进 Java 语言,以便初学者可以编写他们的第一个程序,而无需了解为大型程序设计的语言功能。该功能之前已在JDK 21、JDK 22和JDK 23中预览过。将采用新术语和修订后的标题,但该功能其他方面保持不变。它以前被称为隐式声明的类和实例主方法。
- 永久禁用安全管理器:需要修改 Java 平台规范,以便开发人员无法启用安全管理器,而其他平台类则不会引用它。提案指出,多年来,安全管理器一直不是保护客户端 Java 代码的主要手段,很少用于保护服务器端代码,而且维护成本高昂。安全管理器已在 Java 17 中被弃用并被删除。
- 紧凑对象头:会将 HotSpot VM 中的对象头大小从 96 到 128 位减少到 64 位架构上的 64 位。提议的功能的目标是减少堆大小、提高部署密度并增加数据局部性。
- 模块导入声明:(之前已在 JDK 23 中预览)增强了 Java 编程语言,使其能够简洁地导入模块导出的所有包。这简化了模块库的重用,但不需要将代码导入为模块本身。
- JDK 24 中模式、 instanceof和switch中原始类型的第二个预览 将通过允许所有模式和上下文中的原始类型来增强模式匹配。该功能还将扩展instanceof和switch以适用于所有原始类型。该功能的目标包括通过允许所有类型(无论是原始类型还是引用类型)的类型模式来实现统一的数据探索;将类型与instanceof对齐并将instanceof与安全转换对齐;并允许模式匹配在嵌套和顶级模式上下文中使用原始类型。此功能之前已在 JDK 23 中预览过。
- 其他目标包括提供易于使用的构造,消除由于不安全的强制类型转换而丢失信息的风险,遵循 Java 5 和 Java 7 中对switch的增强,并允许switch处理任何原始类型的值。
通过链接不使用 JMOD 的运行时映像,计划通过启用jlink工具来创建不使用 JDK JMOD文件的自定义运行时映像,将 JDK 的大小减少约 25%。此功能必须默认启用,某些 JDK 供应商可能选择不启用它。目标包括允许用户从模块链接运行时映像,而不管这些模块是独立的 JMOD 文件、模块化 JAR 文件还是先前链接的运行时映像的一部分。提出该提案的动机是,在云环境中,文件系统上安装的 JDK 的大小非常重要,因为包含已安装 JDK 的容器映像会通过网络自动且频繁地从容器注册表复制。减小 JDK 的大小将提高这些操作的效率。
分代 Shenandoah将通过实验性的分代收集功能增强垃圾收集器,以提高可持续吞吐量、负载峰值抵抗力和内存利用率。主要目标是提供一种实验性的分代模式,而不会破坏非分代 Shenandoah。分代模式旨在成为未来版本中的默认模式。
范围值使方法能够与线程内的调用方和子线程共享不可变数据。范围值比本地线程变量更容易推理。它们还具有较低的空间和时间成本,特别是与虚拟线程和结构化并发一起使用时。范围值 API 是在JDK 20中提出的孵化版,在JDK 21中提出的预览版,并针对JDK 22和JDK 23进行了改进和完善。范围值将在 JDK 24 中预览。
借助密钥派生函数 (KDF) API,将引入用于密钥派生函数的 API,这些函数是用于从密钥和其他数据派生其他密钥的加密算法。此提案的目标是允许安全提供商以 Java 代码或本机代码实现 KDF 算法。另一个目标是使应用程序能够使用 KDF 算法,例如基于 HMAC(哈希消息认证码)的提取和扩展密钥派生函数 ( RFC 5869 ) 和 Argon2 ( RFC 9106 )。
删除 Z 垃圾收集器 (ZGC) 的非分代模式是一项旨在降低支持两种不同模式的维护成本的提案。该提案指出,维护非分代 ZGC 会减慢新功能的开发速度,而对于大多数用例而言,分代 ZGC 应该是比非分代 ZGC 更好的解决方案。后者最终应该被前者取代,以降低长期维护成本。该计划要求通过淘汰该选项ZGenerational并删除非分代 ZGC 代码及其测试来删除非分代模式。非分代模式将在未来的版本中过期,届时它将不会被 HotSpot JVM 识别,从而拒绝启动。
流收集器将增强流 API,以支持自定义中间操作。流收集器允许流管道以现有内置中间操作无法轻易实现的方式转换数据。此功能在JDK 22和JDK 23中作为预览版提出。该 API 将在 JDK 24 中最终确定。目标包括使流管道更加灵活和富有表现力,并允许自定义中间操作来操作无限大小的流。
向量API旨在表达向量通信,这些通信在运行时可靠地编译为受支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。向量 API 之前在JDK 16到JDK 23中孵化。它将在 JDK 24 中重新孵化,没有任何 API 变化,也没有相对于 JDK 23 的实质性实现。该提案的目标包括用与平台无关的 API 清晰简洁地表达各种向量计算,在 x64 和 AArch54 架构上提供可靠的运行时编译和性能,当无法在运行时表达向量计算时可以优雅地降级并仍然运行,并与Project Valhalla保持一致,利用对 Java 对象模型的增强功能。
之前在 JDK 22 和 JDK 23 中预览过的类文件 API将 在 JDK 24 中最终确定,但会略有改动。此 API 提供了一个用于解析、生成和转换 Java 类文件的标准 API。其目的是提供一个用于处理类文件的 API,该 API 跟踪 Java 虚拟机规范定义的类文件格式。第二个目标是使 JDK 组件能够迁移到标准 API,并最终删除 JDK 内部的第三方ASM 库副本。 自第二个预览版以来的更改 包括重命名枚举值、删除某些字段、添加方法和方法重载、重命名方法以及删除被认为不必要的接口和方法。
G1 垃圾收集器的后期屏障扩展旨在简化 G1 屏障的实现。G1 垃圾收集器的屏障通过将其扩展从 C2 编译管道的早期移到后期来记录有关应用程序内存访问的信息。目标包括减少使用 G1 收集器时 C2 编译的执行时间,使对 C2 缺乏深入了解的 HotSpot 开发人员能够理解 G1 屏障,并确保 C2 保留有关内存访问、安全点和屏障的相对顺序的不变量。第四个功能是保留 C2 生成的 JIT(即时)编译代码的质量(速度和大小)。
第一个针对 JDK 24 的功能,正式名称为“准备限制使用 JNI ”,要求发出有关使用 JNI 的警告,并调整JDK 22中的外部函数和内存 (FFM) API ,以一致的方式发出警告。这些警告旨在为未来版本做准备,通过统一限制 JNI 和 FFM API,默认确保完整性。该计划的目标包括将 JNI 保留为与本机代码互操作的标准方式,为默认不允许与本机代码互操作的未来版本准备 Java 生态系统,并协调 JNI 和 FFM API 的使用,以便库维护者可以从一个迁移到另一个,而无需开发人员更改命令行选项。
针对 JDK 24 的其他功能将在未来几个月内确定。潜在的 Java 24 功能包括 JDK 23 中预览的功能的进一步预览或最终版本。这些功能包括简化并发编程的结构化并发和灵活的构造函数主体,这为开发人员提供了更大的自由来表达构造函数的行为。
提前类加载(Ahead-of-time class loading)是一项旨在加速 Java 启动的功能,而字符串模板(string templates)是一项在 JDK 21 和JDK 22中预览过但从 JDK 23 中删除的功能,也可能会在 JDK 24 中推出。
最新的 LTS 版本JDK 21于 2023 年 9 月发布,预计将获得 Oracle 至少五年的 Premier 支持。下一个 LTS 版本 JDK 25 将于 2025 年 9 月发布。LTS版本主导了 Java 的采用,这意味着在用户等待 JDK 25 时,JDK 23 和 JDK 24 的采用率可能会较低。
相关推荐
- FastUI:用Python构建高性能React应用,告别JavaScript
-
在现代Web开发中,前后端分离已经成为主流趋势。然而,前端开发往往需要深入掌握JavaScript和各种框架,这对于许多Python开发者来说是一个不小的挑战。今天,我们要介绍一个革命性的UI框架——...
- Python + Flet 开发网站的最佳数据库模块组合
-
对于使用Python和Flet开发网站并需要数据库支持的应用,以下是推荐的模块组合方案。方案一:SQLite+SQLAlchemy(推荐轻量级方案)**适用场景**:中小型应用、单用户或...
- 前端程序员应该往全栈方向发展吗?还是坚守前端?
-
这是一个非常经典且重要的问题,几乎每一位走到职业生涯十字路口的前端程序员都会思考。它没有一个绝对的“正确答案”,但我们可以从多个维度来分析,帮你找到最适合你的那条路。简单来说,这不是一个“要不要”的...
- Python交互仪表盘工具:Panel 进阶学习路线图
-
Panel作为Python生态系统中最强大的交互式仪表盘工具之一,其学习曲线既平缓又深远。这里我将为您构建一个系统化的进阶学习框架,包含实战项目和关键学习节点。1.现代化Web集成开发1....
- PuePy:将Python带入浏览器的革命性框架
-
在现代网络开发中,JavaScript无疑是主导地位的编程语言。但最近,随着WebAssembly和PyScript的崛起,Python的使用场景逐渐扩展到了前端开发领域。PuePy应运而生,作为一...
- 不容易!找到一个python的超简易网站搭建神器
-
作者:清香客来源:Python技术相信很多学习python的酱友们,大部分和我一样是为了提升工作效率,但是在提升自己的工作效率时,也会想着做同样工作的同事能不能也用上自己写的脚本(视工作环境而定)...
- PyWebView:用 Python 构建桌面应用的神器
-
作为一个Python开发者,我一直希望能找到一种简便的方法来构建桌面应用,而不是去学习诸如Electron这种重度依赖JavaScript的技术栈。就在我为桌面应用开发寻找替代方案时,遇到...
- Python Django框架中级教程:深入探索Django的核心功能
-
在Python的Web开发领域中,Django框架以其强大的功能和高效的开发模式占据着重要地位。对于已经掌握了Django基础的开发者来说,进一步深入学习中级知识能让我们开发出更复杂、更强大的Web应...
- 【Python程序开发系列】使用Flask实现前后端分离(案例)
-
这是我的第398篇原创文章。一、引言随着web开发的不断发展,前后端分离已成为越来越流行的架构设计。Flask是一个轻量级的Pythonweb框架,非常适合用于构建API,然后配合前端框...
- 每天一个Python库:Flask超轻量Web框架,灵活高效!
-
为什么要学Flask?Flask是一个「微型但强大的」Web框架:极简上手,几行代码即可跑起来灵活扩展,想加啥加啥(RESTful、JWT、数据库…)文档齐全,适合入门API开发或快...
- Python个人量化投资系统:后台搭建
-
独立搞量化系统的程序员最烦啥?重复造权限管理的轮子绝对排前三。技术老手用Python+PearAdminFlask两天搭出量化后台,实测开源框架真能省下80%基础工作量。开源后台框架选对,一人项目...
- python后端学什么(python后端好找工作吗)
-
在当今数字化的时代,Python后端开发成为了众多开发者追逐的热门领域。那么,想要在这个领域崭露头角,我们究竟应该学些什么呢?学习Python后端开发需要掌握全栈技术栈,涵盖从基础语法到分布式...
- Motia:重新定义后端与智能体整合的未来平台
-
在AIagent技术飞速发展的今天,我们拥有了诸如Dify、RAGFlow、LangChain等一系列优秀平台。然而,随着场景复杂度增加,开发者正面临一个共同问题:后端越来越碎片化,Agen...
- Python数据校验不再难:Pydantic库的工程化实践指南
-
在FastAPI框架横扫Python后端开发领域的今天,其默认集成的Pydantic库正成为处理数据验证的黄金标准。这个看似简单的库究竟隐藏着哪些让开发者爱不释手的能力?本文将通过真实项目案例,带您解...
- Python Flask 建站框架实操教程(flask框架网页)
-
下面我将带您从零开始构建一个完整的Flask网站,包含用户认证、数据库操作和前端模板等核心功能。##第一部分:基础项目搭建###1.创建项目环境```bash#创建项目目录mkdirfl...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- FastUI:用Python构建高性能React应用,告别JavaScript
- Python + Flet 开发网站的最佳数据库模块组合
- 前端程序员应该往全栈方向发展吗?还是坚守前端?
- Python交互仪表盘工具:Panel 进阶学习路线图
- PuePy:将Python带入浏览器的革命性框架
- 不容易!找到一个python的超简易网站搭建神器
- PyWebView:用 Python 构建桌面应用的神器
- Python Django框架中级教程:深入探索Django的核心功能
- 【Python程序开发系列】使用Flask实现前后端分离(案例)
- 每天一个Python库:Flask超轻量Web框架,灵活高效!
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- ui自动化框架 (47)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)