JDK21新特性探秘

🌈🌈🌈🌈🌈🌈🌈🌈
欢迎关注公众号(通过文章导读关注:【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 swhen s.equals("YES") -> {System.out.println("You got it");}case String swhen 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 应用可以通过执行外部函数和安全访问外来内存实现调用本地库和处理本地数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/319903.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不想root,但想远程控制vivo手机?这个方法不用root也能做到

远程控制vivo手机不用root!今天给大家讲讲免Root情况下,笔记本电脑如何远程控制vivo手机。 在电脑和手机都安装AirDroid,这是免Root的关键。 下载AirDroid个人版 | 远程控制安卓手机软件下载下载AirDroid个人版进行文件传输和管理、远程控制安…

配网故障定位技术的研究与实现:提高配网运行效率的必要手段

随着电力系统的不断发展,配电网作为电力系统的重要组成部分,其安全性和稳定性对于整个电力系统的运行具有重要意义。然而,配电网在运行过程中,由于各种原因导致的故障事件时有发生,严重影响了配网的运行效率和供电质量…

python下载wheel并安装

一、查看当前python 版本兼容信息 pip debug --verbose C:\python\37>pip debug --verbose WARNING: This command is only meant for debugging. Do not use this with automation for parsing and getting these details, since the output and options of this command…

C++面向对象编程与泛型编程(GP)

C既支持面向对象编程,又支持泛型编程 1.面向对象编程 将数据结构与处理方法(容器与算法)组成对象封装在一个类中,通过类的封装隐藏内部细节,可以使用继承,多态等方法。 注意:list容器本身带有…

unity学习笔记----游戏练习04

一、开发阳光生产功能 向日葵的生产过程需要动画和时间 1.生产动画 选中Sunflower,然后选中窗口再选中 创建新的剪辑开始制作动画,向日葵生产动画的过程是一个从暗到亮然后持续一段时间再到暗的过程。因此只需要在对应的时间改变颜色即可。 为了保证是…

时间序列平稳性相关检验方法

理解平稳性 一般来说,平稳时间序列是指随着时间的推移具有相当稳定的统计特性的时间序列,特别是在均值和方差方面。平稳性可能是一个比较模糊的概念,将序列排除为不平稳可能比说序列是平稳的更容易。通常不平稳序列有几个特征: …

Wpf 使用 Prism 实战开发Day08

备忘录页面设计 1.效果图 一.布局设计跟第7章节一样&#xff0c;只是内容方面发生变化&#xff0c;其他样式都一样。直接把代码粘出来了 MemoView.xaml 页面代码 <UserControl x:Class"MyToDo.Views.MemoView"xmlns"http://schemas.microsoft.com/winfx/2…

MQTT基础下载使用

1.下载MQTT(MQTT官网) 下载完后在bin目录下启动cmd 控制台输入emqx start&#xff0c;注意&#xff0c;此时控制台是没有反应的&#xff0c;就回你个D&#xff1a;\EMQX。其实已经打开了。 打开桌面上的MQTTX 并新建连接 这是测试的数据 我订阅了一个test1的订阅 并且我发布…

百度自由DIY小程序源码:PHP+MySQL组合开发 带完整的搭建教程

随着移动互联网的快速发展&#xff0c;小程序已成为企业与用户互动的重要平台。然而&#xff0c;对于许多中小企业和开发者来说&#xff0c;从零开始开发一款小程序需要投入大量的时间和资源。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a; 1.高度自定义&…

js Array

var cars ["Saab", "Volvo", "BMW"]; 属性length - length获取到的是数组的最大索引1 向数组的最后一个位置添加元素 //语法&#xff1a;数组[数组.length] 值; arr[arr.length] 70; cars.length //3 - 数组的方…

12V直流电机驱动芯片GC9110T 为什么可以可替代LG9110S应用于摄像机等产品上呢

GC9110T是一款12V直流电机驱动芯片&#xff0c;为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用了驱动一个直流电机或者使用两颗来驱动一个步进电机。GC9110T是GC9110&#xff08;低压6V驱动&#xff09;的12V升级…

力扣hot100 二叉树展开为链表 递归 特殊遍历

&#x1f468;‍&#x1f3eb; 题目地址 &#x1f469;‍&#x1f3eb; 参考题解 &#x1f60b; 将左子树插入到右子树上 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* …