JDK 24:Java 24 中的新特性
mhr18 2025-01-05 18:56 23 浏览 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 的采用率可能会较低。
相关推荐
- C++开发必知的内存问题及常用的解决方法-经典文章
-
1.内存管理功能问题由于C++语言对内存有主动控制权,内存使用灵活和效率高,但代价是不小心使用就会导致以下内存错误:omemoryoverrun:写内存越界odoublefree:同一块内...
- 缓存用不好,系统崩得早!10条军规让你成为缓存高手
-
凌晨三点,我被电话惊醒:“苏工!首页崩了!”监控显示:缓存命中率0%,数据库QPS10万+,线程阻塞2000+。根本原因竟是同事没加缓存!不会用缓存的程序员,就像不会刹车的赛车手——...
- 彻底搞清楚内存泄漏的原因,如何避免内存泄漏,如何定位内存泄漏
-
作为C/C++开发人员,内存泄漏是最容易遇到的问题之一,这是由C/C++语言的特性引起的。C/C++语言与其他语言不同,需要开发者去申请和释放内存,即需要开发者去管理内存,如果内存使用不当,就容易造成...
- Java中间件-Memcached(Java中间件大全)
-
一、知识结构及面试题目分析缓存技术的大规模使用是互联网架构区别于传统IT技术最大的地方,是整体高并发高性能架构设计中是重中之重的关键一笔,也是互联网公司比较偏好的面试题目。按照在软件系统中所处位置...
- linux内存碎片防治技术(linux内存碎片整理)
-
推荐视频:90分钟了解Linux内存架构,numa的优势,slab的实现,vmalloc原理剖析Linux内核内存分配与回收Linuxkernel组织管理物理内存的方式是buddysystem(伙...
- Redis主从架构详解(redis主从配置详细过程)
-
Redis主从架构搭建Redis主节点配置创建主节点目录(/opt/redis-master),复制redis.conf到该目录下,redis.conf配置项修改#后台启动daemonizeyes...
- 揭开CXL内存的神秘面纱(内存c1)
-
摘要:现代数据中心对内存容量的高需求促进了内存扩展和分解方面的多条创新线,其中一项获得极大关注的工作是基于ComputeeXpressLink(CXL)的内存扩展。为了更好地利用CXL,研究人员建...
- 一文彻底弄懂 TPS RPS QPS(tps cps)
-
以下是关于RPS、QPS、TPS的核心区别与关联的总结,结合实际场景和优化建议:一、核心定义与区别RPS:RequestsPerSecond每秒请求数客户端到服务器的完整请求数量Web服务...
- 用Redis的“集合”找出你和朋友的“共同关注”
-
你是不是在刷抖音、微博、小红书的时候,常常会看到这样的提示:“你和XXX有共同关注的博主/朋友”?或者当你关注了一个新的明星,系统会推荐“你的朋友YYY也关注了这位明星”?这个看似简单的功能背后,其实...
- WOT2016彭哲夫:科班出身开发者对运维人员的期许
-
“运维与开发”是老生常谈的话题,前几天和一个运维人聊天,TA说一些公司运维岗位都不公开招聘了,这让众多运维人员情何以堪?是运维的岗位真的饱和了?是找到合适的运维人才难?还是有这样那样的因素?带着这些疑...
- Java程序员最常用的20%技术总结(java程序员要掌握什么)
-
我听说编程语言,经常使用的是其中20%的技术。在Java这门语言中,这20%包括哪些内容?找到一份Java初级程序员的工作,有哪些是必须掌握的,有哪些是可以现学现卖的?一个完整的Javaweb项目,有...
- 秒杀系统实战(四)| 缓存与数据库双写一致性实战
-
前言微笑挖坑,努力填坑。————已经拥有黑眼圈,但还没学会小猪老师时间管理学的蛮三刀同学本文是秒杀系统的第四篇,我们来讨论秒杀系统中「缓存热点数据」的问题,进一步延伸到数据库和缓存的...
- 头条评论精灵翻牌子(头条评论精灵翻牌子怎么弄)
-
关于“头条评论精灵翻牌子”功能,这通常是指平台通过算法或运营手段,将用户的优质评论随机或定向推送到更显眼的位置(如信息流顶部、独立曝光位等),以提升互动率和用户参与感。以下是详细解析和建议:一、功能理...
- 15个程序员们都应该知道的大模型高级提示词指令模板和示例
-
作为程序员你如何写大模型指令?你写的指令是不是更专业呢?下面是15个程序员使用的专业的大模型指令,如果早知道可以能节省你很多时间。这些指令可以用在chatgpt,deepseek等大模型。1.一键...
- MyBatis-Plus内置的主键生成策略有大坑,要注意!
-
昨天小伙伴使用Mybaits-Plus开发的项目线上(集群、K8S)出现了主键重复问题,其报错如下:Mybatis-Plus启动时会通过com.baomidou.mybatisplus.core.to...
你 发表评论:
欢迎- 一周热门
-
-
Redis客户端 Jedis 与 Lettuce
-
高并发架构系列:Redis并发竞争key的解决方案详解
-
redis如何防止并发(redis如何防止高并发)
-
开源推荐:如何实现的一个高性能 Redis 服务器
-
redis安装与调优部署文档(WinServer)
-
Redis 入门 - 安装最全讲解(Windows、Linux、Docker)
-
一文带你了解 Redis 的发布与订阅的底层原理
-
Redis如何应对并发访问(redis控制并发量)
-
oracle数据库查询Sql语句是否使用索引及常见的索引失效的情况
-
Java SE Development Kit 8u441下载地址【windows版本】
-
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)