Java SE Development Kit(JDK) 17.0.18 官方正式版 Linux64
- 大小:174MB
- 分类:编程工具
- 环境:Linux
- 更新:2026-01-22
热门排行
简介

Java 17 LTS 是 Java SE 平台的最新长期支持版本。 根据 Oracle 免费条款和条件许可,JDK 17 二进制文件可在生产中免费使用,并可免费重新分发。JDK 17 将根据这些条款接收更新,至少在 2024 年 9 月之前。Java 17 的下一个长期支持版本现已推出。Oracle 继续以六个月的定期节奏在 Java 平台上进行创新,使 Java 保持活力并与世界各地的企业和开发人员息息相关。
Java SE Development Kit(JDK) 17 for Windows :点击下载
Java 是世界上最多产的编程语言和开发平台。JDK 是使用 Java 编程语言构建应用程序和组件的开发环境。JDK 包括用于开发和测试用 Java 编程语言编写并在 Java 平台上运行的程序的工具。本次提供的是Java SE Development Kit(JDK) 17 for Linux官方版本下载,欢迎需要此款工具的朋友前来下载使用。
JDK17新特性详解
预览版:该功能在当前版本可以使用,如果效果不是很好的话,可能以后的其他版本就会删去该功能。
最终版:该功能在之前版本效果很好,之后的每个版本中都会存在该功能。
1、switch新增模式(预览版)
使用 switch 表达式和语句的模式匹配以及对模式语言的扩展来增强 Java 编程语言。将模式匹配扩展到 switch 允许针对多个模式测试表达式,每个模式都有特定的操作,以便可以简洁安全地表达复杂的面向数据的查询。基于JDK16 instanceof模式匹配(最终版)优化升级switch使用方法,先回忆下JDK16模式匹配(最终版)
if (obj instanceof String s) {
// 直接使用 s拼接字符串
s += "heihei";
} else if (obj instanceof Integer i){
// 直接使用i进行整型逻辑运算
i += 1;
}
switch可直接用instanceof模式匹配选择(需要提前考虑null判断)
Object o;
switch (o) {
case null -> System.out.println("首先判断对象是否为空,走空指针逻辑等后续逻辑");
case String s -> System.out.println("判断是否为字符串,s:" + s);
case record p -> System.out.println("判断是否为Record类型: " + p.toString());
case int[] arr -> System.out.println("判断是否为数组,展示int数组的长度" + ia.length);
case Integer i -> System.out.println("判断是否为Intger对象,i:" + i);
case Student s -> System.out.println("判断是否为具体学生对象,student:" + s.toString());
case UserCommonService -> System.out.println("判断是否为普通用户实现类,然后走普通用户逻辑");
case UserVipService -> System.out.println("判断是否为vip用户实现类,然后走vip用户逻辑");
default -> System.out.println("Something else");
}
2、Realed class密封类(最终版)
密封类和接口限制哪些其他类或接口可以扩展或实现它们。
public sealed interface Shape{
final class Planet implements Shape {}
final class Star implements Shape {}
final class Comet implements Shape {}
}
public abstract sealed class Test{
final class A extends Test {}
final class B extends Test {}
final class C extends Test {}
}
3、随机数增强
为伪随机数生成器 (PRNG) 提供新的接口类型和实现,包括可跳转的 PRNG 和额外的一类可拆分 PRNG 算法 (LXM)。
4、浮点运算更加严格
简化数字敏感库开发,包括java.lang.Math和java.lang.StrictMath(对开发无实际意义)
5、Parallel GC 默认启用
Parallel GC 默认启用自适应并行处理,并行GC确定java.lang.ref.Reference在垃圾收集期间用于处理实例的最佳线程数。
默认-XX:ParallelRedProcEnabled: true。在有多个线程可用于垃圾收集的机器上,明显改善了垃圾收集暂停的阶段,如果遇到垃圾收集暂停增加的情况,可以通过-XX:ParallelRedProcEnabled在命令行上指定到原始行为
6、增强TreeMap
增强JDK-8176894(TreeMap 没有对 putIfAbsent()、computeIfAbsent()、computeIfPresent()、compute() 方法的专门实现。默认实现经常导致两次树遍历,这会损害性能)
7、弃用Socket实现工厂机制
弃用并最终删除用于为java.net 包中的套接字类型静态配置系统范围工厂 的 API 点
具体如下:
* 方法:
static void ServerSocket.setSocketFactory (SocketImplFactory fac)
static void Socket.setSocketImplFactory (SocketImplFactory fac)
static void DatagramSocket.setDatagramSocketImplFactory (DatagramSocketImplFactory fac)
* Types
java. net SocketImplFactory
java.net DatagramSocketImplFactory
也可以弃用java.net SocketImplFactory 和 DatagramSocketImplFactory 类型 ,因为它们的唯一用途与上述工厂有关 设置方法。
8、统一日志支持异步日志刷新
为了避免在使用统一日志的线程中出现不希望的延迟,用户现在可以请求统一日志系统以异步模式运行。通过传递命令行选项来完成的-Xlog:async。在异步日志模式下,日志站点将所有日志消息排入缓冲区。独立线程负责将它们刷新到相应的输出。中间缓冲区是有界的。缓冲区耗尽时,将丢弃排队消息。可以使用命令行选项控制中间缓冲区的大小-XX:AsyncLogBufferSize=<bytes>。
9、新增 java.time.InstantSource
java.time.InstantSource引入了一个新界面。这个接口是一个抽象java.time.Clock,只关注当前时刻,不涉及时区。
10、javadoc工具
新的“新 API”页面和改进的“弃用”页面,JavaDoc 现在可以生成一个页面,总结最近 API 的变化。要包含的最新版本列表是使用--since命令行选项指定的。这些值用于查找@since要包含在新页面上的具有匹配标签的声明。该--since-label命令行选项提供了“新API”页面的标题文本使用。
在 Linux 平台上安装 JDK 的一般注意事项
根访问权限
本主题介绍有关在 Linux 平台上安装 JDK 17 的一般信息。
安装 JDK 会自动创建一个名为. jdk–17.interim.update.patch
笔记:如果您将 JDK 安装在特定位置,例如/usr/jdk,则您必须使用 root 凭据登录以获得必要的权限。如果您没有 root 访问权限,则在您的主目录或您具有写入权限的子目录中安装 JDK。
覆盖文件
如果将软件安装在包含名为 的子目录的目录中,则新软件会覆盖该目录中的同名文件。如果旧目录包含您要保留的文件,请确保重命名旧目录。 jdk–17.interim.update.patch
系统偏好设置
默认情况下,安装脚本会配置系统,以便在适用的情况下在 JDK 安装目录中创建系统首选项的后备存储。如果 JDK 安装在网络安装驱动器上,则可以导出系统首选项以与其他机器上的 Java 运行时环境共享。
Linux平台的JDK安装说明符号
JDK 安装说明包含代表功能、临时和更新版本信息的版本符号。
例如,如果您要安装 JDK 17 Interim 0、Update 0 和 Patch 0,则以下字符串表示捆绑包的名称:
Linux x64 系统: jdk-17.interim.update.patch_linux-x64_bin.tar.gz
该字符串变为:
jdk-17_linux-x64_bin.tar.gz
Linux aarch64(64位ARM)系统: jdk-17.interim.update.patch_linux-aarch64_bin.tar.gz
该字符串变为:
jdk-17_linux-aarch64_bin.tar.gz
笔记:如果一个组件的后缀是 0,它将被排除在外。
更多详细安装注意事项,请参考官方文档:https://docs.oracle.com/en/java/javase/17/install/installation-jdk-linux-platforms.html
JDK 17 发行说明
更多详情:https://www.oracle.com/java/technologies/javase/17-relnote-issues.html
新功能
本节介绍了 Java SE 17 和 JDK 17 中的一些增强功能。在某些情况下,这些描述提供了指向有关问题或更改的其他详细信息的链接。此处描述的 API 随 Oracle JDK 一起提供。它包括 Java SE 17 平台的完整实现和额外的 Java API,以支持开发、调试和监控 Java 应用程序。关于 Java SE 17 和 JDK 17 中重要增强和新特性的另一个信息来源是Java SE 17 (JSR 392)平台规范,其中记录了 Java SE 16 和 Java SE 17 之间对规范所做的更改。该文档包括对这些新特性和增强功能的描述,这些新特性和增强功能也是对规范的更改。这些描述还确定了您在迁移到 JDK 17 时可能遇到的潜在兼容性问题。
删除的功能和选项
本节介绍在 Java SE 17 和 JDK 17 中删除的 API、功能和选项。此处描述的 API 是随 Oracle JDK 提供的 API。它包括 Java SE 17 平台的完整实现和额外的 Java API,以支持开发、调试和监控 Java 应用程序。Java SE 17 和 JDK 17 中重要增强和新特性的另一个信息来源是 Java SE 17 (JSR 392)平台规范,它记录了 Java SE 16 和 Java SE 17 之间对规范所做的更改。该文档包括标识此处未描述的已删除 API 和功能。下面的描述可能还会指出您在迁移到 JDK 17 时可能遇到的潜在兼容性问题。
已弃用的功能和选项
有关 Java SE 17 和 JDK 17 中弃用的 API、特性和选项的其他信息来源包括:
将 已过时的API页面识别所有已弃用的API包括在Java SE 17弃用。
该爪哇SE 17(JSR 392)规范文档改变到Java SE 16和Java SE 17,其包括已弃用的API的识别和特征不再赘述之间所订的规格。
JEP 277:Enhanced Deprecation提供了弃用政策的详细说明。您应该了解本文档中描述的更新政策。
更新日志
Java™ SE Development Kit 17,更新 17.0.18(JDK 17.0.18)
2026年1月20日
本次更新的完整版本字符串为 17.0.18+8(“+” 表示“构建”)。版本号为 17.0.18。该 JDK 符合 Java SE 规范 17.1 版本(JSR 392 MR 1 2024-07-02)。
安全基线
JDK 17.0.18 发布时 Java 运行时的安全基线如下表所示:
Java 家族版本 安全基线(完整版本字符串)
17 17.0.18+8
11 11.0.30+7
8 1.8.0_481-b10
保持JDK的更新
Oracle 建议每次关键补丁更新时都要更新 JDK。 为了判断某个版本是否为最新,安全基线页面可以 用于确定每个发行家族的最新版本。
关键补丁更新包含安全漏洞修复,通常提前一年发布关键补丁更新、安全警报和公告。不建议在下一次关键补丁更新后使用该 JDK(版本17.0.18)。预计为2026年4月21日。
Java管理服务面向所有用户,可以帮助你在系统中发现易受攻击的Java版本。Java SE 订阅用户和运行在 Oracle Cloud 中的客户可以使用 Java 管理服务更新 Java 运行时,并进行进一步的安全审查,比如识别 Java 程序中使用的潜在易受攻击的第三方库。现有的 Java 管理服务用户,点击这里登录您的仪表盘。Java 管理服务文档提供了一份对所有人开放的功能列表,以及仅对客户开放的功能。了解更多关于使用 Java 管理服务来监控和保护您的 Java 安装的信息。
新功能
core-libs/java.rmi
➜ 默认启用端点识别,适用于TLS上的RMI连接 (JDK-8341496(非公开))
如果使用该类,RMI会使用TLS连接。这些连接现在默认启用了TLS端点识别。这可能导致一些之前正常工作的TLS连接出现故障。如果发生这种情况,确保服务器提供的证书具有与服务器主机名相匹配的主体替代名称。或者,客户端可以通过将系统属性设置为 来禁用 RMI TLS 连接的端点识别。javax.rmi.ssl.SslRMIClientSocketFactoryjdk.rmi.ssl.client.enableEndpointIdentificationfalse
其他注释
security-libs/javax.net.ssl
➜ 禁用了TLS 1.2和DTLS 1.2中的SHA-1握手签名 (JDK-8340321))
在TLS 1.2和DTLS 1.2握手签名中,SHA-1算法已被默认禁用,方法是在配置文件中添加安全属性。RFC 9155 弃用了 TLS 1.2 和 DTLS 1.2 数字签名中的 SHA-1。用户可自行承担风险,通过移除安全属性,重新启用 TLS 1.2 和 DTLS 1.2 握手签名中的 SHA-1 算法。"rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature"jdk.tls.disabledAlgorithmsjava.security"rsa_pkcs1_sha1 usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 usage HandshakeSignature"jdk.tls.disabledAlgorithms
安装/安装
➜ Windows 安装程序返回完整版本目录及交汇( JDK-8310932(非公开))
对于 JDK11+ LTS 系列,JDK 默认安装到特定版本的安装目录中。11+ 的安装目录在版本特定字符串前会有一个 - ,以保持与各家族过去 11+ 惯例的一致性。在“最新”目录中也会创建一个连接,Windows中也称为符号链接。它会指向该家族的最新版本。以下是安装和交汇点11+家族的详细示例:
版本 安装目录 交汇位置
jdk25.0.2 C:\Program Files\Java\jdk-25.0.2 C:\Program Files\Java\latest\jdk-25
JDK17.0.18 C:\Program Files\Java\jdk-17.0.18 C:\Program Files\Java\latest\jdk-17
jdk11.0.30 C:\Program Files\Java\jdk-11.0.30 C:\Program Files\Java\latest\jdk-11
每个交汇点始终指向匹配LTS家族中最新的JDK。当匹配LTS家族的最后一个JDK卸载时,每个家族的连接将被移除。
安装/安装
➜ 让jcmd命令在无头JDK RPM中可用 (JDK-8359443(非公开))
jcmd命令将以无头JDK RPM代替头头JDK RPM使用。
它将被加入替代组,而非替代方案组。javajavac
security-libs/javax.net.ssl
➜ 废TLS_RSA密码套件 (JDK-8245545)
TLS_RSA密码套件默认被禁用,方法是在java.security配置文件中的jdk.tls.disabledAlgorithms安全属性中添加“TLS_RSA_”。TLS_RSA密码套件不维护前向保密性,且不常用。一些TLS_RSA密码套件已经被禁用,因为它们使用了DES、3DES、RC4或NULL,这些都是被禁用的。此举会禁用所有剩余TLS_RSA密码套件。任何尝试使用以“TLS_RSA_”开头的密码套件都会因SSLHandshakeException而失败。用户可自行承担风险,通过从安全属性中移除“TLS_RSA_”来重新启用这些密码套件。以下先前启用的密码套件现已禁用:jdk.tls.disabledAlgorithms
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
core-libs/java.util:i18n
➜ 基于Debian的Linux(JDK-8345213)中默认时区检测的变 更)
在基于 Debian 的 Linux 发行版如 Ubuntu 上,该文件曾用于确定 JDK 的默认时区()。根据Debian的维基,现在是系统默认时区的主要来源,因此变得多余。因此,JDK的默认时区检测逻辑已更新为使用。如果和因任何原因不一致,JDK的默认时区现仅基于档案确定。/etc/timezoneTimeZone.getDefault()/etc/localtime/etc/timezone/etc/localtime/etc/timezone/etc/localtime/etc/timezone/etc/localtime
security-libs/java.security
➜ 证书权威信息访问扩展 (JDK-8368032(非公开))中URI的过滤规则
引入了一个新的系统和安全属性,, ,该属性允许用户定义一个或多个过滤规则,应用于X.509证书上权威信息访问扩展获得的URI。这些过滤规则专门应用于CA发行机构的访问方式。任何CA发行者在X.509证书中的URI只有在系统属性被启用且过滤器允许该URI时才会被跟踪。com.sun.security.allowedAIALocationscom.sun.security.enableAIAcaIssuers
为了设置规则,用户必须以同名设置安全属性或系统属性。如果系统属性有值,它会覆盖安全属性。默认情况下,该属性为空,这会执行一个拒绝所有规则集。com.sun.security.allowedAIALocations
对于任一性质,取值由一组空间分离规则组成,这些规则以URI的形式出现,具有以下约束条件:
URI必须是绝对且层级分明的。
URI只能使用以下方案之一:http、https、ldap或ftp(不区分大小写)。
必须指定主机名或地址,并且必须匹配(不区分大小写)。主机名不进行名称解析以匹配URI与IP地址。
端口号必须匹配。如果省略了端口号,则在比较中使用已知端口。
对于分层方案(http[s], ftp):
规则中URI中归一化路径部分以大小写区分方式匹配。如果最后一个组件不以斜杠(/)结尾,则视为文件路径,必须与CA发行器URI路径组件匹配。如果规则的路径组件以斜杠结尾,则必须与CA发行器URI路径组件的前缀相匹配或为前缀。(例如,的滤波路径将匹配CA的发行者路径,且。)/ab/cd//ab/cd//ab/cd/ef/ab/cd/ef/ghi
匹配CA发行者URI时,查询字符串和片段将被忽略。
对于LDAP的URI:
基础DN必须完全匹配(不区分大小写)。
规则中的任何查询字符串(如果指定)将被忽略。
对于属性,单个值为“任意”(大小写不区分)将生成一个允许所有规则。
漏洞修复
本版本还包含了 Oracle 关键补丁更新中描述的安全漏洞修复。
➜ 17.0.18 修复的问题:
# JBS 组成部分 摘要
1 JDK-8292214 client-libs/2d awt_GraphicsEnv.c:386 的 getAllConfigs 内存泄漏
2 JDK-8334509 client-libs/2d 取消 PageDialog 不会返回相同的 PageFormat 对象
3 JDK-8361748 client-libs/2d 对 XBM 映像大小设定限制
4 JDK-8286159 client-libs/java.awt awt_GraphicsEnv.c:585 的 getAllConfigs 内存泄漏
5 JDK-8324491 client-libs/java.awt 如果键盘布局在对话激活时被更改,键盘布局就不会保持状态
6 JDK-8354646 client-libs/java.awt java.awt.TextField 允许在双击文字开头和结尾时识别密码中的空格
7 JDK-8281523 client-libs/javax.accessibility 可及性:从字符串字面转换失去 const 限定符
8 JDK-8140527 client-libs/javax.swing JinternalFrame的标题按钮宽度不正确
9 JDK-8236907 client-libs/javax.swing 将JTable添加到嵌套面板上不会绘制最后一行可见的行
10 JDK-8139228 client-libs/javax.swing JFileChooser 将文件名渲染为 HTML 文档
11 JDK-8358532 client-libs/javax.swing GTK L&F 中的 JFileChooser 仍然显示 HTML 文件名
12 JDK-8210807 client-libs/javax.swing 用 JScrollPane 打印 JTable 打印的表格时,没有填充行
13 JDK-8257810 client-libs/javax.swing 只有第一页会用 JTable.scrollRectToVisible 打印
14 JDK-8322135 client-libs/javax.swing 在 Windows L&F 中打印 JTable 会触发 InternalError:HTHEME 为空
15 JDK-8349188 client-libs/javax.swing LineBorder 的缩放不正确
16 JDK-8358813 client-libs/javax.swing JPasswordField 通过删除快捷方式识别密码中的空格
17 JDK-8370465 client-libs/javax.swing MenuItem 组件从右向左向的问题
18 JDK-8307990 core-libs/java.lang jspawnhelper 必须关闭其写入一侧的管道,才能读取
19 JDK-8311645 core-libs/java.lang jspawnhelper spawnChild 在 JDK-8307990 之后发生内存泄漏
20 JDK-8280124 core-libs/java.lang 减少从 UTF-8 编码字节中解码拉丁 1 字符的分支
21 JDK-8282047 core-libs/java.lang 增强StringDecode/Encode微基准测试
22 JDK-8365086 core-libs/java.net CookieStore.getURIs() 和 get(URI) 应该返回一个不可变的列表
23 JDK-8369184 core-libs/java.util:i18n 对于不同哈希码值的不相等实例,SimpleTimeZone 等于 () 返回为真
24 JDK-8328085 热点/编译器 C2:免费后在PhaseChaitin使用::Register_Allocate()
25 JDK-8364993 热点/JFR JFR:关闭JDK。default.jfc 中的 ModuleExport
26 JDK-8364556 热点/JFR JFR:在default.jfc中禁用SymbolTableStatistics和StringTableStatistics
27 JDK-8369992 热点/JFR JFR:在default.jfc中禁用占位符、加载约束和保护域缓存表统计
28 JDK-8328997 热点/运行时 移除 GrowableArray 中不必要的模板参数列表
29 JDK-8317132 热点/运行时 准备允许的热点——
30 JDK-8361447 热点/运行时 [重做]已检查的 JNI 版本 Release<type>ArrayElements 需要过滤掉已知的包裹数组
31 JDK-8364235 热点/运行时 JDK-8361447 修复后,GuardedMemory 的对齐要求失效
32 JDK-8364660 热点/运行时 ClassVerifier::ends_in_athrow() 应该被移除
33 JDK-8306579 基础设施/其他 考虑用 /Zc:throwingNew 来构建
34 JDK-8317332 security-libs/java.security 准备允许的安保——
35 JDK-8325680 security-libs/org.ietf.jgss deleteGSSCB 中的未初始化内存 GSSLibStub.c:179
36 JDK-8365790 tools/jpackage 应用程序映像的关闭钩子在 Windows 上无法使用













chrome下载
知乎下载
Kimi下载
微信下载
天猫下载
百度地图下载
携程下载
QQ音乐下载