JDK 27是最新 Java SE 开发工具包,旨在为用户提供全新的可用于使用Java 编程语言构建应用程序和组件的开发环境,在这里您可以尽情的开发、测试、监控您的运行程序,主要新功能包括预览语言功能、引入新的api、引入结构化并发的api、增强的性能、增强的编辑处理等,开发人员和用户必备!
引入一个针对懒常量的API,懒常量是存储不可修改数据的对象。JVM将懒惰常数视为真正的常量,从而实现与宣告字段 相同的性能优化。然而,与场相比,懒惰常数在初始化时间上提供了更大的灵活性。这是一个预览API。finalfinal
通过引入结构化并发的 API,简化并发编程。结构化并发将不同线程中运行的相关任务组视为单一工作单元,从而简化错误处理和取消,提高可靠性并增强可观测性。这是一个预览API。
通过为TLS 1.3实现混合密钥交换算法,增强需要安全网络通信的Java应用的安全性。此类算法通过将量子抗性算法与传统算法结合,防御未来的量子计算攻击。使用这些API的应用程序默认将受益于这些改进的算法,而无需修改现有代码。javax.net.ssl
在HotSpot JVM中,将紧凑的对象头设置为默认的对象头布局。紧凑对象头在64位架构上将对象头从96位降至64位,从而减少堆大小,提高部署密度,并提高数据局域性。
增强JDK飞行记录器(JFR)以去除录制中的命令行参数以及环境变量和系统属性的初始值。在数据离开流程前对其进行编辑,以防止敏感信息泄露。
新功能
本节介绍了Java SE 27和JDK 27中的一些增强内容。在某些情况下,描述包括 关于某个问题或变更的详细信息链接。这里描述的 API 包含 Oracle JDK。它包含了Java SE 27平台的完整实现以及额外的Java API,包括 支持开发、调试和监控 Java 应用程序。另一个关于重要信息的来源 Java SE 27 和 JDK 27 中的增强和新功能是 Java SE 27(JSR 402)平台规范,该规范 记录了 Java SE 26 与 Java SE 27 之间对规范所做的变更。该文件包括 描述这些新功能和增强内容,同时也涉及规范的变更。描述 还要识别迁移到JDK 27时可能遇到的兼容性问题。
core-libs/java.lang.foreign
➜ 允许在外部函数下调前进行执行状态初始化 (JDK-8378559)
外部函数与内存 API 现在支持在下调前初始化线程本地执行状态。这补充了已有的调用状态捕获机制,后者已可用于读取下调用后的线程本地执行状态。执行状态的结构和内容依赖于平台,由 Linker.Option.captureStateLayout() 描述。
当通过 启用呼叫状态捕获时,内存段作为线程本地数据的缓冲区。在下调之前,缓冲区内容被用来初始化线程本地数据。下调后,线程本地数据会立即复制到缓冲区。Linker.Option.captureCallState(String... capturedState)
参见 Linker.Option.captureCallState(String...capturedState)在 JavaDoc API 文档中提供更多信息和使用示例
核心-SVC/工具
➜ 为 jcmd 工具(JDK-8357439)添加了 Bash 自动补全脚本)
诊断工具已添加 Bash 自动补全脚本。jcmd
在Linux上,要启用自动补全,请在Bash提示下运行。为了系统范围的可用性,将脚本放置在目录中。source <JDK_HOME>/conf/bash-completion/jcmd/usr/share/bash-completion/completions/
热点/JFR
➜ 新增 -XX:FlightRecorderOptions 帮助(JDK-8367584)
JVM选项已扩展,新增了一个列出可用子选项的选项。使用情况:-XX:FlightRecorderOptionshelp
java -XX:FlightRecorderOptions:help
热点/JFR
➜ 新增 -XX:FlightRecorderOptions:redact-key 和 redact-argument 选项 (JDK-8367584)
从 JDK 27 开始,JFR 默认会删除敏感的命令行参数以及环境变量和系统属性的初始值。你可以通过添加应用专用过滤器(含 和 )来显式选择 JFR 应遮蔽的信息。-XX:FlightRecorderOptions:redact-key=+<filter>-XX:FlightRecorderOptions:redact-argument=+<filter>
使用该工具禁用默认的遮蔽过滤器。-XX:FlightRecorderOptions:redact-key=none,redact-argument=none
更多信息请参见JEP 536:JFR处理中数据编辑。
热点/运行时
➜ -XX:AOTMode=作为 -XX:AOTMode=on 的别名 required(JDK-8374348)
为了澄清该选项的目的和效果,JVM选项被添加为别名。 应使用,而非最终会被弃用并移除。-XX:AOTMode=required-XX:AOTMode=on-XX:AOTMode=required-XX:AOTMode=on
热点/SVC
➜ 新的 jcmd 命令 VM.security_properties 运行时显示主动安全属性 (JDK-8364182)
jcmd 工具中新增了一个诊断命令 。该命令打印运行中的 JVM 进程当前的 Java 安全属性集合,类似于现有系统属性命令。这一增强为生产和开发环境中的安全相关配置问题提供了一种简单且可脚本化的方法。VM.security_propertiesVM.system_properties
热点/SVC
➜ VM.info 和hs_err_pid日志现在报告当前的开放文件描述符 (JDK-8359706)
jcmd 诊断命令和 HotSpot 致命错误日志的输出现在包含当前运行中的 Java 进程的打开文件描述符数量。在支持的平台上,新的输出会在该节中显示活跃文件描述符数量(例如,)。这一增强有助于诊断和排查UNIX平台上的资源枯竭和问题。VM.infohs_err_pidSYSTEMOpen File Descriptors: 52Too many open files
注意,进程的最大文件描述符限制已在同一输出中报告(例如,)。NOFILENOFILE 10240/infinity
security-libs/java.security
➜ 添加了安全属性 jdk.security.password.allowSystemIn,以限制 Java 平台读取标准输入流 (JDK-8368692)
新增了一个安全属性 ,用于控制 Java 平台在没有控制台时是否能从标准输入流读取密码。这通常发生在标准输入从重定向文件重定向或连接到进程间管道时。如果属性设置为 ,则尝试从标准输入流中读取密码(无控制台)会抛出异常。默认值为 。这一默认设置可能会在未来的版本中发生变化。jdk.security.password.allowSystemInfalsetrue
该属性适用于提示密码(如 和)以及由 TextCallbackHandler 处理的 PasswordCallback 对象。keytooljarsigner
security-libs/java.security
➜ 新的KeyStore和KeyStoreSpi方法,用于即时检索创建日期 (JDK-8374808)
在 和 类中添加了新方法,这些方法返回别名条目的创建日期为值:KeyStore.getCreationInstant 和 KeyStoreSpi.engineGetCreationInstant。KeyStoreKeyStoreSpijava.time.Instant
security-libs/java.security
➜ 新增对最新ML-KEM和ML-DSA私钥编码 的支持(JDK-8347938)
JDK 现以 PKCS #8 格式编码 ML-KEM 和 ML-DSA 私钥,使用由 RFC 9935 第6节“私钥格式”和 RFC 9881 第6节“私钥格式”定义的 DER 编码的 ASN.1 CHOICE 格式。两个新的安全属性 和 ,分别控制生成新密钥时所使用的编码,或在转换密钥时使用。有效的值为 、 和 (大小写不分)。如果同时指定同名的系统属性,则其价值将优先于安全属性值。当解码之前编码的私钥时,三种格式都支持。jdk.mlkem.pkcs8.encodingjdk.mldsa.pkcs8.encodingKeyPairGeneratorKeyFactoryseedexpandedKeybothKeyFactory
当这些算法在JDK 24中引入时,编码格式等同于值。此版本将默认值改为 。因此,本 JDK 版本生成的 ML-KEM 和 ML-DSA 私钥默认不被旧版本接受,尽管旧版本生成的密钥仍可被该版本读取。为了使旧版JDK版本接受由该JDK版本生成的ML-KEM和ML-DSA私钥,请将或属性(根据你的使用场景相关属性)设置为 ,并使用 以将密钥转换为旧格式。expandedKeyseedjdk.mlkem.pkcs8.encodingjdk.mldsa.pkcs8.encodingexpandedKeyKeyFactory.translateKey
security-libs/javax.net.ssl
➜ 增加了对ZLIB TLS证书压缩的支持 (JDK-8372526)
JDK 现支持根据 RFC 8879 规定的压缩算法实现 TLS 1.3 证书压缩。此功能可减少TLS握手期间交换的证书链规模。不支持和压缩算法。zlibbrotlizstd
默认启用了TLS证书压缩功能。要禁用它,可以在 和 系统属性中添加扩展。例如,以下 Java 命令行选项禁用了客户端和服务器的 TLS 证书压缩:compress_certificatejdk.tls.client.disableExtensionsjdk.tls.server.disableExtensions
-Djdk.tls.client.disableExtensions=compress_certificate -Djdk.tls.server.disableExtensions=compress_certificate
闪电小编说明
全新版本的java开发工具包,开发人员需要的编译器、运行环境、类库等组件一键搭载,软件程序运行必备环境,一键安装最新版。