本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
Java 的发布节奏越来越稳了,JDK 27 也已经如期而至了。但是用 Java 8 的那批系统,还是无动于衷。
Java 27 昨天正式发布,这不是一次“不炫技”的升级,而是白捡的性能与后量子安全。它能让大多数 Java 应用,不改一行代码,应用自动变快。
其中,有 4 项正式特性全是“零代码修改”型;对象头从 12 字节瘦到 8 字节;G1 接管所有环境;TLS 1.3 默认带上抗量子 buff。
正如大家所知道的一样,9 月 15 日(美国时间),Oracle 如约放出 Java 27。需要注意的是,这依旧不是一个长 LTS 版本。
9 个 JEP,4 个转正
本次发布的 9 个 JEP 如下所示。
| JEP | 内容 | 状态 |
|---|---|---|
| 523 | G1 成为所有环境的默认垃圾收集器 | Final |
| 527 | TLS 1.3 后量子混合密钥交换 | Final |
| 534 | 紧凑对象头默认启用 | Final |
| 536 | JFR 进程内数据脱敏 | Final |
| 531 | 惰性常量(Lazy Constants) | 第 3 次预览 |
| 532 | 模式匹配/instanceof/switch 支持原始类型 | 第 5 次预览 |
| 533 | 结构化并发 | 第 7 次预览 |
| 537 | Vector API | 第 12 次孵化 |
| 538 | 加密对象 PEM 编码 | 第 3 次预览 |
这 4 个正式特性有个共同点,默认生效、无需改代码。接下来挑重点来展开一下,大概有 4 个主要看点。
对象头暴降 33%
JEP 534 可能是 Java 内存优化史上最具里程碑意义的一次默认行为变更。
在 64 位 JVM 上,每个对象头原本占 96 位(12 字节):Mark Word 管锁、GC 年龄、哈希码,Class Word 指向类元数据。Java 堆里又恰恰全是小对象,一个只装一个 int 的 DTO,4 字节数据要配 12 字节“公摊”。紧凑对象头把两者合并成一个 64 位(8 字节)的字,类指针压缩到 22 位(按 1KB 块寻址,约 420 万个类,够用),空余位还给 Project Valhalla 预留了 4 位。
收益有多实在?JEP 534 给出的 SPECjbb2015 数据显示,堆占用减少 22%,CPU 时间减少 8%,GC 次数减少 15%。对象越小的应用收益越大。
其实这个特性已经“潜伏”了很久,它是 Project Lilliput(Red Hat 的 Roman Kennke 2021 年发起)多年瘦身工程的成果,JDK 24 实验性引入,JDK 25 转正但需手动开启,直到 JDK 27 才真正默认打开。此前很多人误以为升到 25 就自动生效,实际一直白跑。之所以敢默认,是因为 Amazon 已把它回移植到 JDK 17/21 在数百个生产服务验证,SAP 的 SapMachine 更是早已默认开启跑客户场景。
国内的一些大厂早已用上了这个特性,包括阿里、携程等,虽然携程踩了坑。如果遇到有依赖对象头布局的 native agent,也可以用 -XX:-UseCompactObjectHeaders 退回旧布局。
G1 全面上位
从 JDK 9 起 G1 就是服务器环境的默认 GC,但小内存、单核环境(比如 K8s 里 512MB 的 Pod)会悄悄退回 Serial。JDK 27 起,不指定收集器时一律 G1,没有例外。
官方承诺在原来选 Serial 的场景下,吞吐量、延迟、内存占用和启动时间“不应显著下降”,底气来自 JDK 26 的 JEP 522 已把 G1 的同步开销大幅压低,吞吐接近 Serial。
但社区也给出冷静提醒,如果你的应用此前“白嫖”了低配环境的 Serial GC,升级后 G1 的并发线程会吃额外 CPU,CPU 敏感型小容器可能出现 5%~15% 的响应时间变化;想回到旧行为,需要显式加 -XX:+UseSerialGC。建议升级前在测试环境对比 Young GC 频率、Full GC 次数、暂停时间分布和堆大小变化,四项指标无差异再放心升。
为量子时代上保险
JEP 527 可能是本次发布最具战略意义的一项。现有的 RSA、ECDH 在量子计算机面前理论上不堪一击,而“先收集、后解密”(Harvest Now, Decrypt Later)的攻击今天就在发生,攻击者囤下现在的密文,等量子算力成熟再解。
JDK 27 的方案是混合密钥交换。传统 ECDHE + 抗量子的 ML-KEM 一起上,只要有一个没破,通信就是安全的。TLS 1.3 新增三个命名组,X25519MLKEM768(默认首选)、SecP256r1MLKEM768、SecP384r1MLKEM1024,与 IANA 标准命名一致。
最关键的是使用 javax.net.ssl 的应用默认受益,不改一行代码。这也是 Java 后量子路线图的自然一步,JDK 21 引入 KEM API(JEP 452),JDK 24 引入 ML-KEM 算法(JEP 496),JDK 27 终于把能力接进了协议层。Oracle 还表态会把同类能力带到后续 LTS 版本,减少对关键业务的扰动。
如果需要精细化控制的话,可以用 -Djdk.tls.namedGroups=... 系统属性或 SSLParameters::setNamedGroups 即可。
JFR 脱敏
线上排障离不开 JFR,但录下来的命令行参数、环境变量、系统属性里往往全是密钥和连接串。JEP 536 让敏感数据在离开进程之前就被脱敏,既保住诊断价值又满足合规与隐私要求,对处理敏感数据的 AI 系统尤其重要。
JEP 钉子户
这次预览、孵化阵容里有两个“钉子户”还是值得交代一下的。
- 结构化并发(JEP 533)第七次预览:把一组相关子任务当成一个工作单元,作用域退出时自动取消并等待所有子任务,专治线程泄漏。社区普遍认为已接近转正,对编排模型调用、并行检索这类 AI 负载意义重大。
- Vector API(JEP 537)第十二次孵化:一到十二,堪称最执着孵化特性。官方口径是要等 Valhalla 的关键能力落地后再推进到预览,面向 AI 推理、科学计算的向量加速。
另外,原始类型进模式匹配(JEP 532,第五次预览)让 switch/instanceof 直接处理 int、long,混合原始与对象数据的 AI/流式业务代码会清爽很多。
Valhalla 终于进主线了
文章多个配图参见我的公众号:https://mp.weixin.qq.com/s/_DXxQCimuEVRYNuwACjA0A。
这次发布真正的“彩蛋”在 JDK 28 早期访问版里,Project Valhalla 第一阶段正式落地。JEP 401(Value Classes and Objects)与 JEP 539 将随 JDK 28 以预览形式提供,仅这一个特性的 PR 就超过 19.7 万行代码、改动 1816 个文件,集成期间其他提交者都被要求暂停大改动。
影响也是立竿见影的,预览模式下 Integer 等包装类将失去对象身份,装箱开销大幅缩小,Integer[] 的效率开始逼近 int[];当然,synchronized(Integer.valueOf(42)) 这类烂代码会直接抛异常。语言架构师 Brian Goetz 给狂热的社区泼了冷水,连下一个 LTS(JDK 29)退出预览都“过于乐观”,而这还只是 Valhalla 的第一部分。
除此之外还有一波生态配套更新,如下所示。
- Helidon 27:版本号与 OpenJDK 对齐,虚拟线程 + Scoped Values 打底,新增声明式 gRPC/消息模块和 Helidon Data JDBC;
- JavaFX 27:macOS 上换用 Metal 渲染管线,文本编辑控件和无障碍增强;
- Oracle Jipher 20:封装通过 FIPS 140-3 验证的 OpenSSL 模块,新增 ML-KEM/ML-DSA 与 KDF/HKDF 支持,正式纳入 Java Verified Portfolio;
- OCI 成为首个支持 Oracle JDK 27 的云平台。
顺带一提,OpenJDK 的贡献者名单里依旧能看到阿里、亚马逊、ARM、谷歌、IBM、微软、英伟达、红帽、SAP 的身影,独立开发者贡献了 16% 的修复。
写在最后
Java 27 不是 LTS 版本,Oracle 官方支持到 2027 年 3 月,随后由 JDK 28 接棒;下一个 LTS 是 2027 年 9 月的 JDK 29。
回看 JDK 27 的四个正式特性,更小的对象头、统一的 G1、抗量子的 TLS、会脱敏的 JFR,发现它们或许有一个共同的主题,那就是“默认做正确的事”。没有新语法要学,没有新框架要换,升级本身就直接带来收益,这样的 Java 新版本越多越好!

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » Java 27 发布,对象头降 33%,堆内存降 20%