JDK21新特性探秘

2024-01-04

????????????????????????????????
欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送
发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景 中间件系列笔记 编程高频电子书
文章导读地址: 点击查看文章导读!
????????????????????????????????

JDK21探秘

在这里插入图片描述

Java 21 已经发布,是下一个长期支持的版本,包括了数十项的优化,更快的垃圾回收器,更好的性能和稳定,所有这些特性和改进都将为 Java 开发者提供更高效、更灵活、更可靠的开发环境和更好的用户体验,下边来介绍一下主要的特性:

  • Record Patterns

Record Patterns 用于改进数据导航和处理,这么说可能不太理解,如下代码对比,第一个方法是没有使用 Record Patterns,第二个使用了:

record Point(int x, int y) {}

static void printSumWithoutPatternMatching(Object obj) {
    if (obj instanceof Point p) {
        int x = p.x();
        int y = p.y();
        System.out.println(x+y);
    }
}

static void printSumWithPatternMatching(Object obj) {
    if (obj instanceof Point(int x, int y)) {
        System.out.println(x+y);
    }
}

也就是可以直接将实例中的属性解构出来,也可以嵌套,如下代码:

record Point(int x, int y) {}
enum Color { RED, GREEN, BLUE }
record ColoredPoint(Point p, Color c) {}
record Rectangle(ColoredPoint upperLeft, ColoredPoint lowerRight) {}


static void printColorOfUpperLeftPoint(Rectangle r) {
    if (r instanceof Rectangle(ColoredPoint(Point p, Color c),
                               ColoredPoint lr)) {
        System.out.println(c);
    }
}
  • Pattern matching for switch expressions and statements

switch 表达式和语句的模式匹配,这个特性可以根据多种模式对表达式进行测试,每一个匹配都可以是一个具体的动作,这样使得复杂的数据查询更加简单,并且很简洁,代码如下:

static void testStringNew(String response) {
    switch (response) {
        case null -> { System.out.println("So quiet Today?"); }
        case String s
        when s.equals("YES") -> {
            System.out.println("You got it");
        }
        case String s
        when s.equalsIgnoreCase("NO") -> {
            System.out.println("Shame");
        }
        case String s -> {
            System.out.println("Sorry?");
        }
    }
}

并且给 switch 新添加了对 null 的判断形式,可以判断如果结果为 null,也执行对应的表达式

还引入了 when 关键字来对 String 字符串进行匹配

  • Sequenced Collection

JDK 21 引入了新的集合类型,即有序集合,提供了可以让开发人员确定顺序的通用接口类型,并且通过 Sequenced Collection,开发人员不仅可以定义第一个元素和最后一个元素,还可以定义第一个元素和最后一个元素之间的所有元素的前继和后继元素,并且支持正向和反向处理元素

新的集合类型继承关系如下:

在这里插入图片描述

  • String Templates

这是一个预览特性,提供了一种新的字符串拼接的方式,将字符串文本和表达式混合在一起,可以使字符串的构造更加直观简洁,减少 + 操作符、StringBuilder 的复杂性

使用前后对比如下:

// Java 21 之前Hello+ name +, welcome to the China!// Java 21 之后Hello {变量名} welcome to the China!
  • Virtual Threads

JDK 21 已经引入了虚拟线程,通过虚拟线程可以在不分配很多资源和空间的情况下快速完成任务的处理

由于操作系统的线程是有限的,因此平台创建的线程也是有限的,通过虚拟线程,在理论上,可以创建无限数量的虚拟线程,并且随着当今高吞吐量应用的要求进行扩展

  • Generational ZGC

Java 21 给 ZGC 带来了性能上的提升,此更新扩展了 ZGC 以维护不同代的对象,通过这个更新,ZGC 可以更频繁地去收集年轻的对象,因为他们更容易照升夕死,因此使用分代的 ZGC 可以减少 CPU 的需求和内存开销,避免内存分配时的停顿

  • Vector API

这个 API 可以使矢量计算计算的表达式在运行时可靠的编译成所使用 CPU 架构上的最佳矢量指令

  • Foreign Function & Memory API (3rd preview)

第三版预览,在 JDK19 和 JDK20 中已经提前预览了,使 Java 应用可以通过执行外部函数和安全访问外来内存实现调用本地库和处理本地数据

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

JDK21新特性探秘 的相关文章

  • Mockito 在调用参数数量可变的方法时使用参数匹配器

    我试图在对具有可变数量参数的方法的调用中使用参数匹配器 Java 中的东西 没有成功 我的代码如下 我还将列出我尝试用来完成此工作的所有行 import static org mockito Mockito public class Met
  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • 使用架构注册表对 avro 消息进行 Spring 云合约测试

    我正在查看 spring 文档和 spring github 我可以看到一些非常基本的内容examples https github com spring cloud samples spring cloud contract sample
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐

  • 天翼运行高校云盘在线扩容

    天翼云文档地址 https www ctyun cn document 10027696 10169558 1 输入 growpart命令 检查此云主机是否已安装growpart扩容工具 若出现图中回显信息 则说明已经安装 无需手动安装 注
  • 说说Java对象创建过程

    Java对象创建过程主要包括以下几个步骤 分配内存 Java虚拟机 JVM 为新对象分配内存 这通常涉及到在堆内存中分配一块足够大的空间来存储对象 构造函数调用 在分配内存后 Java对象的构造函数被调用 这是Java对象的一个特殊方法 它
  • 任意版本JLink驱动官方下载详解

    任意版本JLink驱动官方下载详解 csdn song123 于 2023 09 21 09 19 07 发布 阅读量1 5k 收藏 3
  • 看这里!分享3个有关iPhone照片恢复的好用方法!

    手机照片可以记录下我们所经历的点点滴滴 为我们留下宝贵的生活记忆 因此 我们应该珍惜并妥善保管这些照片 但在使用手机的过程中难免会发生意外 手机照片丢失了怎么办 别着急 今天 小编将为大家介绍有关iPhone照片恢复的3种简单方法 有需要的
  • openEuler NFS多路径

    简介 网络文件系统 NFS 是一种分布式文件系统协议 最初由 Sun Microsystems Sun 于 1984 年开发 允许NFS客户端上的用户通过计算机网络访问NFS服务端上文件 随着NFS服务广泛应用于金融 EDA AI 容器等行
  • 105.mysql8.0.30之后REDO日志的管理有所不同-#innodb_redo 目录

    1 mysql8 0 30之后REDO日志的管理有所不同 innodb redo 目录 1 mysql8 0 30之前 redo日志由两个参数管理 innodb log file size 100M innodb log files in
  • brew 安装使用 mysql、redis、mongodb

    在 Mac 生态中 brew 真是个万能神器 今天就来介绍一下怎么使用 brew 安装 mysql redis mongodb 以及如何使用 brew 启动 关闭 重启这些服务 前言 brew 常用命令 查看brew的版本 brew v 更
  • 基于SpringBoot的社区医院管理系统

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 基于SpringBoot的社区
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位
  • java SSM图片管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一 源码特点 java SSM图片管理系统是一套完善的web设计系统 系统采用SSM框架进行设计开发 spring springMVC mybatis 对理解JSP java编程开发语言有帮助 系统具有完整的源代码和 数据库 系统主要采用B
  • Linux习题2

    解析 虚拟内存是计算机系统内存管理的一种技术 它使得应用程序认为它拥有连续可用的内存 使得每个进程看到的内存空间一致 解析 所谓系统调用 就是内核提供的 功能十分强大的一系列的函数 这些系统调用是在内核中实现的 再通过一定的方式把系统调用给
  • 基于WEB的教学辅助系统的设计与实现

    随着计算机和网络技术的飞速发展 人们传统的生活 工作和学习方式正在发生深刻变革 长久以来 各行各业的教学以传统的课堂讲授为主 效果受到诸多限制 因此 随着在线辅助教学及行业信息化的普及 构建信息交互平台的重要性日益凸显 为了提高教育质量 充
  • 可狱可囚的爬虫系列课程 09:通过 API 接口抓取数据

    前面已经讲解过 Requests 结合 BeautifulSoup4 库抓取数据 这种方式在抓取数据时还是比较方便快捷的 但是这并不意味着所有的网站都适合这种方式 并且这也不是抓取数据的最快方式 今天我们来讲一种更快速的获取数据的方式 通过
  • SSM知识点铺垫--Http工作原理?

    HTTP Hypertext Transfer Protocol 是一种用于在网络上传输超文本的协议 它是一个无状态的协议 意味着每次请求之间没有保留状态 HTTP的工作原理涉及客户端和服务器之间的通信 主要包括请求 Request 和响应
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • CRM软件对企业发展起着哪些作用?CRM的功能解析

    虽然不少科技成果昙花一现 但CRM管理系统作为销售和营销领域的核心技术 已经牢牢占据了不可撼动的地位 拥有一个部署得当的CRM系统能为企业带来诸多好处 它可以跟踪和管理销售人员与潜在 现有客户的所有互动和沟通 并帮助他们识别出需要重点培养或
  • 基于SpringBoot的旅游网站281

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 基于SpringBoot的旅游
  • SpringIOC之support模块DefaultMessageSourceResolvable

    博主介绍 全网粉丝5W 全栈开发工程师 从事多年软件开发 在大厂呆过 持有软件中级 六级等证书 可提供微服务项目搭建与毕业项目实战 博主也曾写过优秀论文 查重率极低 在这方面有丰富的经验 博主作品 Java项目案例 主要基于SpringBo
  • SpringBoot多模块(module)项目搭建

    https www cnblogs com zfyang2429 p 10801959 html
  • JDK21新特性探秘

    欢迎关注公众号 通过文章导读关注 11来了 及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景 中间件系列笔记 和 编程高频电子书 文章导读地址 点击查看文