1

❤️Java17 来了,YYDS!重磅!JDK 17 发布,Oracle 宣布 JDK 17 可以免费商用了。。

 3 years ago
source link: http://www.itwanger.com/java/2021/09/17/java17.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

❤️Java17 来了,YYDS!重磅!JDK 17 发布,Oracle 宣布 JDK 17 可以免费商用了。。

2021/09/17

果然,JDK 17 还是如期发布了,2021年09月14日。巧了,和苹果发布会是一天,不知道是不是互相在蹭热度,哈哈哈~~~

不过,苹果 13 确实不那么 13 香,库克一如既往在挤牙膏式的更新。

对比之下,我觉得还是 JDK 17 比较香,除了新增了不少新特性,Oracle 官方竟然宣布 JDK 17 可以免费商用了

8ce2805c-1e93-45d3-a863-4e14f84d17f9.png

从官方的声明中可以看得出:Oracle JDK 17 和未来的 JDK 版本是在免费使用许可下提供的,直到下一个 LTS 版本发布整整一年

LTS 是什么意思呢?就是 Long-Term-Support,长期支持版本,不同于 16、15、14、13、12 这些过渡版本。

生产环境下,最常用的三个版本,就是 JDK 6、JDK 8、JDK 11,JDK 17 会不会是下一个呢?

9b823264-e7b4-4afc-866f-ab52088d08de.png

上面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线。可以看得到,JDK 17 最多可以支持到 2029 年 9 月份,长达 8 年!

按照技术更新迭代的速度,8 年时间,真不短了!

以 Oracle 的尿性来看,这次免费商用 8 年可谓是良苦用心,为的就是让使用者放心大胆地将 JDK 升级到 JDK 17。

不过,好像 JDK 8 支持的时间更长,可以延长到 2030 年 12 月。似乎我又发现了什么真理:他强任他强,我用 Java 8

JDK 17 之前,LTS 版本都是 3 年发布一次,11 是 2018 年,8 是 2014 年,7 是 2011 年。

之后呢,Oracle 计划每两年发布一次未来的 LTS 版本,也就是说,下一个 LTS 版本,也就是 JDK 21 将于 2023 年 9 月份发布。

技术更新迭代的速度又快了呀!

这里强调一点哈,非长期支持版本一定不要用于生产环境,不过拿来作为学习的对象还是可以的。

JDK 17 提供了 14 个 JEP(JDK Enhancement Proposal,JDK 增强建议),也就是 14 个新特性,我们来一睹为快!

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

Java 语言增强

JEP 409:密封类,密封的类和接口,可以限制其他类或接口扩展或实现它们。

public abstract sealed class Shape permits Circle{

}

类 Shape 被关键字 sealed 修饰,表明它是一个密封类。这个密封类必须要指定它被哪些类继承,比如说 Circle:

public final class Circle extends Shape {
}

Circle 类必须用 final 关键字修饰,表明它不能再被其他类继承了。

这个密封类就有意思了,我只允许谁谁谁继承,就有点指定继承权的内味了。

库的更新和改进

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

JEP 356:增强型伪随机数生成器。为伪随机数生成器 (PRNG) 提供新的接口类型和实现。

JEP 382:新的 macOS 渲染管道。 使用 Apple Metal API 为 macOS 实现了 Java 2D 渲染管道。新管道减少了 JDK 对已弃用的 Apple OpenGL API 的依赖。

新平台支持

JEP 391:macOS AArch64 端口。该端口允许将 Java 应用程序在新的基于 Arm 64 的 Apple Silicon 计算机上运行。

删除和弃用

JEP 398:弃用 Applet API。Applet 是一种运行在 Web 浏览器内的 Java 程序,早就过时了,删除很有必要。

JEP 407:删除了远程方法调用 (RMI) 激活机制。

JEP 410:删除实验性的 AOT 和 JIT 编译器,这两个实验功能并没有被广泛使用,删了省得维护。

JEP 411:弃用安全管理器。安全管理器可追溯到 Java 1.0,但多年来并没有起到很好的保护作用,删除了省心。

面向未来的 Java 程序

JEP 403:JDK 内部强封装,限制外部对 JDK 内部类进行访问,此更改会使应用程序更安全,并减少对非标准、内部 JDK 实现细节的依赖。

后续 JDK 版本的预览和孵化器

JEP 406 : 为 switch 支持模式匹配。

我们希望将一个变量 o 与多个备选方案进行比较,但之前的 switch 不支持使用 instanceof 的模式匹配,于是我们只能用 if-else 来实现。

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;
}

JDK 17 在模式匹配的基础上提供了 switch 语句的支持:

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();
    };
}

这样写是不是就瞬间高大上了许多,舒服。

JEP 412:外部函数和内存 API(孵化器)。通过有效调用外部函数(JVM 外部的代码),并通过安全访问外部内存,这使得 Java 程序能够调用本机库并处理本机数据,而没有 Java 本机接口 (JNI) 的脆弱性和复杂性。

JEP 414:矢量 API(第二孵化器)。Vector API 由JEP 338 提出并作为孵化 API 集成到 Java 16 中。

Vector API 旨在通过提供一种在 Java 中编写复杂矢量算法的方法来提高矢量化计算的可预测和健壮性。许多领域都可以从这个显式向量 API 中受益,包括机器学习、线性代数、密码学、金融和 JDK 本身的代码。

官方链接:https://www.oracle.com/news/announcement/oracle-releases-java-17-2021-09-14/


讲良心话,JDK 更新的频率是比以前更快了,但开发者的习惯仍然停留在 JDK 8 甚至 JDK 6 的层面上。

主动升级到 JDK 11 的并不多,尤其是 Oracle 搞出商业收费后,大家升级的意愿就更淡了。

不知道是不是出于开源或者叫免费的压力,JDK 17 宣布可以免费商用了,并且打算以后的版本也保持这样。

这对使用者来说,无疑是一罐蜜糖,长达 8 年的时间支持,也许大家会愿意升级到 JDK 17 了!

大家觉得呢?

我是二哥呀,没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟

chenmowanger_430.png

(转载本站文章请注明作者和出处 沉默王二

Show Disqus Comments

Related Issues not found

Please contact @qinggee to initialize the comment


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK