🌈🌈🌈🌈🌈🌈🌈🌈
欢迎关注公众号(通过文章导读关注:【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 应用可以通过执行外部函数和安全访问外来内存实现调用本地库和处理本地数据