java21特性学习

news2024/10/7 14:22:16

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.coloradmin.cn/o/1319744.html

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

相关文章

抖店怎么快速起店?不掺杂汤汤水水,全是干货!

我是电商珠珠 我做抖店也已经有三年的时间了,团队也从原来的几人扩大到了70。对于抖店的玩法已经完全摸透熟通,在做店的同时也会带着学生一起做店,他们经常问的问题就是抖店怎么快速起店。 今天,我就来给大家做个分享。根据我的…

适用于 Windows 和 Mac 的 10 款最佳照片恢复软件(免费和付费)

丢失照片很容易。这里点击错误,那里贴错标签的 SD 卡,然后噗的一声,一切都消失了。值得庆幸的是,在技术领域,你可以纠正一些错误。其中包括删除数据或格式化错误的存储设备。 那么,让我们看看可用于从 SD …

提升广东省水泥行业效率的MES解决方案

广东省水泥行业作为我国重要的基础建设材料生产领域之一,提高其生产效率和降低能源消耗具有重要意义。而随着技术的发展,我国的MES系统技术发展,通过引入MES系统成为了实现降本增效目标的必要且有效的手段。MES是一种基于计算机技术的管理工具…

人工智能超分辨率重建:揭秘图像的高清奇迹

导言 人工智能超分辨率重建技术,作为图像处理领域的一项重要创新,旨在通过智能算法提升图像的分辨率,带来更为清晰和细致的视觉体验。本文将深入研究人工智能在超分辨率重建方面的原理、应用以及技术挑战。 1. 超分辨率重建的基本原理 …

Java原来可以这么玩!CV视频合成处理,视频前后拼接,画面合并

前言 本章内容教会你如何用java代码实现 两个视频的画面合并 或者前后拼接。原理是使用了javacv开源jar包,代码经过反复修改,已经实现我能想到的最优最快的实现,如果你有更好更快的实现,欢迎评论区留言!!&…

YXLON高压发生器维修XRG160/160/GA

依科视朗YXLON高压发生器维修型号包括XRG100/110/120/130/160/225/320/450等。 维修包括:仪器高压发生器维修 X射线机高压发生器维修 CT高压发生器维修 安检设备高压发生器维修等。 高压发生器原理: 简单的说就是直流电震荡后升压,比如说1个小功率,利用…

MetaSploit工具的使用

在命令行输入:msfconsole 启动msf msfconsole 另外的方式 msfdb init msfdb run 查看数据库连接状态 db_status 扫描端口并存储 db_nmap 查看扫描到的数据信息 services MSF常用的模式和命令 搜索模块 search 模块名字 使用模块 use 编号 查看模块使用 sho…

目标检测应用场景—数据集【NO.19】车辆目标检测数据集

写在前面:数据集对应应用场景,不同的应用场景有不同的检测难点以及对应改进方法,本系列整理汇总领域内的数据集,方便大家下载数据集,若无法下载可关注后私信领取。关注免费领取整理好的数据集资料!今天分享…

✺ch5——纹理贴图

目录 加载纹理图像文件纹理坐标在着色器中使用纹理:采样器变量和纹理单元纹理贴图:示例程序多级渐远纹理贴图各向异性过滤环绕和平铺透视变形材质——更多OpenGL细节补充说明 纹理贴图是在栅格化的模型表面上覆盖图像的技术。 它是为渲染场景添加真实感的…

Python三级 每周练习题31

如果你感觉有收获,欢迎给我微信扫打赏码 ———— 以激励我输出更多优质内容 练习一: 作业1:编写程序,在下面的字典中找出身高137的同学并输出姓名,如果没找到, 输出没有 a{‘小赵’:136,‘小钱’:141,‘小孙’:146,‘小李’:13…

操作系统基础知识

本文用于记录学习W3schools的操作系统教程,该教程的部分内容比较难懂,所以也参考了其他文章。 操作系统基础知识 一、操作系统概括二、操作系统的8个组件1 流程管理2 I/O设备管理3 文件管理4 网络管理5 内存管理6 磁盘管理(辅助存储管理)7 安全管理8 命令…

Elasticsearch——快速入门

从零基础的内容开始介绍Elasticsearch,主要包含以下内容: Elasticsearch的定义、优点,以及典型的业务场景。Elasticsearch中重要的概念。Elasticsearch典型的接入方式。安装Elasticsearch。使用Kibana调试Elasticsearch。Elasticsearch节点的…

【Transformer】ViT and TNT(2)

文章目录 VITTNT 太…完整了!同济大佬唐宇迪博士终于把【Transformer】入门到精通全套课程分享出来了,最新前沿方向 学习笔记 VIT eg,图片分块,10x10x3 的 patch 通过 conv 拉成向量,就无缝对接了 位置编码可以多种方…

硬件基础:光耦、可控硅、继电器、达林顿管、干簧管

光耦 光电耦合器(optical coupler,英文缩写为OC)亦称光电隔离器,简称光耦。 光电耦合器是一种把发光器件和光敏器件封装在同一壳体内, 中间通过电→光→电的转换来传输电信号的半导体光电子器件。其中,发光…

三勾商城新功能-电子面单发货

商家快递发货时可以选择在线下单,在线获取和打印电子面单。免去手写面单信息以及避免填写运单号填错,系统会自动填写对应发货商品的运单信息 快递100电子面单1、进入快递100,点击登录 2、登录成功后,点击“电子面单与云打印” 3、进入电子面单与云打印后…

什么是缓存击穿、缓存穿透、缓存雪崩?

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

Yapi详细安装过程(亲测可用)

1. 前置条件 1、Git 2、NodeJs(7.6) 3、Mongodb(2.6) 2. NodeJs的安装 1、获取资源 curl -sL https://rpm.nodesource.com/setup_8.x | bash - 2、安装NodeJS yum install -y nodejs 3、查看NodeJs和Npm node -v npm -v…

算法——分治

思想:分而治之,将大问题转化为若干个相同或相似的子问题。快排的题目常见的方法是利用三指针法将数组分三块搭配随机选择基准元素的思想 颜色分类(分治_快排) 颜色分类 题目解析 原地对它们进行排序,使得相同颜色的元…

Appium 图像识别技术 OpenCV

在我们做App自动化测试的时候,会发现很多场景下元素没有id、content-desc、text等等属性,并且有可能也会碰到由于开发采用的是自定义View,View中的元素也无法识别到,很多的自动化测试框架对此类场景束手无策。Appium在V1.9.0中有给…

Temu、Shein、OZON测评自养号,IP和指纹浏览器的优缺点分析

随着全球电子商务的飞速发展,跨境电商环境展现出巨大的潜力和机遇。然而,跨境卖家们也面临着更激烈的竞争、更严格的规定和更高的运营成本等挑战。为了在这个环境中脱颖而出,一些卖家尝试使用自动脚本程序进行浏览和下单。然而,这…