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

2023-11-05

前言

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社区’

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDK20又来了!你还在用JDK8么? 的相关文章

  • Android 中的 java.util.Observable 是线程安全的吗?

    Android 中的 java util Observable 是线程安全的吗 这文档 http developer android com reference java util Observable html说只有deleteObser
  • ListView:防止视图回收

    我有一个使用回收视图的 ListView 我试图阻止视图被回收 所以我使用 setHasTransientState android support v4 view ViewCompatJB setHasTransientState Vie
  • 我应该使用 JDBC getNString() 而不是 getString() 吗?

    我们正在构建一个由 Oracle 数据库支持的 Java 应用程序 我们使用 JDBC 驱动程序 访问该数据库ojdbc6 jar and orai18n jar 数据库模式主要使用以下方式存储文本列NVARCHAR2数据类型 The JD
  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • Apache Commons VFS - 无法解析文件

    VFS 方法无法处理此 URI jboss server temp dir local outgoing配置在jboss beans xml这是决心 C Download jboss eap 5 1 1 server default tmp
  • 限制 JPQL 中的结果数量

    如何限制从数据库检索结果的数量 select e from Entity e I need only 10 results for instance 您可以尝试像这样给出 10 个要显式获取的结果 entityManager createQ
  • 为什么我的 @OneToMany 属性出现主键违规?

    我有一个实体 Entity public class Student GeneratedValue strategy GenerationType AUTO Id private long id OneToMany private Set
  • Java - toString 到 Color

    我一整天都在努力解决这个问题 基本上我做了一个 for 循环 将条目添加到数组列表中 其中一项是 颜色 变量 我已经用过random nextInt为颜色构造函数的红色 绿色和蓝色部分创建新值 我还设置了一个toString方法 这样我就可
  • Java时间转正常格式

    我有 Java 时间1380822000000 我想转换为我可以阅读的内容 import java util Date object Ws1 val a new Date 1380822000000 toString 导致异常 warnin
  • 使用 Hibernate Criteria 过滤 Map 中的键和值

    我有以下持久类 public class Code ElementCollection targetClass CodeValue class MapKeyClass CodeProperty class JoinTable name co
  • 使用 equals 方法比较两个对象,Java

    我有一个对象数组 我想将它们与目标对象进行比较 我想返回与目标对象完全匹配的对象的数量 这是我的计数方法 public int countMatchingGhosts Ghost target int count 0 for int i 0
  • 在Java中将日期“2020-05-22T12:51:20.765111Z”解析为Instant [重复]

    这个问题在这里已经有答案了 如何解析 2020 05 22T12 51 20 732111Z Java 中的 Instant I used LocalDateTime parse startTime DateTimeFormatter of
  • Java 中通用方法参数的 getClass()

    以下 Java 方法无法编译
  • 将 PropertyPlaceholderConfigurer 中的所有属性注入到 bean 中

    我有一个PropertyPlaceholderConfigurer加载多个属性文件 我想通过配置 XML 将合并的属性映射注入到 Spring Bean 中 我可以这样做以及如何做 您只需创建一个属性 bean 并将其用于您的Propert
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队
  • 使用 Commons 或 Guava 将文本文件转换为 Java Set

    我想将文件中的每一行加载到 HashSet 集合中 有没有一种简单的方法可以做到这一点 怎么样 Sets newHashSet Files readLines file charSet 使用番石榴 参考 文件 readLines http
  • 设置 Firefox 配置文件以使用 Selenium 和 Java 自动下载文件

    我想使用 Selenium WebDriver 和 Java 验证文件下载 要下载的文件为 PDF 格式 当 WebDriver 单击 AUT 中的 下载 链接时 Firefox 将打开以下下载确认窗口 我希望 Firefox 自动下载文件
  • while循环只执行一次

    我很难弄清楚为什么 while 循环实际上不会循环 它运行一次并停止 import java util public class mileskm public static void main String args Scanner inp
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles
  • Swing:创建可拖动组件...?

    我在网上搜索了可拖动 Swing 组件的示例 但我发现示例不完整或不起作用 我需要的是一个摇摆组件那可以是dragged通过鼠标 在另一个组件内 被拖拽的时候 应该已经 改变它的位置 而不仅仅是 跳 到目的地 我很欣赏无需非标准 API 即

随机推荐

  • Redraiment的走法

    题目描述 题目描述 Redraiment是走梅花桩的高手 Redraiment总是起点不限 从前到后 往高的桩子走 但走的步数最多 不知道为什么 你能替Redraiment研究他最多走的步数吗 样例输入 6 2 5 1 5 4 5 样例输出
  • LabVIEW结合神经网络在图像目标检测中的应用

    神经网络在图像识别中的应用 摘要 随着大数据时代的快速发展 图像识别技术的重要性与日俱增 大量的数据集和强大的服务器计算能力 更是如虎添翼 相比传统的图像分类方法已经无法满足用户对于对图像分类灵活性和速度上的要求 甚至在复杂环境下 传统算法
  • Mac下安装Metasploit

    今天鼓捣Metasploit在Mac上的安装 首先下载pkg文件 http osx metasploit com metasploitframework latest pkg 接着 cd opt metasploit framework b
  • picker多列可选

    npm install usui save import usui from usui Vue use usui this usui picker label 1 value 1 label 2 value 2 label 3 value
  • androidstudio 导入git问题 is under Git, but is not registered in the Settings

    从git项目第一次导入数据到本地可能会出现以上问题 1 针对此图 首先选择Configure 2 针对上图选择加号 然后选择指定的项目路径以及类型 点击OK apply
  • Java案例:实现杨辉三角

    Java案例 实现杨辉三角 前言 本篇文章我将讲述使用Java实现杨辉三角的实现 而且可以根据用户输入的正整数输出指定行数的杨辉三角 一 杨辉三角是什么 杨辉三角 是二项式系数在三角形中的一种几何排列 中国南宋数学家杨辉1261年所著的 详
  • dockerfile

    当我在dockerfile里面想安装torchvision WORKDIR vision 0 8 1 WORKDIR相当于cd 进入文件夹执行 RUN python3 setup py install user 想要安装时 报错 Trace
  • LayUi 折叠表格

    表格会以代码的形式写到里面 大家可以将代码copy到项目中新建一个HTML尝试 下面用到的JS都会进行展示JS的内容 可以完全还原我当时的环境 lt include common layout html gt lt header gt
  • jQuery中的.bind()、.live()和.delegate()之间区别分析

    DOM树 首先 可视化一个HMTL文档的DOM树是很有帮助的 一个简单的HTML页面看起来就像是这个样子 事件冒泡 又称事件传播 当我们点击一个链接时 其触发了链接元素的单击事件 该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行
  • 机器学习-KNN近邻算法

    参看文章 机器学习 周志华 机器学习实战 Peter Harrington 统计学习方法 李航 算法介绍 k近邻学习是一种常用的监督学习方法 其工作机制如下 给定测试样本 基于某种距离度量 曼哈顿距离 欧氏距离 切比雪夫距离 Lp距离 Mi
  • thinking 程序员思维习惯 .

    程序员 天职 gt 用计算机解决复杂 重复性 精确性问题 创造性 gt 养成一遇到问题 麻烦 应通过google相关的答案或 工具来解决 或写程序来解决的方法的思维习惯 case 导数程序 多库之间的同步 gt add UI 技术人员使用
  • 软件安全性测试

    软件安全性是一个广泛而复杂的主题 每一个新的软件总可能有完全不符合所有已知模式的新型安全性缺陷出现 要避免因安全性缺陷问题受各种可能类型的攻击是不切实际的 在软件安全测试时 运用一组好的原则来避免不安全的软件上市 避免不安全软件受攻击 就显
  • 如何在pycharm上安装tensorflow

    TensorFlow 是一个基于数据流编程 dataflow programming 的符号数学系统 被广泛应用于各类机器学习 machine learning 算法的编程实现 其前身是谷歌的神经网络算法库DistBelief Tensor
  • CMake命令之add_custom_comand 和 add_custom_target

    一 背景 在很多时候 需要在cmake中创建一些目标 如clean copy等等 这就需要通add custom target来指定 而add custom command则可以用来完成对add custom target生成的target
  • 一个变量越界导致破坏堆栈的bug

    前一段时间在商用系统上出现了core dump 原因是由于一个局部变量写越界导致堆栈被破坏了 在这里 我把这个bug分享一下 希望给需要的朋友一点帮助 简化的代码如下 typedef struct A void func1 char p v
  • 投资还是创业?我以亲身经验告诉你真相

    编者按 本文作者徐薇 前创新工场投资总监 现创业中 做女性生活方式社区电商 本文原载于徐薇的个人公众号 人生异想 life essay 授权 36 氪转载 欢迎交流讨论 最近真是很巧 有好几个朋友在考虑做新的事业选择 来找我聊 聊完之后 大
  • 腾讯云学生服务器2核2G和4核8G申请详细流程

    腾讯云学生服务器2核2G和4核8G申请详细流程 学生机申请流程 腾讯云学生服务器优惠活动 轻量应用服务器2核2G学生价30元3个月 58元6个月 112元一年 轻量应用服务器4核8G配置191 1元3个月 352 8元6个月 646 8元一
  • ymPrompt消息提示组件 2.0版

    组件功能介绍 1 调用方式简单 直接使用ymPrompt alert 的方式调用 传入相应的参数即可 2 兼容IE6 0 FF1 5 Opear9 在Opear下显示有一个小缺陷 兼容HTML4 XHTML1 0页面渲染模式 3 完全的CS
  • 图像超分辨率重建原理学习

    原文链接 https blog csdn net gwplovekimi article details 83041627 目录 超分辨率 Super Resolution SR 传统的图像超分辨率重建技术简介 基于插值的图像超分 基于重建
  • JDK20又来了!你还在用JDK8么?

    文章目录 前言 JDK 20发布 JDK20下载 JDK 20新特性 矢量API 虚拟线程 第二次优化 结构化并发 Scoped values 作用域值 记录模式 第二次优化 外部函数和内存API switch语句和表达式的模式匹配 写在最