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

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

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


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


image.png


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


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


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


image.png


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


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


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


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


推荐一下二哥在 GitHub 上开源的《Java 程序员进阶之路》专栏吧!风趣幽默、通俗易懂,对 Java 初学者极度友好和舒适😘,内容包括但不限于 Java 语法、Java 集合框架、Java IO、Java 并发编程、Java 虚拟机等核心知识点。


GitHub 地址:https://github.com/itwanger/toBeBetterJavaer


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 了!


大家觉得呢?


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


相关文章
|
3月前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
84 2
|
27天前
|
Oracle 安全 Java
深入理解Java生态:JDK与JVM的区分与协作
Java作为一种广泛使用的编程语言,其生态中有两个核心组件:JDK(Java Development Kit)和JVM(Java Virtual Machine)。本文将深入探讨这两个组件的区别、联系以及它们在Java开发和运行中的作用。
68 1
|
1月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
72 1
|
2月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
62 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
2月前
|
设计模式 Java API
[Java]静态代理与动态代理(基于JDK1.8)
本文介绍了代理模式及其分类,包括静态代理和动态代理。静态代理分为面向接口和面向继承两种形式,分别通过手动创建代理类实现;动态代理则利用反射技术,在运行时动态创建代理对象,分为JDK动态代理和Cglib动态代理。文中通过具体代码示例详细讲解了各种代理模式的实现方式和应用场景。
38 0
[Java]静态代理与动态代理(基于JDK1.8)
|
2月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
38 1
|
3月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
3月前
|
安全 Java API
【Java炸裂更新】JDK 22:区域锚定引领G1垃圾回收革命,性能飙升新高度!
【9月更文挑战第6天】JDK 22的发布,标志着Java在性能优化和垃圾回收技术上的又一次重大突破。区域锚定技术的引入,不仅提升了G1垃圾收集器的效率,也为Java应用的性能提升注入了新的动力。随着Java生态的不断发展和完善,我们有理由相信,Java将继续在编程界保持其铁打英雄的地位,为开发者们带来更多惊喜和可能。 让我们共同期待,Java在JDK 22的引领下,开启一个全新的性能飙升时代!
88 17
|
3月前
|
Java API 开发者
【Java模块化新飞跃】JDK 22模块化增强:构建更灵活、更可维护的应用架构!
【9月更文挑战第9天】JDK 22的模块化增强为开发者构建更灵活、更可维护的应用架构提供了强有力的支持。通过模块化设计、精细的依赖管理和丰富的工具支持,开发者可以更加高效地开发和管理应用,提高应用的性能和可维护性。
102 10
|
3月前
|
存储 Java 开发者
【Java新纪元启航】JDK 22:解锁未命名变量与模式,让代码更简洁,思维更自由!
【9月更文挑战第7天】JDK 22带来的未命名变量与模式匹配的结合,是Java编程语言发展历程中的一个重要里程碑。它不仅简化了代码,提高了开发效率,更重要的是,它激发了我们对Java编程的新思考,让我们有机会以更加自由、更加创造性的方式解决问题。随着Java生态系统的不断演进,我们有理由相信,未来的Java将更加灵活、更加强大,为开发者们提供更加广阔的舞台。让我们携手并进,共同迎接Java新纪元的到来!
75 11

推荐镜像

更多