IntelliJ IDEA 中的 Java 27

IntelliJ IDEA 中的 Java 27

💡 原文英文,约2400词,阅读约需9分钟。
📝

内容提要

Java 27 计划于 2026 年 9 月发布,包含 9 个 JEP。其中 4 个正式特性为:G1 成为所有环境的默认垃圾收集器、TLS 1.3 后量子混合密钥交换、默认紧凑对象头、JFR 进程内数据脱敏;4 个预览特性为:惰性常量、原始类型模式匹配、结构化并发、PEM 编码;1 个孵化特性为 Vector API。IntelliJ IDEA 将在首日支持 Java 27,并改进调试器性能。

🔎

延伸解读

G1 成为全环境默认垃圾收集器的影响

Java 27 将 G1 设为所有环境的默认垃圾收集器,取代了此前在单 CPU 或内存低于 1,792 MB 时回退的 Serial GC。这意味着资源受限环境也将默认使用 G1,得益于 Java 26 中减少同步的改进,G1 性能已足够替代 Serial。若应用在受限环境下表现更好,仍可通过 -XX:+UseSerialGC 显式启用 Serial。

紧凑对象头默认化带来的内存收益

紧凑对象头在 Java 27 中成为默认布局,将 64 位架构上的对象头从 96 位减少到 64 位。这能降低堆内存占用、提高部署密度并改善数据局部性。大量对象的应用将受益于 JVM 内存占用的减少。JetBrains IDE 已使用该特性并观察到持续的内存节省,用户无需再像 JDK 25 那样通过命令行选项启用。

预览与孵化特性的使用注意事项

Java 27 包含四个预览特性和一个孵化特性,均与 Java 26 相同但部分有修订。预览特性需将语言级别设为 27 (Preview),且 IntelliJ IDEA 仅支持当前 JDK 的预览特性。孵化特性如 Vector API 需通过 --add-modules 显式添加模块,且不适用于生产环境。开发者应留意这些特性可能在未来版本中变化或移除。

调试器性能改进与向后移植

JDK 27 修复了调试器单步执行缓慢的问题(JDK-6960970),使调试步进更快。JetBrains 工程师已将修复向后移植到 JetBrains Runtime (JBR) 25,用于调试 IntelliJ IDEA 自身代码,证明该更改可向后移植到 Java 25 且工作正常。若想受益,可使用 JBR 25 或请求供应商向后移植此修复。

Q&A

Java 27 什么时候发布?包含多少个 JEP?

Java 27 于 2026 年 9 月 15 日发布,包含 9 个 JEP,其中 4 个正式特性、4 个预览特性、1 个孵化特性。

Java 27 有哪些正式特性?

Java 27 的 4 个正式特性是:JEP 523 在所有环境中将 G1 设为默认垃圾收集器;JEP 527 为 TLS 1.3 提供后量子混合密钥交换;JEP 534 默认使用紧凑对象头;JEP 536 在 JFR 中进行进程内数据脱敏。

Java 27 的预览特性有哪些?

Java 27 的 4 个预览特性是:JEP 531 惰性常量(第三次预览)、JEP 532 原始类型模式匹配(第五次预览)、JEP 533 结构化并发(第七次预览)、JEP 538 PEM 编码(第三次预览)。

如何在 IntelliJ IDEA 中设置使用 Java 27?

在 IntelliJ IDEA 中,打开 Project Structure,在 Project Settings | Project 的 SDK 下拉菜单中选择 Download JDK 并设置版本为 27,或选择 Add JDK from Disk 指向已安装的 JDK。然后将 Language level 设置为 27 – No new language features,若使用预览特性则设置为 27 (Preview)。

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

JEP 523 使 G1 成为所有环境中 HotSpot JVM 的默认垃圾收集器,取代了之前在单 CPU 或内存小于 1,792 MB 时回退的 Serial GC。对于在受限环境中表现更好的应用,可以通过 -XX:+UseSerialGC 显式启用 Serial。

Java 27 的紧凑对象头有什么好处?

JEP 534 使紧凑对象头成为 HotSpot JVM 的默认对象头布局,将 64 位架构上的对象头从 96 位减少到 64 位,从而减少堆大小、提高部署密度和数据局部性。大量对象的应用将受益于 JVM 内存占用的降低。

Java 27 中 JFR 数据脱敏是什么?

JEP 536 增强了 JDK Flight Recorder (JFR),在记录离开进程之前,对命令行参数、环境变量和系统属性的初始值进行脱敏,以防止敏感信息泄露。

Java 27 的 Vector API 有什么变化?

JEP 537 是 Vector API 的第十二次孵化,在 Java 27 中与 Java 26 相比没有变化。它允许开发者表达向量计算,在支持的 CPU 上编译为最优向量指令。使用需添加 --add-modules jdk.incubator.vector 命令行选项。

Java 27 对调试器有什么改进?

JDK 27 修复了 JDK-6960970,解决了调试器在单步执行时非常缓慢的问题,使得调试单步执行更快。该修复已向后移植到 JetBrains Runtime (JBR) 25。

Project Valhalla 的特性何时会进入 Java?

Project Valhalla 的特性已开始进入 Java。值对象(JEP 401)和 JVM 中的严格字段初始化(JEP 539)已目标为 JDK 28 的预览特性,可以从 IntelliJ IDEA 中下载 JDK 28 EA 版本进行尝试。

🏷️

标签

➡️

继续阅读