java20有哪些重要的特性?

提问者:帅平 问题分类:微服务
java20已经发布有一段时间了,java20有哪些重要的特性?
5 个回答
沐叶清风
沐叶清风
结构化并发
结构化并发 ( Structured Concurrency ) 具有简化多线程编程的作用,并将在不同线程中运行的多个任务视为一个工作单元。简化了错误处理等功能后,提高了可靠性并增强了可观察性。自从在 JDK 19 中孵化以来,唯一的变化是,StructuredTaskScope 已经被更新,以支持在任务范围内创建的线程对范围值的继承。这个功能正在被重新孵化。
 
 
外部函数和内存 API。它通过引入一个 API,让 Java 程序可以与 Java 运行时之外的代码和数据进行互操作。该 API 使 Java 程序能够调用本地库和处理本地数据,而不会像 JNI(Java Native Interface)那样脆弱和危险。该 API 以前在 JDK 17 和 18 版本中进行过孵化,并在 JDK 19 中进行过预览。自 JDK 19 以来增加的改进包括统一 MemorySegment 和 MemoryAddress 抽象,增强 MemoryLayout 层次结构,以及将 MemorySession 拆分为 Arena 和 SegmentScope 等。
 
Switch 语句和表达式的模式匹配功能之前在 JDK 17、JDK 18 和 JDK 19 中进行过预览,第四次预览将实现与 Record Patterns 的持续共同演进。自第三次预览以来,switch 的模式匹配的主要变化包括简化 switch 标签的语法,以及支持 switch 语句和表达式中通用模式和记录模式的类型参数的推断。
发布于:1年前 (2023-04-07) IP属地:四川省
温柔刀下鬼
温柔刀下鬼
虚拟线程
虚拟线程(Virtual Threads)在 JDK 20 中进入第 2 次预览阶段。它是 JDK 实现的轻量级的线程,可以减少编写、维护和观察高吞吐量并发应用程序的工作。据 Oracle 称,这种能力将从根本上改变 Java 应用的扩展方式。
 
说人话:很像是go语言里的协程。正常来说操作系统的线程和Java线程是一对一的,引入虚拟线程后,一个Java线程可以处理很多的虚拟线程可以减少线程上下文切换开销。因为协程/虚拟线程的上下文切换成本很低
发布于:1年前 (2023-04-07) IP属地:四川省
原来无话可说
原来无话可说
向量API
在 JDK 20 中,最新的向量 API 提案直到几周前才正式加入。向量 API 用来表达向量计算,在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令。这将实现优于同等标量计算的性能。向量 API 之前已经在 JDK 16、JDK 17、JDK 18 和 JDK 19 中得到了孵化,因此这一次是向量 API 进入第 5 次孵化阶段。
 
说人话:什么是向量API,简单来说,正常情况下我们使用的计算机是64位的,但是有时计算机可能需要同时处理多项任务时就意味着需要更多的位数,这时候我们就可以通过向量来进行扩展
发布于:1年前 (2023-04-07) IP属地:四川省
丶殇
丶殇
JEP 432:记录模式(Record Patterns,第二轮预览)
记录模式 ( Record Patterns ) ,目前处于第二个预览版本,可对 record 的值进行解构,用以增强 Java 编程语言。Record patterns 和 Type patterns 可以嵌套,以实现数据导航和处理的声明性、强大和可组合的形式。目标包括扩展模式匹配以表达更复杂的、可组合的数据查询,并且不改变类型模式的语法或语义。
发布于:1年前 (2023-04-07) IP属地:四川省
白鸥掠海
白鸥掠海
JEP 429:作用域值(Scoped Values,孵化阶段)
是一个处于孵化阶段的 API,可以在线程内和跨线程共享不可变的数据。与线程本地变量相比,这些变量更受欢迎,特别是在使用大量的虚拟线程时。一个作用域值允许数据在大型程序的组件之间安全有效地共享,而不需要借助方法参数。目标包括易用性、可理解性、稳健性和性能。
 
说人话:听起来像是跨线程版的ThreadLocal
ScopedValue是一种类似ThreadLocal的线程内/父子线程传递变量的更优方案
具体用法可以看这篇文章 https://blog.csdn.net/XiumingLee/article/details/129416411
发布于:1年前 (2023-04-07) IP属地:四川省
我来回答