重磅!jdk17发布,oracle宣布从jdk17开始正式免费。。(代码片段)

Java技术栈 Java技术栈     2023-01-04     791

关键词:

点击关注公众号,Java干货及时送达

上一版:JDK 16 正式发布,一次性发布 17 个新特性…不服不行!


JDK 17 正式发布+免费

牛逼啊,JDK 16 刚发布半年(2021/03/16),JDK 17 又如期而至(2021/09/14),这个时间点牛逼啊,蹭苹果发布会的热度?记得当年 JDK 15 的发布也是同天,巧了。。

虽然 iPhone 13 发布了,但真的不是 13 香,真没什么创新和亮点,一如继往苹果式挤牙膏,在 13 上真的挤到精髓了,这次我想说,JDK 17 更香!!

iPhone 13 降价算啥??JDK 17 直接干到免费!!!

Oracle 宣布,从 JDK 17 开始,后面的 JDK 都全部免费提供!!!

是的,你没有看错,Oracle 这次良心了,发大招了,Java 17+ 可以免费使用了,包括商用,更详细的条款可以阅读:

https://www.oracle.com/downloads/licenses/no-fee-license.html

来看下最新 Oracle Java 支持路线图:

可以看到,JDK 17 是自 2018 年 JDK 11 后的第二个长期支持版本,支持到 2029 年 9 月,好家伙,支持时间长达 8 年,这下可以不用死守 JDK 8 了,JDK 17+ 也可以是一种新的选择了。。

下一个第三个长期支持版本是 JDK 21,时间为 2023 年 9 月,这次长期支持版本发布计划改了,不再是原来的 3 年一次,而是改成了 2 年一次!

另外,非长期支持版本还是半年发一次不变,下一个非长期支持版本计划在 2022/03 发布,但注意不要用在生产。

JDK 17 新特性一览

ID特性说明
1306:Restore Always-Strict Floating-Point Semantics恢复始终执行严格模式的浮点定义
2356:Enhanced Pseudo-Random Number Generators增强型伪随机数生成器
3382:New macOS Rendering Pipeline新的 macOS 渲染管道
4391:macOS/AArch64 PortmacOS AArch64 端口
5398:Deprecate the Applet API for Removal弃用 Applet API
6403:Strongly Encapsulate JDK InternalsJDK 内部强封装
7406:Pattern Matching for switch (Preview)为 switch 支持模式匹配
8407:Remove RMI Activation移除 RMI 激活
9409:Sealed Classes密封类
10410:Remove the Experimental AOT and JIT Compiler移除实验性的 AOT 和 JIT 编译器
11411:Deprecate the Security Manager for Removal弃用安全管理器
12412:Foreign Function & Memory API (Incubator)外部函数和内存 API(孵化中)
13414:Vector API (Second Incubator)矢量 API(二次孵化中)
14415:Context-Specific Deserialization Filters上下文特定反序列化过滤器

JDK 17 这个版本提供了 14 个增强功能,另外在性能、稳定性和安全性上面也得到了大量的提升,以及还有一些孵化和预览特性,有了这些新变化,Java 会进一步提高开发人员的生产力。

JDK 17 新特性详细介绍

下面是 JDK 17 中的 14 个新特性详细介绍,分为 5 大类进行介绍!


1. 语言增强

409:Sealed Classes

密封类,这个特性在 JDK 15 中首次成为预览特性,在 JDK 16 中进行二次预览,在 JDK 17 这个版本中终于正式转正了。

密封类可以用来增强 Java 编程语言,防止其他类或接口扩展或实现它们。

来看下面这个示例:

public abstract sealed class Student
    permits ZhangSan, LiSi, ZhaoLiu 
    ...
        

类 Student 被 sealed 修饰,说明它是一个密封类,并且只允许指定的 3 个子类继承。

这个牛逼啊,有了这个特性,意味着以后不是你想继承就继承,想实现就实现了,你得经过允许才行。转正了,栈长会再详细写一篇,关注公众号:Java技术栈,公众号第一时间推送哦。


2. 预览和孵化特性

406:Pattern Matching for switch (Preview)

为 switch 支持模式匹配(预览中)

instanceof 模式匹配的概念大家都清楚吧?不清楚的可以看下这篇文章:Java 14 之模式匹配,非常赞的一个新特性!

这次在 JDK 17 中为 switch 语句支持模式匹配,是个什么鬼?来看下面的示例!

老代码写法:

static String formatter(Object o) 
    String formatted = "unknown";
    if (o instanceof Integer i) 
        formatted = String.format("int %d", i);
     else if (o instanceof Long l) 
        formatted = String.format("long %d", l);
     else if (o instanceof Double d) 
        formatted = String.format("double %f", d);
     else if (o instanceof String s) 
        formatted = String.format("String %s", s);
    
    return formatted;

模式匹配新写法:

static String formatterPatternSwitch(Object o) 
    return switch (o) 
        case Integer i -> String.format("int %d", i);
        case Long l    -> String.format("long %d", l);
        case Double d  -> String.format("double %f", d);
        case String s  -> String.format("String %s", s);
        default        -> o.toString();
    ;

牛逼,直接在 switch 上支持 Object 类型,这就等于同时支持多种类型,使用模式匹配得到具体类型,大大简化了语法量,这个功能还是挺实用的,期待转正,栈长会再详细写一篇,关注公众号:Java技术栈,公众号第一时间推送哦。

412:Foreign Function & Memory API (Incubator)

外部函数和内存 API(孵化中)

改进了 JDK 14JDK 15 引入的 API,通过有效调用外部函数(即 JVM 之外的代码),以及安全地访问外部内存(JVM 之外的内存),这些 API 可以调用本地库和处理本地数据,与 Java 运行环境之外的代码和数据进行交互。

414: Vector API (Second Incubator)

矢量 API(二次孵化中)

Vector API 这是一个新的初始迭代孵化器模块,模块包:jdk.incubator.vector,用于表示在运行时可靠地编译到支持的 CPU 架构上的最佳矢量硬件指令的矢量计算,矢量运算可以提供优于等效标量计算的性能,并且在机器学习、人工智能和密码学等领域非常普遍。

本次增强的 API 允许以一种在运行时,可靠地编译为支持的 CPU 架构上的最佳向量指令的方式表达向量计算。


3. 核心增强

306:Restore Always-Strict Floating-Point Semantics

恢复始终执行严格模式的浮点定义。

Java 最初只有严格的浮点语义,但从 JDK 1.2 开始,为了适应当时硬件架构的限制,默认情况下允许这些严格语义中的细微变化,而现在这些都没有必要了,已被 JEP 306 删除。

356:Enhanced Pseudo-Random Number Generators

增强型伪随机数生成器,java.util.random 包更新了,提高了不同 PRNGs(伪随机数生成器)的互操作性,并使基于需求而不是硬编码特定实现的算法变得容易。

这次更改包括伪随机数生成器(PRNG)的新的接口类型和实现,包括可跳 PRNGs 和一个可拆分的 PRNG 算法(LXM),以及全新的 RandomGeneratorFactory 类。

382:New macOS Rendering Pipeline

新的 macOS 渲染管道。

这个新管道通过使用新的 Apple Metal API 为 macOS 实现 Java 2D 渲染管道,减少了 JDK 对已弃用的 Apple OpenGL API 的依赖。

415: Context-Specific Deserialization Filters

上下文特定反序列化过滤器。

允许应用配置 context-specific 和 dynamically-selected 过滤器,通过一个 JVM 范围的过滤器工厂,用来为每个单独的反序列化操作选择一个过滤器。

403:Strongly Encapsulate JDK Internals

JDK 内部强封装,它是 JDK 16 中 JEP 396 的延续,JDK 16 开始对 JDK 内部大部分元素默认进行强封装,sun.misc.Unsafe 之类的关键内部 API 除外,从而限制对它们的访问。

此外,用户仍然可以选择自 JDK 9 以来的默认的宽松的强封装,这样可以帮助用户毫不费力地升级到未来的 Java 版本。


4. 新平台支持

391:macOS/AArch64 Port

macOS AArch64 端口,即提供可适用于 macOS 的 JDK 版本,该版本可在基于 Arm 64 的较新的 macOS 系统上本地化运行。


5. 弃用和移除项

411:Deprecate the Security Manager for Removal

弃用安全管理器。

安全管理器从 Java 1.0 开始,这些年来它一直都不是保护 Java 应用程序代码的主要手段,也很少用于保护 Java 服务器端代码,所以这个版本标识为弃用状态了,未来的版本会进行移除。

398:Deprecate the Applet API for Removal

弃用 Applet API。

Applet 是一种运行在 Web 浏览器内的 Java 程序,但 Applet 早就没什么鸟用了,现在还有哪款浏览器支持 Java Applet 的吗?在坐的各位估计都没听过吧?

407:Remove RMI Activation

移除 RMI 激活。

RMI 激活机制已于 2020 年 9 月在 JDK 15 中移除了,远程方法调用 (RMI) 激活机制现也已被移除,需要说明的是,RMI 激活是 RMI 中一个过时的组件,自 Java 8 以来一直是可选的。

410:Remove the Experimental AOT and JIT Compiler

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

AOT 和 JIT 这两个实验性的编译器,自从在 JDK 9 中引入以来几乎没有怎么使用,市面上也出现了更为广泛使用的替代方案,并且维护它们所需的工作量很大,所以在 JDK 16 中就已经删除了,本次从 OpenJDK 项目中删除了源代码。

JDK 17 都免费了,和 OpenJDK 还有区别?

有的,虽然两者很接近,但也还是有一点区别!

1、Oracle JDK 提供了各种安装程序,还包含更新规则,而 OpenJDK 只提供了一个纯压缩包;

2、Usage Logging 仅在 Oracle JDK 中可用;

3、Oracle JDK 要求第三方加密提供程序使用 Java 加密扩展(JCE)进行签名,而 OpenJDK 继续允许使用未签名的第三方加密提供程序;

4、java -version 的输出也是不同的,Oracle JDK 返回 java 并包含 Oracle 特定的标识符,OpenJDK 返回 OpenJDK 并且不包含特定于 Oracle 的标识符;

5、许可证不同,Oracle JDK 17+ 是根据 Oracle 免费条款和条件许可发布的,而 OpenJDK 在 GPLv2wCP 下发布的;

6、Oracle JDK 源代码含有 "ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.",其使用受许可条款约束的,而 OpenJDK 源代码可参考 GPL 许可条款;

以上是两者最主要的 6 点区别。

总结

最后,本文主要介绍了 JDK/Java 17 的 14 个新特性基本面,后面栈长有时间也会继续更新一些 JDK 新特性详细教程,关注公众号Java技术栈第一时间推送哦。如果你想看历史 Java 8+ 系列新特性教程,也可以在公众号菜单中进行阅读。

Java 17 发布了,Oracle 宣布 JDK 17 及之后的版本都免费使用,包括商用,爽!!!Oracle 这次真的良心了,或许是趋于某种压力进行免费?

Java 确实是在走下坡路,即使如此,也是老当益壮,是现在各大企业必用的语言之一。

虽然大部分人现在还在用着 JDK 7/8,甚至 6,还在写着 JDK 5 的语法,现在随着 JDK 17+ 的免费,或者在未来的不久,JDK 8 会逐渐被替代,JDK 17+ 慢慢走上舞台。

往期 Java 教程及示例源码:

https://github.com/javastacks/javastack

OracleJDK 17 发布地址:

https://www.oracle.com/java/technologies/javase/17-relnotes.html

OpenJDK 17 发布地址:

http://openjdk.java.net/projects/jdk/17/

Oracle JDK 17 下载地址:

https://www.oracle.com/java/technologies/javase-downloads.html

OpenJDK 17 下载地址:

https://jdk.java.net/17/

有兴趣的可以下载尝鲜了!!

最后,JDK 17+ 开始免费了,你们会考虑用吗?来投票看看!

老铁们,点个在看、转发支持下哦,也欢迎分享给你的更多朋友们~

关注Java技术栈,持续分享最新、最主流的Java技术~

版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重他人劳动成果和知识产权。



关注Java技术栈看更多干货

获取 Spring Boot 实战笔记!


刚刚java17正式发布,oracle宣布提供免费jdk

...的小片子,这次加了翻译一个小时前,JAVA17正式发布,这是一个LTS(长期支持)版本,带来了不少有用的新特性。关于Java17的一些新特性,胖哥已经在往期的文章中进行了介绍,这里就不再赘述了&#... 查看详情

劲爆!java18正式发布,默认utf-8,finalize被弃用。。别再乱用了!

点击关注公众号,Java干货及时送达上一版:重磅!JDK17发布,Oracle宣布从JDK17开始正式免费。。JDK18正式发布JDK17刚发布半年,JDK18又如期而至,JDK版本号这算是成年了?JDK18发布了,栈长继续为大家... 查看详情

劲爆:java18正式发布,默认utf-8,finalize被弃用。。别再乱用了(代码片段)

上一版:重磅!JDK17发布,Oracle宣布从JDK17开始正式免费。。JDK18正式发布JDK17刚发布半年,JDK18又如期而至,JDK版本号这算是成年了?JDK18发布了,栈长继续为大家解读!JDK18延续了JDK17开创的免费策... 查看详情

jdk8到jdk17有哪些吸引人的新特性?(代码片段)

...。任何人都可以获取该源码,并通过源码构建一个发行版发布到网络上。但是需要一个组织审核来确保构建的发行版是有效的,这个组织就是JCP(JavaCommunityProcess)。2009年,SUN公司被Oracle公司"白嫖"(参考2018年Google赔款),此时大家... 查看详情

jdk19都出来了~是时候梳理清楚jdk的各个版本的特性了jdk17特性讲解(代码片段)

JDK各个版本特性讲解-JDK17特性一、JAVA17概述  JDK16刚发布半年(2021/03/16),JDK17又如期而至(2021/09/14),这个时间点特殊,蹭苹果发布会的热度?记得当年JDK15的发布也是同天Oracle宣布,从JDK1... 查看详情

jdk19都出来了~是时候梳理清楚jdk的各个版本的特性了jdk17特性讲解(代码片段)

JDK各个版本特性讲解-JDK17特性一、JAVA17概述  JDK16刚发布半年(2021/03/16),JDK17又如期而至(2021/09/14),这个时间点特殊,蹭苹果发布会的热度?记得当年JDK15的发布也是同天Oracle宣布,从JDK1... 查看详情

从jdk8到jdk17,需要注意的一些新特性

这篇文章并非单一的介绍JDK17的新特性,而是将jdk8到jdk17之间所有新加入的特性进行了简单的汇总,罗列一系列重要的改动,以便从JDK8升级到JDK17.模块化开发这并非jdk17的新特性,模块化在jdk9中加入,模块化... 查看详情

从jdk8到jdk17,需要注意的一些新特性(代码片段)

这篇文章并非单一的介绍JDK17的新特性,而是将jdk8到jdk17之间所有新加入的特性进行了简单的汇总,罗列一系列重要的改动,以便从JDK8升级到JDK17.模块化开发这并非jdk17的新特性,模块化在jdk9中加入,模块化... 查看详情

java17,有史以来最快jdk

...源:blog.csdn.net/mengyidan/article/details/120308102Java17已正式发布,该版本是自Java11以来的首个长期支持版本。Oracle还提议将JDKLTS发布的节奏从每三年一次改为每两年一次,并且每个LTS版本的服务时间至少8年以上。Java版本通... 查看详情

java17,有史以来最快jdk!(代码片段)

...源:blog.csdn.net/mengyidan/article/details/120308102Java17已正式发布,该版本是自Java11以来的首个长期支持版本。Oracle还提议将JDKLTS发布的节奏从每三年一次改为每两年一次,并且每个LTS版本的服务时间至少8年以上。Java版本通... 查看详情

将jvm从jdk11迁移到jdk16的问题

...迁移到JDK16,以利用它的许多好处。JDK17,即下一个长期发布的JDK,已经发布。我们计划尽快迁移到JDK17。下面是对我们在过渡期 查看详情

java18要来了,你不会还在用java8吧?(代码片段)

...品 |OSC开源社区(ID:oschina2013)上一版:重磅!JDK17发布,Oracle宣布从JDK17开始正式免费。。Java开发工具包(JDK)18将于2022年3月22日发布。新版本的标准Java将有九个新特性,该特性集已于12月9日冻结,... 查看详情

jdk11新特性——概述

...k11概述北京时间2018年9月26日,Oracle官方宣布Java11正式发布。这是Java大版本周期变化后的第一个长期支持版本,非常值得关注。从官网即可下载,最新发布的Java11将带来ZGC、HttpClient等重要特性,一共包含17个JEP(JDKE... 查看详情

一文详解|从jdk8飞升到jdk17,再到未来的jdk21(代码片段)

...直接来了个大招,Spring 6和 SpringBoot3的最低依赖就是JDK17!跨过JDK8~ JDK1 查看详情

一文总结javajdk17发布的新特性(代码片段)

JDK17已经于2021年3月16日如期发布。本文介绍JDK17新特性。JDK17于2021年9月14日正式发布(General-AvailabilityRelease)。JDK17将是大多数供应商的长期支持(LMS)版本。上一个LTS版本是JDK11。本文总结了JDK17发布的新特性。... 查看详情

一文总结javajdk17发布的新特性(代码片段)

JDK17已经于2021年3月16日如期发布。本文介绍JDK17新特性。JDK17于2021年9月14日正式发布(General-AvailabilityRelease)。JDK17将是大多数供应商的长期支持(LMS)版本。上一个LTS版本是JDK11。本文总结了JDK17发布的新特性。... 查看详情

一文总结javajdk17发布的新特性(代码片段)

简介: JDK17已经于2021年3月16日如期发布。本文介绍JDK17新特性。JDK17于2021年9月14日正式发布(General-AvailabilityRelease)。JDK17将是大多数供应商的长期支持(LMS)版本。上一个LTS版本是JDK11。本文总结了JDK17发布... 查看详情

不看也得收藏|从jdk8飞升到jdk17,再到未来的jdk21(代码片段)

...ring直接来了个大招,SpringBoot3和Spring6的最低依赖就是JDK17!跨过JDK8- 查看详情