JDK 27 运行时更新发布说明

JDK 27 运行时更新发布说明

💡 原文英文,约1400词,阅读约需5分钟。
📝

内容提要

JDK 27 运行时更新:G1 成为所有环境的默认垃圾收集器,紧凑对象头默认启用以减少约20%堆占用,JFR 默认脱敏敏感信息,jcmd 新增安全属性查询、文件描述符统计和 Bash 补全,移除多个旧 JVM 参数及 JVMCI,G1 堆扩缩容默认禁用。

🔎

延伸解读

G1 成为全环境默认 GC 的影响

JDK 27 将 G1 设为所有环境的默认垃圾收集器,取代了以往在资源受限时使用的 Serial GC。这意味着即使在小内存环境中,G1 也默认启用。但文章强调没有“最佳 GC”,每种 GC 在 CPU、内存、暂停时间上各有取舍。因此,升级后应重新测试和测量 GC 行为,确保应用 KPI 不受影响。

紧凑对象头默认启用带来的收益与关闭方式

紧凑对象头在 JDK 25 已定稿,JDK 27 默认启用,无需再传递 -XX:+UseCompactObjectHeaders。它缩小对象元数据,可减少约 20% 的堆占用,并降低 GC 压力。若需关闭,可使用 -XX:-UseCompactObjectHeaders。对于堆内存敏感的应用,这能直接降低内存需求。

JFR 默认脱敏与自定义过滤

JFR 现在默认对 JVM 参数和环境变量中的敏感信息(如密码、API 密钥)进行脱敏。用户可通过 -XX:FlightRecorderOptions 的 redact-arguments 和 redact-key 子选项添加自定义过滤器,支持大小写不敏感的 glob 模式(* 和 ?)。若需包含默认过滤器,可在第一个过滤器前加 +;若需禁用默认过滤器,可传递 none。

JVM 参数移除与重命名:升级注意事项

JDK 27 移除了 -noclassgc、-noverify、-verifyremote 和 -Xverify:none 等已弃用参数。其中 -noclassgc 由 -Xnoclassgc 替代,-verifyremote 由 -Xverify:remote 替代,而 -noverify 和 -Xverify:none 无替代。此外,-XX:InitiatingHeapOccupancyPercent 重命名为 -XX:G1IHOP,旧选项已弃用,未来可能移除。升级前应更新启动脚本。

Q&A

JDK 27 中 G1 垃圾收集器有什么变化?

G1 成为所有环境的默认垃圾收集器,除非显式指定其他收集器。

紧凑对象头在 JDK 27 中默认启用了吗?有什么好处?

是的,紧凑对象头默认启用,可减少约 20% 的堆占用,并降低 GC 压力。

JFR 在 JDK 27 中如何保护敏感信息?

JFR 默认会脱敏敏感信息,如密码和 API 密钥,并支持自定义过滤器。

jcmd 工具在 JDK 27 中新增了哪些功能?

新增了 VM.security_properties 命令、文件描述符统计和 Bash 补全。

JDK 27 移除了哪些 JVM 参数?

移除了 -noclassgc、-noverify、-verifyremote 和 -Xverify:none。

JDK 27 中 G1 的堆扩缩容默认行为是什么?

G1 堆扩缩容默认被禁用,通过调整 MinHeapFreeRatio 和 MaxHeapFreeRatio 的默认值实现。

🏷️

标签

➡️

继续阅读