写点什么

Java 25 在 JEP 519 中集成了紧凑对象头

  • 2025-06-19
    北京
  • 本文字数:1735 字

    阅读完需:约 6 分钟

大小:910.13K时长:05:10
Java 25在JEP 519中集成了紧凑对象头

Java 25 通过JEP 519将紧凑对象头作为产品特性进行了集成,在不需要更改任何代码的情况下,为开发人员提供了30%的CPU减少和显著的内存节省。该特性将对象头大小从 12 字节减少到仅 8 字节,并且只需要一个简单的 JVM 标志即可启用。亚马逊已经在数百个生产服务中对这一特性进行了实战测试。

 

这一增强解决了 Java 内存模型中长期存在的一个低效问题,即在具有许多小对象的应用程序中,对象头可能会消耗超过 20%的堆空间。通过将传统的 96 位头压缩到 64 位,使用 Spring Boot、微服务架构和数据处理管道等框架的应用程序可以立即实现性能提升。

 

在 HotSpot JVM 中,所有对象都驻留在 Java 堆中,Java 堆是进程 C 堆中的一个连续区域。Java 完全通过引用来处理对象,这意味着局部变量包含从栈帧到 Java 堆的指针,引用类型的对象字段指向堆位置之间,并且每个引用都指向对象头的开始。

 

这种强制性的头结构历来给 Java 应用程序带来了巨大的内存负担,特别是那些处理大量小对象的应用程序。

 

传统的 HotSpot JVM 对象通过其头携带大量的开销,包括一个 64 位的标记字和一个 32 位的压缩类字。标记字存储特定于实例的元数据,包括垃圾收集年龄和转发指针、稳定的标识哈希码和锁/监视器信息。类字包含一个指向元空间中类元数据的压缩指针。

 

对于平均 32-64 字节的对象,这在实际应用程序中很常见,这个 12 字节的头代表了大约 20%的开销。

 

紧凑对象头通过巧妙地将类指针从 32 位压缩到 22 位,并将其与标记字合并到一个单一的 64 位结构中来解决这个问题:



测试显示在各种工作负载中都有引人注目的改进。 SPECjbb2015 显示堆使用减少了22%,执行速度提高了 8%,而亚马逊的生产工作负载在数百个服务中最多减少了 30%的 CPU。垃圾收集性能显著提高,G1 和并行收集器的收集频率都降低了15%。JSON 解析基准测试显示,执行时间减少了10%,在最坏情况下,吞吐量开销限制在 5%,许多工作负载显示出净收益。

 

在内存受限的环境中,例如边缘计算和无服务器平台,这些环境中的高效内存利用率直接影响部署密度和成本。

 

在 Java 25 中启用紧凑对象头需要添加一个单一的 JVM 标志:

 

Java 24(实验性——需要 JEP 450)

 

java -XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders MyApp

 

Java 25(集成——JEP 519)

 

java -XX:+UseCompactObjectHeaders MyApp

 

该特性可以透明地与 x64 和 AArch64 平台上的现有代码一起工作。应用程序无需修改即可立即获益,尽管某些配置面临限制。开发人员不能将紧凑头与 -XX:-UseCompressedClassPointers (已弃用)或旧的堆栈锁定(也已弃用)结合使用。x64 上的 ZGC 支持仍在开发中。

 

该实现通过若干技术突破实现了压缩。22 位类指针支持大约 400 万个惟一类,远远超过了任何实际应用程序的需求。它从 32 位的减少中节省了关键的头空间,同时保持了实际的限制。

 

JEP 519 代表了Lilliput项目的第一个集成特性,Lilliput 项目是 OpenJDK 减少对象内存开销的倡议。该项目的历程展示了精心的工程设计,从 JDK 22 中引入对象监视器表基础设施开始,随后在 JDK 24(2025 年 3 月)中通过JEP 450引入实验性紧凑头,最终在 JDK 25(2025 年 9 月)中通过 JEP 519 实现完全集成。

 

亚马逊的工程团队已经在不同的工作负载中广泛验证了紧凑头。他们成功地将该特性反向移植到 JDK 17 和 21,将其部署到数百个生产服务中,并测量了一致的效率提升而没有回归。这种现实世界的验证影响了将特性集成到 JDK 25 的决定,并为考虑采用这一集成特性的组织提供了信心。

 

内存效率的改进直接影响现代云部署。容器密度随着应用程序每个实例所需内存的减少而增加,从而允许每个主机的应用程序密度更高,进而降低基础设施成本。由于较小的对象能更好地适应 CPU 缓存,因此缓存利用率得到了提高。由于减少的 GC 压力创造了更一致的响应时间,延迟变得更加可预测。这些好处在微服务架构中是复合的,其中许多小服务能同时受益。

 

这些改进在成本敏感的环境中尤其有价值,因为在这些环境中,内存效率能直接转化为操作的节省。

 

对于运行许多小对象的 Java 应用程序的团队来说,这几乎包括了所有现代 Java 工作负载,JEP 519 提供了一个难得的机会:通过简单的配置更改就可以大幅提高性能。该特性集成到 Java 25 中,标志着它已准备好被广泛采用。

 

原文链接:

https://www.infoq.com/news/2025/06/java-25-compact-object-headers/

2025-06-19 18:0010166

评论

发布
暂无评论

白嫖!字节跳动 Java岗顶级面试解析(2023版),GitHub巅峰神作!

三十而立

2023 Java面试题短期突击攻略,已帮助400+位程序员成功拿到offer

小小怪下士

Java 程序员 面试 后端

集简云软件连接器,实现业务流程自动化

集简云开放平台

低代码开发 低代码平台 数据集成平台

极客高赞:网络安全为什么缺人?缺什么样的人?

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

阿里,快手,拼多多等 7 家大厂 Java 面试真题,Java 笔试题及答案详解

三十而立

【Meetup回顾第1期】竟是这样的国产数据库,YashanDB技术内幕曝光

YashanDB

崖山科技通过CMMI3级认证,研发管理能力获国际权威认可!

YashanDB

升级企业数智化底座,以技术重构企业发展力

用友BIP

技术大会 用友iuap 用友BIP 用友技术大会

谈一谈 SAP 企业管理软件里那些真假 Fiori 应用

汪子熙

SAP Fiori 企业管理软件 思爱普 三周年连更

搭建数据驱动的技术底座,助力企业数智化变革

用友BIP

技术大会 用友iuap 用友技术大会 升级企业数智化底座

仅凭这份 Java 大纲笔记,我如愿拿到了阿里 offer。

三十而立

袋鼠云春季生长大会最新议程来啦!4月20日我们云上见

袋鼠云数栈

大数据 数字化转型

华为云等保安全服务,助力企业多快好省过等保

秃头也爱科技

Postman 如何传递 Date 类型参数

Liam

Java 程序员 后端 Postman

selenium源码通读·6 |webdriver/common/alert.py-Alert类分析

Python 源码 自动化测试 selenium

全面拥抱Serverless,腾讯云大数据Elasticsearch开启云原生新范式

科技热闻

Mysql分页 vs Oracle分页|非常详细,建议收藏

bug菌

MySQL oracle 三周年连更

总结年初到 10 月底 Java 基础、架构面试题,共计 1327 道!涵盖蚂蚁金服、腾讯、字节跳动、美团、拼多多等等一线大厂!

三十而立

用低代码平台可视化设计表单

力软低代码开发平台

听说谛听闹退休?感知网络接班啦!

白洞计划

感知网络

数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年3月刊

墨天轮

MySQL 数据库 oracle postgresql 国产数据库

架构训练营模块九作业

gigifrog

架构训练营

华为云等保安全解决方案,为你守护网络安全

秃头也爱科技

分布式政企应用如何快速实现云原生的微服务架构改造

IT科技苏辞

华为云智能编程助手赋能高校,揭示行业发展新动向

爱尚科技

华为云智能编程助手助力哈尔滨工业大学(深圳)学子,引领软件研发新趋势

爱尚科技

华为云智能编程助手助力哈尔滨工业大学(深圳)培养新时代软件研发人才

爱尚科技

2023 寻找企业出海“新势力”

Jessie

企业出海 出海

五一临近,赋能乡村振兴,低代码也有话讲!

加入高科技仿生人

低代码 数字化 乡村振兴 乡村旅游

2023最新整理上千道Java面试攻略,近500页PDF文档

会踢球的程序源

Java 面试 找工作 java面试 应届生

Java 25在JEP 519中集成了紧凑对象头_架构_A N M Bazlur Rahman_InfoQ精选文章