Java 20 新特性—概述

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

Java 20,于 2023-03-21 日发布。

JEP 429:作用域值(第一次孵化)

在多线程环境下,正确管理上下文数据是一项有挑战的事情,传统的解决方案(如 ThreadLocal)在某些场景下并不是很适用或者效率比较低下。Java 20 引入作用域值(Scoped Values),它可以在线程内和线程间共享不可变的数据,并且优于线程局部变量。

Scoped Values 是一种新的机制,它主要用于在线程或虚拟线程中安全地传递和访问数据,它允许在代码的不同部分之间传递信息,例如,在多线程应用中从父线程向子线程传递数据。它的引入解决了两个问题:

  1. 线程局部存储的限制:ThreadLocal 可能会导致内存泄漏,并且不适合于虚拟线程。Scoped Values 提供了一种更安全和高效的方式来处理线程局部数据。
  • 上下文传递的复杂性:在复杂的多线程环境中传递上下文信息通常都很复杂。Scoped Values 简化了这一过程。

目前该特性还处于孵化阶段。

JEP 432:Record 模式(第二次预览)

Record 模式 是 Java 19 作为预览特性引入的,它允许在 instanceof 表达式中使用记录模式,这样我们就可以在单个 instanceof 检查中同时测试一个对象的类型并提取其组件。

该特性与Java 14 中引入的记录类(Record Classes)结合使用,提供了一种更直观、更简洁的方式来处理数据对象。

此次改进:

  • 添加对通用记录模式类型参数推断的支持,
  • 添加对记录模式的支持以出现在增强语句的标题中for
  • 删除对命名记录模式的支持。
Java 版本更新类型JEP更新内容
Java 19第一次预览JEP 405引入 Record 模式作为预览特性
Java 20第二次预览JEP 432优化 Record 模式

JEP 433:模式匹配的 Switch 表达式(第四次预览)

模式匹配的 Switch 表达式首次在 Java 17 中作为预览特性引入,它允许在 switch 语句和表达式中使用模式匹配,这样就直接在 case 标签中匹配对象的类型。

Java 版本更新类型JEP更新内容
Java 17第一次预览JEP 406引入模式匹配的 Swith 表达式作为预览特性。
Java 18第二次预览JEP 420对其做了改进和细微调整
Java 19第三次预览JEP 427进一步优化模式匹配的 Swith 表达式
Java 20第四次预览JEP 433

JEP 434:外部函数与内存 API(第二次预览)

外部函数和内存API 是 Java 17 作为预览特性引入的,它的核心在于提供一种安全、高效的方法来访问本地代码(例如 C 或 C++ 库)和内存。主要是通过两个组件实现的:

  1. Foreign Function Interface (FFI): 允许 Java 代码直接调用非 Java 代码,特别是用 C/C++ 编写的代码。这可以通过定义一种类型安全的方式来实现,同时避免了 Java 本地接口(JNI)的复杂性和开销。
  2. Foreign Memory Access API:提供了一种安全的方法来访问不受 JVM 管理的内存。这对于需要操作系统级别内存操作或者直接与外部设备交互的应用程序非常重要。

JDK 20 中是第二次预览,这次的改进包括:

  • MemorySegment 和 MemoryAddress 抽象的统一
  • 增强的 MemoryLayout 层次结构
  • MemorySession拆分为ArenaSegmentScope,以促进跨维护边界的段共享。
Java 版本更新类型JEP更新内容
Java 14孵化器JEP 370引入了外部内存访问 API
Java 15第二孵化器JEP 383优化外部内存访问 API
Java 16孵化器JEP 389引入了外部链接器 API
Java 16第三孵化器JEP 393继续优化
Java 17孵化器JEP 412引入了外部函数和内存 API
Java 18二次孵化器JEP 419在此版本中,API再次进行了一些改进和扩展。
Java 19第一次预览JEP 424
Java 20第二次预览JEP 434对 API 进行了一些改进

JEP 436:虚拟线程(第二次预览)

虚拟线程是 Java 19 作为预览特性首次引入,其主要目的是解决 Java 并发编程模型的复杂性,使其更加简单和高效。它解决了两个问题:

  • 解决并发编程复杂性:传统的线程模型在处理大量并发任务时复杂且效率低下。虚拟线程简化了并发编程,因为它们更加轻量级,并且易于管理。
  • 资源限制:操作系统线程是有限的资源,大量线程的创建和管理可能会导致性能下降和资源耗尽。虚拟线程通过减轻这些限制,使得创建和管理大量线程成为可能。
Java 版本更新类型JEP更新内容
Java 19第一次预览JEP 425引入虚拟线程作为预览特性
Java 20第二次预览JEP 437优化虚拟线程

JEP 437:结构化并发(第二次孵化)

结构化并发是在 Java 19 中孵化的,它的主要目的是使并发操作更容易管理和维护。它通过引入一种称为“结构化并发”的概念来实现,该概念强调将并发任务组织在一起,使它们的生命周期更加清晰和可控。

Java 版本更新类型JEP更新内容
Java 19第一次孵化JEP 428引入结构化并发作为孵化特性
Java 20第二次孵化JEP 437优化增强结构化并发

JEP 438:向量 API(第五次孵化)

向量 API 是在 Java 16 中作为孵化器引入的,其目的是提供一个表达式丰富、编译时性能可预测的平台,用于编写复杂的向量计算,以充分利用现代处理器的 SIMD(单指令多数据)指令。它目前是第五次孵化。

Java 版本更新类型JEP更新内容
Java 16第一次孵化JEP 338引入向量 API 作为孵化器
Java 17第二次孵化JEP 414对 API 进行了改进,增加了性能优化和新的功能。
Java 18第三次孵化JEP 417进一步增强 API,改进了性能和易用性。
Java 19第四次孵化JEP 426进一步增强 API
Java 20第五次孵化JEP 438进一步增强 API
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值