java21特性学习

jdk21下载地址

JDK21文件

JDK21是javaSE平台最新的长期支持版本。

Java SE

Java Archive | Oracle

JDK21版本说明

JDK 21 Release Notes, Important Changes, and Information

JavaSE 版本字符串格式

Version-String Format


JavaSE平台采用了基于时间的发布模型,JDK每六个月发布一次。

自JDK10及以后,版本字符串的格式反映了JavaSE平台基于时间的发布模型。$FEATURE.$INTERIM.$UPDATE.$PATCH .

$FEATURE为每个功能发布增加的版本号。该功能发布包含新的功能和对现有功能的更改,由JavaSE平台规范指定。版本号每六个月递增一次。例如,2018年3月v的版本号是10,2018年9月v的版本号是11,等等。

$INTERIM为每个临时版本添加的版本号,其中包含错误修复和增强。临时版本不包含不兼容的更改、特性清除,也不包含对标准API的任何更改。临时版本的版本号总是0(0),因为6个月版本模型不包括临时版本。但是,这个版本号是为将来的临时版本保留的,如果有的话。

$UPDATE 为更新版本增加的版本号,其中包括新功能中的安全问题、回归和错误的修复。该版本编号在$FEATURE 每三个月释放一次。例如,10月更新版的完整版本字符串是 21 .1月份更新版的完整版本字符串是 21 .0.2,等等。

$PATCH用于紧急补丁发布以修复一个关键问题的递增版本号。

版本字符串没有尾随零元素。例如,如果$FEATURE 是 21 ,的价值$INTERIM 是0,值$UPDATE 它的价值是1$PATCH 是0,那么完整版本字符串是 21 .0.1.

JDK发行说明

JDK Release Notes

Java 21 还提供了数十个新功能和增强功能

Java 21 还提供了数十个新功能和增强功能,其中 15 个增强功能的重要性足以保证他们自己的JDK 增强提案 - JEP ,涵盖 6 个预览功能和 1 个孵化器功能。

特点

  • 430:    字符串模板(预览)
  • 431:    按顺序排列的收藏品
  • 439:    生成ZGC
  • 440:    记录模式
  • 441:    开关图案匹配
  • 442:    外部功能和内存API(第三预览)
  • 443:    未命名的模式和变量(预览)
  • 444:    虚拟线程
  • 445:    无名类和实例主要方法(预览)
  • 446:    标度值(预览)
  • 448:    病媒API(第六个孵化器)
  • 449:    反对Windows32位x86端口清除
  • 451:    准备禁止代理人的动态装载
  • 452:    关键封装机制API
  • 453:    结构并发(预览)
主要新功能
语言特征

JDK 21 Release Notes, Important Changes, and Information

新功能

已删除的特征和选项

虚拟线程

Virtual Threads官网说明

虚拟线程是轻量级线程,可以减少编写、维护和调试高吞吐量并发应用程序的工作量。

平台线程

Oracle官方文档的机器翻译:

平台线程是作为操作系统(OS)线程的瘦包装器实现的。
平台线程在其底层操作系统线程上运行Java代码,平台线程在平台线程的整个生命周期内捕获其操作系统线程。
因此,可用平台线程的数量受限于操作系统线程的数量。
平台线程通常有一个大的线程堆栈和其他由操作系统维护的资源。
平台线程支持线程局部变量。
平台线程适合运行所有类型的任务,但可能是有限的资源。

虚拟线程

Oracle官方文档的机器翻译:

与平台线程一样,虚拟线程也是 java.lang.Thread 的一个实例。
但是,虚拟线程并不依赖于特定的操作系统线程。
虚拟线程仍然在操作系统线程上运行代码。
但是,当虚拟线程中运行的代码调用阻塞 I/O 操作时,Java 运行时会挂起虚拟线程,直到可以恢复为止。
与挂起的虚拟线程关联的操作系统线程现在可以自由地为其他虚拟线程执行操作。

实现原理

虚拟线程的实现方式与虚拟内存类似。
为了模拟大量内存,操作系统将较大的虚拟地址空间映射到有限的 RAM。
同样,为了模拟大量线程,Java运行时将大量虚拟线程映射到少量操作系统线程。

与平台线程不同,虚拟线程通常具有浅调用堆栈,只执行单个 HTTP 客户端调用或单个 JDBC 查询。
尽管虚拟线程支持线程局部变量,但您应该仔细考虑使用它们,因为单个 JVM 可能支持数百万个虚拟线程。

虚拟线程适合运行大部分时间处于阻塞状态、通常等待 I/O 操作完成的任务。
但是,它们不适用于长时间运行的 CPU 密集型操作。

虚拟线程用法
Thread thread = Thread.ofVirtual().start(() -> System.out.println("Hello"));
thread.join();

try {Thread.Builder builder = Thread.ofVirtual().name("MyThread");Runnable task = () -> {System.out.println("Running thread");};Thread t = builder.start(task);System.out.println("Thread t name: " + t.getName());t.join();
} catch (InterruptedException e) {e.printStackTrace();
}

下面的示例创建和启动两个虚拟线程

public class CreateNamedThreadsWithBuilders {public static void main(String[] args) {try {Thread.Builder builder =Thread.ofVirtual().name("worker-", 0);Runnable task = () -> {System.out.println("Thread ID: " +Thread.currentThread().threadId());};            // name "worker-0"Thread t1 = builder.start(task);   t1.join();System.out.println(t1.getName() + " terminated");// name "worker-1"Thread t2 = builder.start(task);   t2.join();  System.out.println(t2.getName() + " terminated");} catch (InterruptedException e) {e.printStackTrace();}}
}

这个例子打印输出类似于下列:

Thread ID: 21
worker-0 terminated
Thread ID: 24
worker-1 terminated

分代ZGC

JDK 21: The GCs keep getting better

  • JEP 目标:
    • 通过扩展 展 Z 垃圾收集器 ( ZGC ) 来维护新对象和旧对象的不同代,从而提高应用程序性能。
    价值:
    • 使用 Generational ZGC 运行的应用程序应该享受:
      • 降低分配停滞的风险。
      • 降低所需的堆内存开销。
      • 降低垃圾收集 CPU 开销。
    • 与非分代 ZGC 相比,这些好处应该不会显着降低吞吐量。应保留非代 ZGC 的基本属性:
    • 暂停时间不应超过 1 毫秒。
    • 应支持从几百兆字节到数 TB 的堆大小。
    • 应该需要最少的手动配置。

  • G1 -自JDK9以来的默认收集器,侧重于延迟和吞吐量之间的平衡
  • Parallel  -以通过为导向的收集器,可能会受到长时间的最坏情况的影响
  • Z -超低延迟替代方案,与次毫秒暂停完全同步

当涉及到原始吞吐量性能时,JDK17以来的收益并没有那么大,但仍略有增加。但是下面的图表中有两件事值得关注。首先,JDK8和最近的G1和并行JDKK之间的显著差异。从性能的角度来看,离开JDK8比现在更有好处。

使用一代ZGC时,10%的改进。ZGC中的新一代支持允许它更有效地回收内存,而不需要为每个GC考虑整个堆。效果是减少了CPU资源的花费,这些资源可以被应用程序用来提高其性能。

升级和试用一代ZGC

正如你所看到的,与JDK8相比,JDK21的性能显著地好。因此,如果您还在使用JDK8,您应该开始寻找升级。当升级的时候,也是重新评估使用哪个GC的好时机。如果搬到JDK21,我真的鼓励尝试代代相传的ZGC。在JDK21中,ZGC的代代版本和遗留模式都是可用的,要使用代代,您需要指定这两个标记:

JVM参数:
-XX:+UseZGC -XX:+ZGenerational

文章中放了很多官网的链接推荐自己去学习。




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

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

相关文章

java --- 异常

目录 一、异常体系介绍 二、异常的作用 三、异常处理方式 3.1 捕获异常 2.1 灵魂一问: 如果try中没有遇到问题,如何执行? 2.2 灵魂二问:如果try中可能会遇到多个问题,怎么执行? 2.3 灵魂三问&#x…

安卓小练习-校园闲置交易APP(SQLite+SimpleCursorAdapter适配器)

环境: SDK:34 JDK:20.0.2 编写工具:Android Studio 2022.3.1 整体效果(视频演示): 小练习-闲置社区APP演示视频-CSDN直播 部分效果截图: 整体工作流程: 1.用户登录&…

FPGA实现 TCP/IP 协议栈 客户端 纯VHDL代码编写 提供4套vivado工程源码和技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐我这里已有的以太网方案1G 千兆网 TCP-->服务器 方案10G 万兆网 TCP-->服务器客户端 方案常规性能支持多节点FPGA资源占用少数据吞吐率高低延时性能 4、TCP/IP 协议栈代码详解代码架构用户接口代码模块级细讲顶层模块PA…

http状态码(一)400报错

一 400报错汇总 ① 综述 一、4xx状态码报错说明: 客户端行为导致的报错二、通用的4xxHTTP报错1) 4002) 4013) 4034) 4045) 405 --> 不允许方法,可能跨域或者nginx限制请求方法6) 4087) 4138) 419三、ngin自身定义的4xx报错495、496、497、498、4…

keithley 吉时利6221源表

特点 优势 10 14 Ω 输出阻抗 提供广泛的输出阻抗,确保负载中有稳定的电流源。 65000 点源内存 允许直接从电流源执行全面的测试电流扫描。 输出 0.1V 至 105V 的恒流电压,10mV 步长 防止潜在损坏对过电压敏感的设备。 源交流电源范围为 4pA 至…

vue门户设计器实现技术方案

一、什么是门户设计器 门户设计器是一种用于创建和设计门户网站或者应用系统首页的工具。它通常是一个软件应用程序,可以帮助用户快速、轻松地设计和构建自己的门户网站或者应用系统的首页。门户设计器通常提供在线拖拉拽设计器,以及各种模板、主题和组…

LWIP源码认识记录

1、内核:\src\core的各源文件含义 2、demo例程与移植:lwip\lwip-contrib

地级市ZF工作报告文本分析-ZF数字关注度(2005-2023)

数据简介: 数据来源:各政府工作报告时间跨度:2005-2023年数据范围:安康、安庆、安顺、安阳、鞍山、巴彦淖尔、巴中、白城、白山、白银、蚌埠、包头、保山、北京、本溪、滨州、亳州、常德、常州、朝阳、潮州、郴州、成都、池州、赤…

ChatGPT如何做科研??

2023年我们进入了AI2.0时代。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车,就有可能被淘汰在这个数字化时代,如何能高效地处理文本、文献查阅、PPT…

酒精壁炉,现代取暖的便携选择

酒精壁炉作为现代室内取暖的一种选择,具有独特的特点和工作原理。酒精壁炉采用酒精作为燃料,为家庭提供舒适的温暖,同时具备一定的安全性和便携性。 酒精壁炉通常由金属或陶瓷制成,内部设有专门的燃烧器,用于燃烧酒精燃…

Discord Midjourney 安装使⽤教程(AI绘画)

安装步骤: 1.注册Discord账号 2.进⼊Midjourney社区创作 3.创建⾃⼰服务器 安装教程: 1.注册Discord账号 账号注册的方式: 注册地址: //账号注册地址https://discord.com/ 2.进⼊Midjourney社区创作 // 邀请链接: 官方的midjourneyhttps://discord.gg/midjo…

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念,高性能计算与智算场景,高性能计算主要是面向天气预测、生物计算、材料计算等场景,而最近几年很火的智算主要是面向AI场景的计算,如语音识别、图像识别、自动驾驶等场景,我们可…

Qt实现的聊天画面消息气泡

Qt实现的聊天画面消息气泡 采用基于QWidgetMingw实现的原生的消息气泡 通过覆写QWidget::paintEvent(QPaintEvent *event)方法,每当窗口尺寸变化时都会触发paintEvent事件,在覆写QWidget::paintEvent(QPaintEvent *event)方法中重新绘制聊天气泡在QListW…

社交网络分析5:社交网络信息传播动力学。信息传播 、传染病模型、博弈模型和物理系统模型 、传播动力学分析 、 未来发展趋势与展望

社交网络分析5: 写在最前面信息传播动力学研究概述信息传播信息接收信息发布信息反馈信息传播的预测与控制 信息传播动力学研究的目标 社交网络信息传播模型传播模型的基本要素传播模型的数学表达传染病模型博弈模型物理系统模型 提出新的物理学模型三类模型的比较提…

ESP32 连接阿里云 MQTT 报错MQTT Connect err:2

解决方法 跳转到 这个头文件<PubSubClient.h>里 MQTT_MAX_PACKET_SIZE 把这个的大小从原来的256 改为1024 MQTT_KEEPALIVE 把这个大小从原来的15 改为65 修改后再次连接即可成功 如下图&#xff1a;

字体包引入以及使用

将UI给的字体包下载到assets文件夹下 app.vue全局定义 <style> * {margin: 0;padding: 0; }font-face {font-family: PangMenZhengDao-3;src: url(/assets/fonts/庞门正道标题体3.0.TTF) format(truetype);font-weight: bold;font-style: normal; } </style>页面使…

python如何发送企业微信群消息

一、创建机器人&#xff0c;并获取webhook 1.1 进入企业微信中&#xff0c;添加群机器人&#xff0c;添加完成后可以获取到一个webhook的地址 1.2 群机器人企业微信接口的调用可以参考这个文件 https://developer.work.weixin.qq.com/document/path/99110#%E5%A6%82%E4%BD%…

【图神经网络 · 科研思考4】动态图数据集相关 wikipedia.csv;跨域节点表示学习;跨域自监督;动态时空图跨域;无监督领域适应方法?

这是2023年11月份的部分科研思考(四),主体内容围绕【图神经网络】展开,科研疑问解答 & 科研基础概念了解 & 科研方向,仅学习使用。 🎯作者主页: 追光者♂🔥 🌸个人简介: 📝[1] CSDN 博客专家📝 🏆[2] 人工智能领域优质创作者🏆 �…

Vue3知识点总结

目录 一.创建Vue2工程 1.使用 vue-cli 创建 2.使用 vite 创建 二.常用 Composition API setup ref函数 reactive函数 计算属性与监视 1.computed函数 2.watch函数 3.watchEffect函数 一.创建Vue2工程 1.使用 vue-cli 创建 查看vue/cli版本&#xff0c;确保vue/cli版本…

QT自带打包问题:无法定位程序输入点?metaobject@qsound

文章目录 无法定位程序输入点?metaobjectqsound……检查系统环境变量的配置&#xff1a;打包无须安装qt的文件 无法定位程序输入点?metaobjectqsound…… 在执行release打包程序后&#xff0c;相应的release文件夹下的exe文件&#xff0c;无法打开 如有错误欢迎指出 检查系…