写点什么

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:001

评论

发布
暂无评论

UI设计培训班出来后找工作吗?

小谷哥

Java培训需要多长时间

小谷哥

开源公开课丨ChengYing安装原理剖析

袋鼠云数栈

开源新工具 Azure Developer CLI

Azure云科技

azure cli 应用程序 #开源

Python 自动化测试(三): pytest 参数化测试用例构建

霍格沃兹测试开发学社

MockServer 服务框架设计

霍格沃兹测试开发学社

5 个 JavaScript 写法小技巧分享

掘金安东尼

JavaScript 前端 8月月更

易观千帆 | 2022年7月苏州市手机银行应用活跃人数榜单

易观分析

金融 手机银行 榜单 苏州

前端高频面试题(三)(附答案)

helloworld1024fd

JavaScript 前端

大学毕业后如何选择大数据培训机构

小谷哥

Quick Tracking「全域采集与增长分析」,破局全域营销之道

瓴羊企业智能服务

Pb协议的接口测试

霍格沃兹测试开发学社

如何应对突发的流量激增和服务器过载问题

NGINX开源社区

nginx 流量控制 高速缓存

前端高频面试题(四)(附答案)

helloworld1024fd

JavaScript 前端

Junit5 架构、新特性及基本使用(常用注解与套件执行)

霍格沃兹测试开发学社

分布式协同AI基准测试项目Ianvs:工业场景提升5倍研发效率

华为云开发者联盟

云计算 云原生

【算法实践】他山之石,可以攻玉--利用完全二叉树快速实现堆排序

迷彩

Python 数据结构 算法 二叉堆排序 8月月更

麦聪软件为云上客户提供DaaS服务,入驻国内Top3云市场

雨果

公有云私有云 DaaS数据即服务

Python 自动化测试(五): Pytest 结合 Allure 生成测试报告

霍格沃兹测试开发学社

深度解读|关于SBOM最基础元素,你需要知道的(Part III)

安势信息

漏洞 漏洞扫描 代码安全 SBOM SBOM最基础元素

成长计划校园极客秀 | 玩转OpenHarmony开发智能煤气检测系统

OpenHarmony开发者

OpenHarmony

开源治理:安全的关键

SEAL安全

开源 开源文化 开源安全 开源安全与治理

同时将博客部署到github和conding

Five

前端 博客搭建 8月月更

开源交流丨任务or实例 详解大数据DAG调度系统Taier任务调度

袋鼠云数栈

2022年无糖茶饮料发展洞察分析

易观分析

无糖茶 行业洞察

node在大前端中的应用场景

达摩

nodejs

如何选择靠谱的Java培训

小谷哥

PageObject(PO)设计模式在 UI 自动化中的实践总结(以 QQ 邮箱登陆为例)

霍格沃兹测试开发学社

大数据培训机构学习后就业前景如何

小谷哥

数字藏品系统开发:详细功能介绍

开源直播系统源码

NFT 数字藏品 数字藏品系统软件开发 NFT数字藏品系统

软件测试 | 测试开发 | app自动化测试之Appium 原理 与 JsonWP 协议分析

测吧(北京)科技有限公司

json

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