编程工具

关注公众号 jb51net

关闭
Java SE Development Kit(JDK) 17.0.11 官方正式版 Linux64

Java SE Development Kit(JDK) 17.0.11 官方正式版 Linux64

您还可以选择:官方全平台下载官方全平台下载

热门排行

简介

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 17.0.10 - 捆绑补丁版本 (BPR) - 错误修复和更新
以下各节总结了所有 Java SE 17.0.10 BPR 发行版中所做的更改。BPR 版本按日期顺序在下面列出,最新的 BPR 在前。请注意,以前的 BPR 中的错误修复也包含在当前的 BPR 中。

Java SE 17.0.10.0.1 中的更改
Bug 修复
1月 16, 2024
此版本中包含先前 BPR 的修复。

Java™ SE 开发工具包 17,更新 17.0.10 (JDK 17.0.10)
1月 16, 2024
此更新版本的完整版本字符串为 17.0.10+11(其中“+”表示“内部版本”)。版本号为 17.0.10。

IANA TZ 数据 2023c
有关更多信息,请参阅 JRE 软件中的时区数据版本。

安全基线
下表指定了发布 JDK 17.0.10 时 Java 运行时的安全基线:

Java 系列版本    安全基线(完整版字符串)
17    17.0.10+11
11    11.0.22+9
8    编号:8U401-B10

使 JDK 保持最新状态
Oracle 建议在每次关键补丁更新时更新 JDK。 为了确定某个版本是否为最新版本,“安全基线”页可以 用于确定每个发行系列的最新版本。

包含安全漏洞修复的关键补丁更新将提前一年公布 重要补丁更新、安全警报和公告。 建议不要在计划的下一个关键补丁更新之后使用此 JDK(版本 17.0.10) 2024年4月16日。

管理大量桌面的 JRE 更新/安装的客户应考虑的 Java SE 订阅产品 使用 Java 管理服务 (JMS)。

新功能security-libs/javax.xml.crypto
➜ 用于切换 XML 签名安全验证模式的新系统属性 (JDK-8301260)
添加了一个名为的新系统属性。它可用于启用或禁用 XML 签名安全验证模式。系统属性应设置为“true”以启用,或设置为“false”以禁用。系统属性的任何其他值都被视为“false”。如果设置了系统属性,它将取代属性值。org.jcp.xml.dsig.secureValidationXMLCryptoContext

默认情况下,安全验证模式处于启用状态。禁用安全验证模式的风险由您自行承担。

已知问题热点/编译器
➜ 由于消除有限范围检查而导致的潜在性能回归 (JDK-8314468 (not public))
当 C1 编译器是 VM 唯一可用的编译器时,它会应用循环预测来从循环体中删除数组访问范围检查。由于存在缺陷,此优化被禁用,可能导致性能下降。

这仅影响客户端 VM 或使用非默认命令行标志或 .-XX:+NeverActAsServerClassMachine-XX:TieredStopAtLevel=[1,2,3]

其他说明安全库/java.security
➜ 增加系统属性的默认值 jdk.jar.maxSignatureFileSize (JDK-8312489)
system 属性 允许应用程序控制签名 JAR 中签名文件的最大大小。其默认值已从 8000000 字节 (8 MB) 增加到 16000000 字节 (16 MB)。jdk.jar.maxSignatureFileSize

安全库/java.security
➜ 添加了 DigiCert, Inc. 的 4 个根证书。 (JDK-8318759)
以下根证书已添加到 cacerts 信任库中:

+ DigiCert, Inc.

  + digicertcseccrootg5
    DN: CN=CN=DigiCert CS ECC P384 Root G5, O="DigiCert, Inc.", C=US

+ DigiCert, Inc.
  + digicertcsrsarootg5
    DN: CN=DigiCert CS RSA4096 Root G5, O="DigiCert, Inc.", C=US

+ DigiCert, Inc.
  + digicerttlseccrootg5
    DN: DigiCert TLS ECC P384 Root G5, O="DigiCert, Inc.", C=US

+ DigiCert, Inc.
  + digicerttlsrsarootg5
    DN: DigiCert TLS RSA4096 Root G5, O="DigiCert, Inc.", C=US
安全库/java.security
➜ 添加了 eMudhra Technologies Limited (JDK-8319187) 的三个根证书)
以下根证书已添加到 cacerts 信任库中:

+ eMudhra Technologies Limited

  + emsignrootcag1
    DN: CN=emSign Root CA - G1, O=eMudhra Technologies Limited, OU=emSign PKI, C=IN

+ eMudhra Technologies Limited
  + emsigneccrootcag3
    DN: CN=emSign ECC Root CA - G3, O=eMudhra Technologies Limited, OU=emSign PKI, C=IN

+ eMudhra Technologies Limited
  + emsignrootcag2
    DN: CN=emSign Root CA - G2, O=eMudhra Technologies Limited, OU=emSign PKI, C=IN
安全库/java.security
➜ 添加了 Telia 根 CA v2 证书 (JDK-8317373)
以下根证书已添加到 cacerts 信任库中:

+ Telia Root CA v2

  + teliarootcav2
    DN: CN=Telia Root CA v2, O=Telia Finland Oyj, C=FI
安全库/java.security
➜ 添加了来自 Let's Encrypt 的 ISRG 根 X2 CA 证书 (JDK-8317374)
以下根证书已添加到 cacerts 信任库中:

+ Let's Encrypt

  + letsencryptisrgx2
    DN: CN=ISRG Root X2, O=Internet Security Research Group, C=US
安全库/javax.net.ssl
➜ 为所有密钥类型调用 X509KeyManager.chooseClientAlias 一次 (JDK-8262186)
JDK中的(D)TLS实现现在在握手期间仅调用一次以进行客户端身份验证,即使请求了多种算法也是如此。X509KeyManager.chooseClientAlias()

Bug 修复此版本还包含针对 Oracle 关键补丁更新中描述的安全漏洞的修复。

➜ 17.0.10 中修复的问题:

#    工 务 局。    元件    总结
1    JDK-8238436    客户端库/java.awt    java/awt/Frame/FrameLocationTest/FrameLocationTest.java 失败
2    JDK-8294427    客户端库/javax.swing    复选框和单选按钮在高 DPI 环境中的 Windows 上存在呈现问题
3    JDK-8282444    核心库/java.lang.module    模块查找器错误地采用默认文件系统路径分隔符
4    JDK-8293659    核心库/java.lang:class_loading    改进了 UnsatisfiedLinkError 错误消息以包含 dlopen 错误详细信息
5    JDK-8299015    核心库/java.net    确保 HttpResponse.BodySubscribers.ofFile 写入所有字节
6    JDK-8274562    核心库/java.nio    (FS)使用 OverlayFS 时,UserDefinedFileAttributeView 无法正确确定是否受支持
7    JDK-8273162    核心库/java.util    AbstractSplittableWithBrineGenerator 不会创建随机盐
8    JDK-8301637    核心库/java.util.concurrent    ThreadLocalRandom.current().doubles().parallel() 争用
9    JDK-8314263    核心库/java.util.logging    触发 Logger finder 递归和 StackOverflowError 的签名 jar
10    JDK-8303440    核心库/java.util:i18n    “ZonedDateTime.parse”可能不接受“UTC+XX”区域 ID
11    JDK-8313657    核心库/javax.naming    com.sun.jndi.ldap.Connection.cleanup 不会关闭 SocketTimeoutErrors 上的连接
12    JDK-8314063    核心库/javax.naming    当 LDAP 连接的握手失败时,Connection::createSocket 中的套接字未关闭
13    JDK-8299658    热点/编译器    C1 编译在 LinearScan::resolve_exception_edge 中崩溃
14    JDK-8301489    热点/编译器    C1:ShortLoopOptimizer 可能会在指令输入之前解除指令
15    JDK-8313626    热点/编译器    C2 崩溃导致意外异常控制流
16    JDK-8313402    热点/编译器    C1:不正确的 LoadIndexed 值编号
17    JDK-8312909    热点/编译器    C1 不应通过接口调用与非子类型接收器进行内联
18    JDK-8303279    热点/编译器    C2:如果 IGVN 拆分时 SubTypeCheckNode::sub() 崩溃
19    JDK-8304954    热点/编译器    使用大页面时,SegmentedCodeCache 失败
20    JDK-8316178    热点/编译器    改进 CodeBlob 的诊断标头
21    JDK-8315377    热点/编译器    C2:assert(u->find_out_with(Op_AddP) == nullptr) 失败:超过 2 个链接的 AddP 节点?
22    JDK-8316514    热点/编译器    更好的 VtableStub 诊断标头
23    JDK-8314024    热点/编译器    PhaseIdealLoop::build_loop_late_post_work 中的 SIGSEGV,由于直接支配器信息错误
24    JDK-8313262    热点/编译器    C2:下沉节点可能会导致所需的铸造被丢弃
25    JDK-8312440    热点/编译器    assert(cast != nullptr) failed:必须已添加强制转换以固定节点
26    JDK-8313756    热点/编译器    [BACKOUT] 8308682:增强 AES 性能
27    JDK-8313760    热点/编译器    [重做]增强 AES 性能
28    JDK-8308103    热点/编译器    自 JDK 17 以来,C2 编译时间大幅增加(高达 ~30 倍)
29    JDK-8309119    热点/编译器    [17U/11U]重做 JDK-8297951:C2:为循环谓词中的所有 If 节点创建框架谓词
30    JDK-8307683    热点/编译器    循环预测不应通过否定其条件来提升带有陷阱的 Trap 范围检查
31    JDK-8275333    热点/GC    “Too many recored phases?”中的打印计数断言
32    JDK-8316906    热点/GC    阐明 TLABWasteTargetPercent 标志
33    JDK-8270894    热点/运行时    在 ObjectSynchronizer::read_stable_mark() 中使用获取语义
34    JDK-8305994    热点/运行时    保证最终异步监视器通货紧缩
35    JDK-8309228    hotspot/runtime    Clarify EXPERIMENTAL flags comment in hotspot/share/runtime/globals.hpp
36    JDK-8306825    hotspot/runtime    Monitor deflation might be accidentally disabled by zero intervals
37    JDK-8279545    hotspot/runtime    Buffer overrun in reverse_words of sharedRuntime_x86_64.cpp:3517
38    JDK-8283326    hotspot/runtime    Implement SafeFetch statically
39    JDK-8314679    热点/SVC代理    SA 在刚刚从其他 JVM 分离后无法正确连接到 JVM
40    JDK-8320597    安全库/java.security    RSA 签名验证在未正确编码参数的签名数据上失败
41    JDK-8302017    安全库/java.security    仅当 BadPaddingException 将被抛出时才分配它
42    JDK-8311592    安全库/javax.crypto    ECKeySizeParameterSpec 导致第三方提供程序出现过多异常
43    JDK-8313742    安全库/javax.crypto    ZipFile.getManifestName 在 Spring Boot 的 jar 验证期间失败
44    JDK-8291154    工具/javac    创建一个非静态嵌套类,而不封闭类抛出 VerifyError
45    JDK-8301247    工具/jpackage    JPackage app-image exe 在 JDK 17+ 中启动多个 exe
46    JDK-8313792    工具/JShell    在 src/jdk.internal.le/share/legal/jline.md 中验证第 4 方信息

大家还下载了