JDK20又来了!你还在用JDK8么?

Posted 小沈同学呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK20又来了!你还在用JDK8么?相关的知识,希望对你有一定的参考价值。

文章目录

前言

JDK20又来了!相信很多开发者和我一样都还在用JDK8稳定版。JDK8是最后一个免费商业化版本,很多公司也是因为这个原因不愿意升级。但是作为一个资深搬砖人,我们也还是需要了解新版本的特性。废话不多说,我们开始今天的主题——JDK 20新特性。

JDK 20发布

3月21日,甲骨文公司发布了最新版JDK20。JDK 20是一个仅支持六个月的短期版本,它是2022年9月20日发布的JDK 19 的迭代产品。值得注意的是JDK 21也将于9月发布,不过JDK21会是一个长期支持(LTS)版本。目前,Java 20已经可以从官网下载使用。

JDK20下载

https://jdk.java.net/20/

JDK 20新特性

相信不少同学还在JDK8吧,但是JDK20我们也要了解它的新特性。

矢量API

矢量API是引入一种API来表达矢量计算,这些计算在运行时可靠地编译为支持的CPU架构上的最佳矢量指令。这将实现优于等效标量计算的性能。

虚拟线程(第二次优化)

虚拟线程是轻量级线程,可以减少编写、维护和观察高吞吐量并发应用程序的工作量。在JDK19中已经少量API更改和对ThreadGroup的降级。在JDK20中将从根本上改变Java应用程序的扩展方式。

结构化并发

结构化并发由一个API来简化多线程编程,并将在不同线程中运行的多个任务视为单个工作单元。简化了错误处理和消除,提高了可靠性和可观察性。自从在JDK 19中孵化以来,唯一的变化是StructuredTaskScope已经更新,以支持在任务范围中创建的线程对范围值的继承。在JDK20中正在重构此功能。

Scoped values 作用域值

Scoped values是一种处于开发阶段的API,可以在线程内和线程间共享不可变的数据。与线程局部变量相比,这些变量更可取,尤其是在使用大量虚拟线程时。作用域值允许在大型程序中的组件之间安全有效地共享数据,而无需使用方法参数。目标包括易用性、可理解性、健壮性和性能。

记录模式(第二次优化)

在JDK20中记录模式通过解构记录值的模式增强了Java编程语言。可以嵌套记录模式和类型模式,以实现声明性、强大且可组合的数据导航和处理形式。目标包括扩展模式匹配以表达更复杂、可组合的数据查询,并且不更改类型模式的语法或语义。

外部函数和内存API

外部函数和内存API引入了一种API,Java程序可以通过该API在Java运行时之外与代码和数据进行互操作。API使Java程序能够调用本机库并处理本机数据,而没有JNI(Java native Interface)的脆弱性和危险性。JDK 19之后添加的改进包括MemorySegment和MemoryAddress抽象的统一,增强的MemoryLayout层次结构,以及将MemorySession拆分为Arena和SegmentScope,以促进跨维护边界的段共享。

switch语句和表达式的模式匹配

switch语句和表达式的模式匹配可以实现复杂的面向数据的查询的简洁和安全的表达式。在JDK20中将实现与记录模式的持续共同发展,允许根据经验和反馈进行持续改进。本次更新switch模式匹配的主要变化包括switch标签的简化语法,以及对switch语句和表达式中泛型模式和记录模式的类型参数推断的支持。此外,如果在运行时没有应用开关标签,则枚举类上的穷举切换现在会抛出MatchException,而不是不兼容ClassChangeError。

写在最后

JDK20在19的基础上更新了结构化并发、记录模式、部函数和内存API等,也加入了一些新的特性。但是本版本官方只短期支持6个月,下个稳定版本JDK21会在今年9月发布。哈哈,不得不说甲骨文公司对于JDK的商业化更新还是比较执着。

路漫漫其修远兮,吾将上下而求索
有兴趣的小伙伴也可以加我:
订阅号 ‘架构集结号’
知识星球 ‘Coding社区’

Jenkins 也宣布弃用 JDK 8,你还在用JDK8吗

❤️作者主页:小虚竹

❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆

❤️技术活,该赏

❤️点赞 👍 收藏 ⭐再看,养成习惯

PC端左侧加我微信,进社群,有送书等更多活动!

前言

虚竹哥今天又来分享干货啦,今天分享一个关于Jenkins 的消息。在分享之前,来个福利预告:认真看完文章,文末送本好书。

Java 之父有话说

Java 之父 James Gosling 先前称,开发者应尽快弃用 JDK 8,可以选择 JDK 17 LTS, 因为后者在各个方面都带来了巨大的改进。

Jenkins 宣布

开源 Devops 工具 Jenkins 宣布:从 6 月 28 日发布的 Jenkins 2.357 和即将发布的 9 月 LTS 版本开始,Jenkins 最低需要 Java 11。

Jenkins 最初称为 Hudson ,是一款老牌持续集成工具,至今已创立十多年。自 2005 年成立以来,Jenkins 项目经历了多次 Java 迁移。目前从 Java 8 到 Java 11 的迁 移与 Jenkins 项目中的迁移历史是一致的。

开发者 Basil Crow 在博客中解释称:Jenkins 项目在短期内可能会保留在 Java 8 上,但出于几个原因,这样做是弊大于利。首先,Jenkins 项目使用的许多关键第三方库(例如,Jetty、JGit、Spring Framework 和 Spring Security)开始需要更新版本的 Java,而停留在 Java 8 上会使 Jenkins 项目无法从上游项目接收安全更新。

此外,新版本 Java 对 Java 平台进行了显着的运行时改进。例如,LinkedIn 在迁移到 Java 11 时看到了显着的性能改进,而 Adoptium 在迁移到 Java 11 时看到了显着的内存使用改进(在 Jenkins 上同样如此),而最近的 Java 运行时则提供了许多对垃圾收集的改进。

最后,保持 Java 的当前版本有助于 Jenkins 吸引和留住开发人员。

目前,官方的 Jenkins Docker 镜像 已经基于 Java 11 好几个月了,Java 8 暂时还可作为备选,Java 17 可在预览模式下使用。但是从 Jenkins 2.357 开始,Java 8 映像就将被淘汰,Java 17 映像从预览版过渡到一般可用性 (GA)。

事实上 Jenkins 团队更推荐用户使用 Java 17 :

Jenkins 对 Java 17 的支持是全新的,不过它还没有达到在 Jenkins 社区内普遍采用的阶段。

尽管如此, 我们的经验是 Java 17 是比 Java 11 更可靠的选择**,**我们可以自信地说,从 Java 11 迁移到 Java 17 不会像从 Java 8 迁移到 Java 11 那样痛苦。

相关链接:https://www.jenkins.io/blog/2022/06/28/require-java-11/


粉丝福利

《Java核心技术》第 12 版根据 最新的 LTR 版本 Java 17 全面更新,涵盖了 Java8-17 全部版本的特性,相应调整了部分内容结构,同时延续之前版本的优良传统,利用清晰明了的示例加以解释,并提供了全部示例代码,以便读者学习和灵活应用。它将续写从前的辉煌,使开发者能及时跟上 Java 前进的步伐。
新书上市,在各大平台本书均有大力度的折扣,全网低价,还不快闭眼入手!

虚竹哥直接送两本《JAVA核心技术》最新版本:原书第12版 卷1 (附带有虚竹哥的推荐小册)
《Java核心技术》读后感

如何免费获得该书呢?

  • 本文优质评论一条,且该评论点赞数是最高的,获得《JAVA核心技术》一本!
  • 参与评论送书:随机抽取一位幸运读者,送一本《JAVA核心技术》。
  • 例如2条评论点赞数并列第一的,以评论的时间谁早!
  • 统计截止时间:2022/08/08 21:59:59

以上是关于JDK20又来了!你还在用JDK8么?的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins 也宣布弃用 JDK 8,你还在用JDK8吗

Jenkins 也宣布弃用 JDK 8,你还在用JDK8吗

Java 12 来了, 你还在用 Java 8 吗?

JDK11都发布了,你还在用JDK6?

spring4必须jdk1.8么

连接池性能比较,你还在用C3P0么