开发软件

关注公众号 jb51net

关闭
Java SE Development Kit(JDK) 17 for Mac v17.0.11 苹果电脑版

Java SE Development Kit(JDK) 17 for Mac v17.0.11 苹果电脑版

您还可以选择:官方全版本下载 AArch64下载

热门排行

简介

Java SE Development Kit 17(JDK/Java 17) 正式 GA已经发布,按照发布规划,JDK/Java 17 属于长期支持版本 (LTS),将会获得 8 年的技术支持,直至 2029 年 9 年。Java 17 LTS 是 Java SE 平台的最新长期支持版本。 根据 Oracle 免费条款和条件许可,JDK 17 二进制文件可在生产中免费使用,并可免费重新分发。至少在 2024 年 9 月之前,JDK 17 将根据这些条款接收更新。

Java SE Development Kit 17 for Windows :点击下载

Java SE Development Kit 17 for Linux :点击下载

JDK 是使用 Java 编程语言构建应用程序和组件的开发环境。JDK 包括用于开发和测试用 Java 编程语言编写并在 Java 平台上运行的程序的工具。本次提供的是Java SE Development Kit(JDK) 17 for Mac官方版本下载,欢迎需要此款工具的朋友前来下载使用。

JDK/Java 17 总共包含 14 个 JEP,如下:

306: Restore Always-Strict Floating-Point Semantics
356: Enhanced Pseudo-Random Number Generators
382: New macOS Rendering Pipeline
391: macOS/AArch64 Port
398: Deprecate the Applet API for Removal
403: Strongly Encapsulate JDK Internals
406: Pattern Matching for switch (Preview)
407: Remove RMI Activation
409: Sealed Classes
410: Remove the Experimental AOT and JIT Compiler
411: Deprecate the Security Manager for Removal
412: Foreign Function & Memory API (Incubator)
414: Vector API (Second Incubator)
415: Context-Specific Deserialization Filters

功能特性

JDK 17 发行说明:https://www.oracle.com/java/technologies/javase/17-relnote-issues.html

Restore Always-Strict Floating-Point Semantics

恢复始终执行严格模式 (Always-Strict) 的浮点定义

Enhanced Pseudo-Random Number Generators

添加增强的伪随机数生成器

New macOS Rendering Pipeline

为 macOS 引入新渲染管道

macOS/AArch64 Port

支持将 JDK 移植到 macOS/AArch64 架构

Deprecate the Applet API for Removal

弃用待移除的 Applet API

Strongly Encapsulate JDK Internals

强封装的 JDK 内部 API,默认对 JDK 内部进行强封装

Pattern Matching for switch (Preview)

switch 模式匹配进入预览 (Preview) 阶段

Remove RMI Activation

移除 RMI(远程方法调用)激活机制

Sealed Classes

密封类和接口正式可用,用于限制哪些类和接口可以继承或实现它们。

Remove the Experimental AOT and JIT Compiler

移除实验性的 AOT 和 JIT 编译器

Deprecate the Security Manager for Removal

弃用待移除的安全管理器 (Security Manager)

Foreign Function & Memory API (Incubator)

外部函数和内存 API 进入孵化阶段,Java 应用程序通过该 API 能够与 Java 运行时之外的代码和数据进行互操作。

Vector API (Second Incubator)

在 JDK/Java 17 中,Vector API 已进入孵化的第二阶段,Vector API 用于表达可在支持的 CPU 架构上编译为最佳矢量硬件指令的矢量计算,以实现优于等效标量计算的性能。

Context-Specific Deserialization Filters

增加面向特定上下文的反序列化过滤器,此特性允许应用程序通过 JVM 的过滤器工厂配置特定于上下文和动态选择的反序列化过滤器。

值得一提的是,根据 Oracle 最新推出的「Free Java License」,Oracle JDK 可免费用于生产环境。

Free Java License 摘要

此外,Oracle 还提议将 JDK LTS 的发布周期从每三年一次改为每两年一次。如果该提案被接受,这意味着 JDK 17 之后的下一个 JDK LTS 版本将是 JDK 21,而不是 JDK 23。

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”页面的标题文本使用。

在 macOS 上安装 JDK

在 macOS 上安装 JDK:

.dmg从.tar.gz页面下载所需的 JDK或文件 :

macOS x64 系统: 或jdk-17.interim.update.patch_macos-x64_bin.dmgjdk-17.interim.update.patch_macos-x64_bin.tar.gz
macOS aarch64(64 位 ARM)系统: 或jdk-17.interim.update.patch_macos-aarch64_bin.dmgjdk-17.interim.update.patch_macos-aarch64_bin.tar.gz

单击接受许可协议。

从浏览器下载窗口或文件浏览器,双击.dmg文件以启动它。

出现一个Finder窗口,其中包含一个打开框的图标和.pkg文件名。

双击该图标以启动安装应用程序。JDK 17.pkg

安装应用程序显示简介窗口。

点击继续。

在安装类型窗口出现。

单击安装。

出现一个窗口,显示消息: 安装程序正在尝试安装新软件。输入您的密码以允许此操作。

输入管理员用户名和密码,然后单击安装软件。

安装软件并显示确认窗口。

安装软件后,如果要节省磁盘空间,可以删除.dmg 或 .tar.gz文件。

在 macOS 上卸载 JDK

在 macOS 上卸载 JDK:

您必须具有管理员权限。

笔记:不要试图通过从 中删除 Java 工具来卸载 Java /usr/bin。此目录是系统软件的一部分,Apple 将在您下次执行操作系统更新时重置任何更改。

去/Library/Java/JavaVirtualMachines。

rm以root用户身份执行命令或使用sudo工具删除名称与以下格式匹配的目录:

/Library/Java/JavaVirtualMachines/jdk-17.interim.update.patch.jdk

例如,要卸载17 Interim 0 Update 0 Patch 0:

$ rm -rf jdk-17.jdk

macOS 安装常见问题

本主题提供了有关在 macOS 计算机上安装 JDK 的以下常见问题解答。

1. 如何找出系统默认的Java版本?

当您从命令行运行 Java 应用程序时,它使用默认的 JDK。如果您不开发 Java 应用程序,那么您无需担心这一点。请参阅确定 macOS 上的默认 JDK 版本。

2. 安装 Java for macOS 2012-006 后,我可以继续使用 Apple 的 Java 6 和 macOS JDK for Java 17吗?

如果您想继续使用命令行使用 Java 6 进行开发,那么您可以为您喜欢的命令环境修改启动脚本。对于 bash,使用这个:

$ export JAVA_HOME=`/usr/libexec/java_home -v 17`

一些应用程序使用/usr/bin/java调用 Java。为 macOS 2012-006 安装 Java 后,/usr/bin/java将找到安装的最新 JDK,并将其用于/usr/bin. 您可能需要修改这些应用程序才能找到 Java 6,或者联系开发人员获取更新版本的应用程序。

4. Application Utilities 中的 Java Preferences 应用程序发生了什么变化?

Java Preferences 应用程序是 Apple Java 安装的一部分,Oracle Java 不使用它。因此,不包含 Apple Java 的 Apple macOS 版本将不包含 Java 首选项。

更新日志

Java™ SE 开发工具包 17 更新 17.0.11 (JDK 17.0.11)
发布日期:2024 年 4 月 16 日

此更新版本的完整版本字符串为 17.0.11+7(其中“+”表示“内部版本”)。 版本号为 17.0.11。

IANA TZ 数据 2024a

JDK 17.0.11 包含 IANA 时区数据 2024a,其中包含以下更改:

Ittoqqortoormiit, 格陵兰岛 于 2024-03-31 更改时区。
沃斯托克, 南极洲 于 2023-12-18 更改了时区。
自 2020 年以来,南极洲凯西五次更改时区。
从 2072 年开始的巴勒斯坦时间戳的代码和数据修复。
从现在开始的时间戳的新数据文件 zonenow.tab。
哈萨克斯坦从 2024-03-01 开始在 UTC+5 上统一。
斋月过后一周,巴勒斯坦迅速崛起。
zic 不再假装支持无限期过去的 DST。
localtime 在 2422 年不再对华雷斯城进行错误处理。

安全基线

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

Java 系列版本    安全基线(完整版本字符串)Security Baseline (Full Version String)
17    17.0.11+7
11    11.0.23+7
8    8U411-B09型

新功能

安全库/javax.crypto
➜ 将 XML Security for Java 更新到 3.0.3 (JDK-8319124)
XML 签名实现已更新到 Santuario 3.0.3。添加了对四种新的基于 SHA-3 的 RSA-MGF1 签名方法的支持:、 、 和 。虽然这些新算法 URI 未在 JDK 更新版本中定义,但它们可以表示为字符串文本,以便在功能上等效。SHA-3 哈希算法支持通过 JEP 287 交付给 JDK 9。在此之前发布的版本可能会使用第三方安全提供程序。SHA3_224_RSA_MGF1SHA3_256_RSA_MGF1SHA3_384_RSA_MGF1SHA3_512_RSA_MGF1javax.xml.crypto.dsig.SignatureMethod

此外,还添加了对以下 EdDSA 签名的支持:和 .虽然这些新算法 URI 未在 JDK 更新版本中定义,但它们可以表示为字符串文本,以便在功能上等效。JDK 从 JDK 15 开始支持 EdDSA。早于此版本的版本可能会使用第三方安全提供商。另一个区别是 JDK 默认情况下仍然支持 here() 函数。但是,我们建议避免在新签名中使用该函数,并替换使用该函数的现有签名。JDK 的未来版本可能会禁用并最终删除对此函数的支持,因为使用标准 Java XPath API 无法支持它。用户现在可以通过将 security 属性设置为“false”来禁用该功能。ED25519ED448javax.xml.crypto.dsig.SignatureMethodhere()here()here()jdk.xml.dsig.hereFunctionSupported

其他说明

客户端库/java.awt
➜ 大多数 Linux 桌面不支持 AWT SystemTray API (JDK-8322750)
该 API 用于桌面任务栏中的通知,并且可能包含表示应用程序的图标。在 Linux 上,由于平台错误,Gnome 桌面在任务栏中自己的图标支持已经好几年没有正常工作了。这反过来又影响了依赖于它的 JDK 的 API。java.awt.SystemTray

因此,根据现有的 Java SE 规范,只要 JDK 确定可能存在平台错误,就会返回 false。java.awt.SystemTray.isSupported()

这种影响可能是有限的,因为应用程序始终必须检查该支持。此外,某些发行版已经好几年不支持 SystemTray,除非最终用户选择安装非捆绑桌面扩展。

security-libs/java.security
➜ 添加了 R1 和 E1 根证书 (JDK-8321408)
以下根证书已添加到 cacerts 信任库中:

+ Certainly

  + certainlyrootr1
    DN: CN=Certainly Root R1, O=Certainly, C=US
+ Certainly
  + certainlyroote1
    DN: CN=Certainly Root E1, O=Certainly, C=US

Bug 修复

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

➜ 17.0.11 中修复的问题:

#    JBS公司    元件    总结
1    JDK-8318951型    客户端-libs/2d    JPEG 解码中的其他负值检查
2    JDK-8301846型    客户端-libs/javax.sound    使用 JFileChooser 或 COM 库时屏幕锁定后 TargetDataLine 无效
3    JDK-8299058型    核心库/java.net    连接空闲时 sun.net.httpserver.ServerImpl 中的 AssertionError
4    JDK-8321480型    核心库/java.util:i18n    ISO 4217 修正案 176 更新
5    JDK-8271118    热点/编译器    C2:StressGCM 的优先级应高于基于频率的策略
6    JDK-8316679型    热点/编译器    C2 SuperWord:结果错误,如果不具有可比性,则不应在存储前移动负载
7    JDK-8274060型    热点/编译器    C2:JDK-8273454 之后的计算不正确
8    JDK-8273454    热点/编译器    C2:将 (-a)*(-b) 转换为 a*b
9    JDK-8315920型    热点/编译器    C2:“控制输入必须主导电流控制”断言失败
10    JDK-8297968型    热点/编译器    PrintOptoAssembly 崩溃
11    JDK-8321215型    热点/编译器    VSIB 寻址模式的 x86 指令编码不正确
12    JDK-8316414型    热点/编译器    C2:linux-x86 上的大字节数组克隆触发器“失败:控制流格式错误”断言失败
13    JDK-8320209型    热点/编译器    VectorMaskGen 在 x86_64 上破坏标志
14    JDK-8318889型    热点/编译器    C2:在断言后添加救助 在build_loop_late中检测到错误图
15    JDK-8317507型    热点/编译器    C2 编译失败,并显示“超出 _node_regs 数组”
16    JDK-8277919型    热点/JFR    OldObjectSample 事件导致 JFR 记录中的类常量池膨胀
17    JDK-8287113型    热点/JFR    JFR:定期任务线程将周期用于方法采样事件
18    JDK-8322321型    热点/运行时    添加 -XX:+VerifySharedSpaces 的手册页文档
19    JDK-8312585型    热点/运行时    将 DisableTHPStackMitigation 标志重命名为 THPStackMitigation
20    JDK-8312182型    热点/运行时    由于线程启动计时问题,THP 会导致巨大的 RSS
21    JDK-8312620型    热点/运行时    JDK-8310233 后 WSL Linux 生成崩溃
22    JDK-8312394型    热点/运行时    [Linux的]SIGSEGV 如果内核是在没有 hugepage 支持的情况下构建的
23    JDK-8323243    热点/运行时    JNI 调用抽象实例方法会损坏堆栈
24    JDK-8320208型    security-libs/java.security    将公共后缀列表更新为 b5bf572
25    JDK-8302182型    security-libs/java.security    将公共后缀列表更新为 88467c9
26    JDK-8307185型    安全库/javax.crypto:pkcs11    pkcs11 本机库在按住 GC 锁的同时对 java 代码进行 JNI 调用
27    JDK-8277307型    安全库/javax.net.ssl    在 session_ticket 和 pre_shared_key 扩展下发送的预共享密钥
28    JDK-8284910型    security-libs/javax.security    PasswordCallback 中的缓冲区清理
29    JDK-8318971型    工具/jar    在处理不存在的文件时更好地处理 jar 工具的错误
30    JDK-8308245型    工具/javac    添加 -proc:full 来描述当前默认的注释处理策略
31    JDK-8298087型    xml/javax.xml.validation    XML 架构验证通过 ErrorHandler 报告两次必需的属性

大家还下载了