Java News

IntelliJ IDEA 中的 Java 27

Read this post in other languages:

遵照六个月一次的发布节奏,Java 27 于 2026 年 9 月 15 日发布。在这篇博文中,我们将介绍此版本包含的内容、IntelliJ IDEA 如何持续支持最新的 Java 版本,以及 IntelliJ IDEA 如何从 JDK 的一些变化中受益。

Java 27 带来了 9 个 JEP,其中 4 个已达到最终状态。此外,4 项预览功能持续完善,另有 1 个 JEP 继续作为孵化器功能。

即使您不使用 IntelliJ IDEA,也可以在其他环境中领略它的智能功能:IntelliJ IDEA 支持 LSP:Java 和 Kotlin 智能功能现已登陆 VS Code、Cursor 和智能体化流程。这为最新的 Java 版本和功能(包括抢先体验版本和预览功能)提供了同等水平的支持。

在这篇博文中,我们先来设置 IntelliJ IDEA,以使用最新的 Java 版本。

在 IntelliJ IDEA 中使用 Java 27(设置) 

首先,您需要下载 JDK 27。可以通过多种方式下载:直接在 IntelliJ IDEA 中下载,使用 SDKMAN! 等工具或使用 asdf,也可以自行安装。

下载 JDK

要从 IntelliJ IDEA 下载 JDK 27,请打开 Project Structure(项目结构),转到 Project Settings | Project(项目设置 | 项目)标签页,打开 SDK 字段中的下拉菜单,然后选择 Download JDK(下载 JDK)。在打开的 Download JDK(下载 JDK)弹出窗口中,将 Version(版本)设为 27,然后在 Vendor(供应商)字段中选择要使用的供应商。

下载 JDK
下载 JDK – 选择供应商

如果您已安装 JDK,可以将 IntelliJ IDEA 指向安装位置。请改为从下拉菜单中选择 Add JDK from Disk(从磁盘添加 JDK)。

从磁盘添加 JDK

JDK 版本将从项目设置自动传递到终端,这意味着您和智能体都可以在 IntelliJ IDEA 的终端上使用适合项目的 JDK。此功能的演示可以在 IntelliJ IDEA 2026.2 最新变化视频中查看。

如果您使用 SDKMAN! 或 asdf 管理 JDK,IntelliJ IDEA 可以读取项目中的 .sdkmanrc 或 .tool-versions 文件,如果已安装相应 JDK,则可以自动进行配置。

如果您使用的是 SDKMAN!,而 .sdkmanrc 文件中指定的 JDK 版本尚未安装,该文件中会显示嵌入提示,您可以通过运行相关的 SDKMAN! 命令,直接从 IDE 下载该版本。即使您尚未安装 SDKMAN! 也可以,这意味着 Windows 用户也可以使用此功能。

有关 JDK 设置方式的更多信息,请参阅文档。

设置语言级别

IntelliJ IDEA 从 Java 27 发布首日起便提供支持。在 Project Structure(项目结构)中,将 Language level(语言级别)设为 27 – No new language features。

27 – No new language features

如果您使用预览功能,请将其设为 27 (Preview) – Primitive types in patterns, instanceof, and switch (5th preview)。请注意,IntelliJ IDEA 将在编辑器中高亮显示预览功能的使用,以便您了解预览功能的具体使用位置。

27 (Preview) – Primitive types in patterns, instanceof, and switch (5th preview)

Java 27 中新增的稳定功能

Java 27 新引入了 4 项稳定功能。我们来快速了解一下。

JEP 523:在所有环境中将 G1 设为默认垃圾收集器

Garbage-First (G1) 垃圾收集器自 Java 9 起就一直是默认垃圾收集器,但有一个例外情况:仅有一个 CPU 或 RAM 不足 1,792 MB 的计算机会回退到 Serial GC。此 JEP 在所有环境中将 G1 设为 HotSpot JVM 的默认垃圾收集器,而不再仅限于服务器环境,从而取代了 Serial 收集器。

G1 垃圾收集器经过多项改进(包括 JEP 522:G1 GC:通过减少同步提高 Java 26 中的吞吐量),现在其性能已足以取代 Serial。对于在受限环境中使用 Serial 可以达到更佳性能的应用程序,可以通过选项 `-XX:+UseSerialGC` 显式启用 Serial。

JEP 527:用于 TLS 1.3 的后量子混合密钥交换

此 JEP 通过为 TLS 1.3 实现混合密钥交换算法,增强了需要安全网络通信的 Java 应用程序的安全性。这有助于防范“先收集、后解密”攻击,即攻击者现在记录加密流量,打算等量子计算机功能足够强大时再进行解密。

JEP 534:默认使用紧凑对象头

此 JEP 将紧凑对象头设为 HotSpot JVM 中的默认对象头布局。

通过在 64 位架构上将对象头从 96 位缩减到 64 位,紧凑对象头可以缩减堆大小、提高部署密度,以及增强数据局部性。

紧凑对象头在 Java 24 中作为实验性功能引入,并在 Java 25 中成为可以启用的功能。由于紧凑对象头现已成为默认设置,您无需再像使用 JDK 25 时那样通过命令行选项启用它们。 

包含大量对象的应用程序将从这项变化中受益,因为紧凑对象头可以减少 JVM 内存占用。JetBrains IDE 正在使用此功能,并在启用后观察到持续稳定的内存节省。了解详情。

JEP 536:JFR 进程内数据脱敏

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

Java 27 中的预览功能

利用预览功能,开发者有机会在新功能最终交付前进行试用并提供反馈。预览功能在最终交付并成为语言标准组成部分之前,可能会经历多轮迭代,期间可能有更改,也可能没有更改。

IntelliJ IDEA 致力于为预览功能提供支持,让您可以在它们成为标准之前进行试验。由于这些功能始终可能发生变化,IntelliJ IDEA 仅支持当前 JDK 的预览功能。要启用预览功能,请将 Language level(语言级别)设为 27 (Preview) – Primitive types in patterns, instanceof, and switch (5th preview)。

Java 27 包含 4 项预览功能和 1 项孵化器功能。这些功能本身与 Java 26 中相同,但其中一些在 Java 27 中进行了修订。 

JEP 531:延迟常量(第 3 轮预览)

延迟常量是保存不可变数据的对象。顾名思义,它们采用延迟求值方式。与立即求值的 final 字段相比,这种方式更具优势。使用延迟常量时,仅会在需要时对字段求值,从而可以缩短启动时间。

如需更详细的说明,请参阅 IntelliJ IDEA 中 Java 26 的延迟常量部分。

延迟常量最初在 Java 25 中引入(作为稳定值),并在 Java 26 中经历了重大改动。该 API 在 Java 27 中又进行了进一步修订。  

JEP 532:模式中的基元类型,instanceof 和 switch(第 5 轮预览)

正如 IntelliJ IDEA 中的 Java 26 中所述,此功能增强了模式匹配,使其能够在模式上下文中支持所有基元类型,包括 instanceof 和 switch。此功能消除了模式匹配的一些现有限制,从而可以在这些构造中对基元值进行匹配、测试和安全转换。无需再进行不安全的手动转换(可能导致难以察觉的 bug)和范围检查,从而提高了代码的安全性和可读性。此功能在 Java 27 中仍处于预览阶段,与 Java 26 版本相比没有变化。

一个快速示例

下面我们来快速了解一个在 switch 表达式中配合 guard 模式使用基元类型的示例。

int itemDiscountPercentage(int items) {
   return switch (items) {
       case 2 -> 5;
       case 3, 4 -> 10;
       case int i when i >= 5 -> 20;
       default -> 0;
   };
}

我们可以将 Javadoc 添加到此方法,以说明它的运作方式。自 Java 23 (JEP 467) 起,Javadoc 便可以使用 Markdown 编写。如果您的项目使用 JDK 23 或更高版本,在使用上下文操作 Add Javadoc(添加 Javadoc)时,IntelliJ IDEA 默认会插入 Markdown 文档注释。

添加 Javadoc

旁注:如果您倾向于使用传统注释,而非 Markdown,请打开 Settings(设置),转到 Editor | Code Style | Java | Code Generation | Comment Code(编辑器 | 代码样式 | Java | 代码生成 | 注释代码),然后取消选择 Prefer documentation line comments(首选文档行注释)选项。

首选文档行注释

IntelliJ IDEA 可以使用上下文操作 Convert to Markdown documentation comment(转换为 Markdown 文档注释),将现有 Javadoc 转换为 Markdown。

转换为 Markdown 文档注释

有关此功能的更多详细说明,请参阅 Java 23 和 IntelliJ IDEA 的 此部分。

JEP 533:结构化并发(第 7 轮预览)

正如 IntelliJ IDEA 中的 Java 26 中所述,结构化并发为多线程代码提供了更好的“惯用法”,这意味着代码会更贴合用户的思维模式。 

结构化并发将在不同线程中运行的相关任务组视为单个工作单元。这提高了可读性和可观测性,从而使并发代码更容易理解和推理。它还有助于消除线程泄漏和取消延迟。 

有关结构化并发及其如何与 Project Loom 的其他功能协同工作的更多详细信息,请查看我之前的博文:IntelliJ IDEA 中的 Project Loom:虚拟线程、作用域值和结构化并发。

如该博文所述,IntelliJ IDEA 提供了一个实时模板,可以快速搭建 StructuredTaskScope 的框架。您可以在 IntelliJ IDEA 中使用快捷键(macOS 上为 ⌘J / Windows 和 Linux 上为 Ctrl+J)调出可用的实时模板列表。或者,您也可以使用命令补全:输入 .. –,随即会显示与当前上下文相关的所有命令列表。您甚至可以输入命令名称的一部分(例如,输入“live”可显示实时模板),相关命令会作为常规补全结果出现。 

实时模板列表可以按名称和描述进行搜索。如果搜索“structured”,将会找到实时模板 sts。

使用命令补全显示实时模板

有关命令补全的更多信息,请查看我之前的博文:通用入口:上下文感知编码辅助的单一入口。

JEP 538:加密对象的 PEM 编码(第 3 轮预览)

正如 IntelliJ IDEA 中的 Java 26中所述,此 JEP 提供的预览 API 可用于在隐私增强邮件 (PEM) 格式与加密对象(密钥、证书和证书吊销列表)之间进行编码和解码。

与上一版本相比,该 API 在 Java 27 中又发生了一些变化。

Java 27 中的孵化器功能

孵化器模块属于实验性 API。它们是明确的非最终 API 和工具,仅供开发者试用。与预览功能不同,孵化器功能在今后的版本中可能发生重大变化,甚至可能被移除。它们不适用于生产用途。

要使用孵化器功能,需要在运行代码时显式添加相应模块,即为该特定模块添加 --add-modules 命令行选项。

如果通过 IntelliJ IDEA 运行代码,可以为应用程序的运行配置添加命令行选项。选择程序的运行配置,然后点击 More Actions(更多操作)的三个点。选择 Edit(编辑),打开 Run/Debug Configurations(运行/调试配置)。点击 Modify Options(修改选项)链接,然后在 Add Run Options(添加运行选项)弹出窗口中选择 Add VM Options(添加虚拟机选项)。将出现一个新字段,提示 VM Options(虚拟机选项)。将命令行选项添加到该字段。

添加虚拟机选项

JEP 537:Vector API(第 12 个孵化器)

正如 IntelliJ IDEA 中的 Java 26 所述,此 JEP 引入的 API 使开发者能够表示可以在支持的 CPU 上可靠编译为最优向量指令的向量计算。向量运算可以在单个 CPU 周期中完成更多工作,这可能带来显著的性能提升。

由于这是一个孵化器模块,您需要按上文所述提供命令行选项才能显式添加该模块。要使用 Vector API,请添加以下命令行选项:--add-modules jdk.incubator.vector。

与 Java 26 相比,Java 27 中的 Vector API 没有变化。此功能将继续孵化,直至 Project Valhalla 所需的功能作为预览功能提供。

其他更改:调试器改进

除 JEP 外,JDK 27 还包含 bug 修正,例如 JDK-6960970。调试器在单步执行时速度非常慢。此问题已在 JDK 27 中得到修正,这意味着现在调试器逐步执行速度更快。我们的工程师已将此修正向后移植到 JetBrains Runtime (JBR) 25,因此他们可以在调试 IntelliJ IDEA 自身代码时使用。这表明可以将此更改向后移植到 Java 25,并且更改能够正常运行。如果您希望利用此更改,可以使用 JBR 25,或请求供应商向后移植此更改。

展望未来

Project Valhalla 的功能已开始逐步进入 Java。值对象 (JEP 401) 和 JVM 中的严格字段初始化 (JEP 539) 均已作为预览功能纳入 JDK 28。这意味着如果您想试用这些功能,无需再下载专用的 Valhalla 发行版。您可以下载 JDK 28 EA(抢先体验)版本。此版本可以直接从 IntelliJ IDEA 中下载。

如果您已经下载 JDK 28 EA,也可以让 IntelliJ IDEA 指向安装位置。

结论

Java 27 虽然不是 LTS 版本,却带来了安全性和性能方面的改进,并持续推进几项重要预览功能的演进。IntelliJ IDEA 自 Java 27 发布首日起便为其提供支持,并将继续支持最新的 Java 功能。如有任何反馈,请告诉我们。

本博文英文原作者:

Marit van Dijk

Marit van Dijk

Discover more