java8以上版本

java9及其以上版本

  • 一、JDK17 LTS 常用新特性
    • 1、switch语句的增强
    • 2、字符串拼接
    • 3、判断类型instanceof自动类型转换
    • 4、密封类 关键字 sealed permits
    • 5、record类
    • 6、优化空指针异常
    • 7、ZGC垃圾收集器

一、JDK17 LTS 常用新特性

1、switch语句的增强

在 Java 17中,switch 表达式得到了显著增强,支持了模式匹配(pattern matching)和 yield 语句。不过,需要注意的是,这里的 yield 不是关键字,而是 switch 表达式中用于返回值的表达式。

在 Java 17 之前,switch 语句主要用于整型和枚举类型,并且通常用于选择执行哪个代码块。而在 Java 17 中,switch 表达式(注意是表达式,不是语句)可以返回一个值,并且支持更广泛的类型(如字符串、对象等)以及模式匹配。

使用新的 switch 表达式时,你可以使用 -> 符号和表达式(或代码块)来指定每个 case 的结果。然而,在某些情况下,你可能想要从 switch 表达式的某个 case 中返回一个值,并立即退出 switch。在这种情况下,你可以使用类似于局部变量声明的语法,但使用 yield 关键字来返回该值。

以下是一个示例,展示了如何在 Java 17 中使用 switch 表达式和 yield:

String text = "Hello";  
String result = switch (text) {  
    case "Hello" -> {  
        System.out.println("Matched Hello");  
        yield "Greeting"; // 使用 yield 返回一个值  
    }  
    case "World" -> "Salutation";  
    default -> {  
        System.out.println("No match found");  
        yield "Unknown"; // 使用 yield 返回一个默认值  
    }  
};  
  
System.out.println(result); // 输出:Greeting

在上面的示例中,switch 表达式根据 text 变量的值进行匹配,并使用 yield 语句从每个 case 中返回一个字符串。注意,每个 case 都可以是一个代码块,并且在这个代码块中,你可以使用 yield 来返回一个值,该值将成为整个 switch 表达式的结果。

需要注意的是,虽然这种语法看起来像是在使用局部变量,但实际上 yield 并不是声明一个变量;它只是从 switch 表达式中返回一个值。此外,yield 只能用在 switch 表达式的 case 分支中,并且每个 case 分支必须有一个 yield 语句(除非它是空的,或者是 throw 语句)。

其他使用案例如下图:
在这里插入图片描述

2、字符串拼接

在这里插入图片描述

3、判断类型instanceof自动类型转换

在这里插入图片描述
可以看到上图中jdk8的instanceof判断类型后,还需要手动做一次强制类型转换,jdk17可以简化写法。

4、密封类 关键字 sealed permits

限制继承,被sealed修饰的父类只能被后面permits修饰的指定子类继承。并且指定子类必须用non-sealed(可以被孙子类继承)或者final(此子类无法再被孙子类继承)修饰。

  • 注意:
    1、密封类的父类和子类必须在同一个包下。
    2、被permits修饰的子类只能继承sealed修饰的父类,不能继承其他类。
public sealed interface Shape permits Circle, Rectangle {   
}  
  
public final class Circle implements Shape {   
}  
  
public non-sealed class Rectangle implements Shape {  
}  
  
// 尝试创建一个不在permits列表中的类来实现Shape会导致编译错误  
// public final class Triangle implements Shape { ... } // 编译错误

5、record类

在这里插入图片描述

类似lombok的属性只读对象,此类可以隐式的实现全参构造方法(没有无参构造方法)和属性的get方法,没有set方法。也会重写equals(), hashCode(), toString()。

record类的特点:
紧凑的语法:Record类允许你使用更简洁的语法来定义数据类。
自动生成方法:Record类自动为你生成equals(), hashCode(), toString(), 以及所有的getter方法。
不可变性:Record类的字段默认是final的,这意味着Record类的实例是不可变的。
组件解构:Record类支持组件解构(component decomposition),允许你在模式匹配中使用它们。
record类的定义和普通class是不一样的,代码如下:

public record Point(int x, int y) {  
    // 这里不需要显式定义任何方法,因为Record类会自动为你生成  
}

6、优化空指针异常

可以具体定位到哪一行的哪一个方法报空指针,以前只能定位到哪一行
在这里插入图片描述

7、ZGC垃圾收集器

垃圾回收不卡顿,JVM ZGC(Z Garbage Collector)解释
ZGC是Oracle在JDK
11中引入的一种创新垃圾收集算法,其设计目标主要是为了实现低延迟和高吞吐量的内存管理。以下是关于ZGC的详细解释:
一、主要特点
低延迟:ZGC的主要目标是确保持续较短的暂停时间,通过减少STW(Stop-The-World)暂停来实现。JDK 11中,ZGC的停顿时间不超过10ms,且不会随着堆内存的增大而变长。在JDK 16及之后的版本中,GC暂停时间已经缩小到1ms以内,并且时间复杂度是O(1),即GC停顿时间是一个固定值,不会受堆内存大小影响。
高吞吐量:ZGC通过优化垃圾收集操作和内存分配策略,可以在高负载的情况下提供更高的吞吐量。这意味着ZGC可以在短时间内完成更多的垃圾收集任务,从而提高Java应用程序的性能。
高内存利用率:ZGC通过动态调整内存布局和回收策略,可以更有效地利用内存资源。这使得ZGC可以在有限的内存空间内运行更多的Java应用程序实例,从而降低内存成本。
二、工作原理

ZGC采用了全新的设计思路,摒弃了传统的分代收集策略,而是将整个堆内存看作一个整体。它使用读屏障(Read
Barrier)和染色指针(Colored Pointer)技术来实现并发标记和整理。ZGC的工作过程可以分为以下几个阶段:

并发标记(Concurrent Marking):ZGC在标记阶段采用SATB(Snapshot-At-The-Beginning)算法,通过读屏障记录对象引用关系的变化。同时,ZGC引入了染色指针技术,将对象的引用信息存储在指针本身,从而避免了额外的内存开销。
再标记(Remark):在并发标记完成后,ZGC会暂停应用线程进行短暂的再标记操作,以处理在并发标记阶段未能处理的对象引用变化。这个停顿时间通常非常短,对应用性能的影响微乎其微。
并发整理(Concurrent Relocation):在再标记完成后,ZGC会进入并发整理阶段。与传统垃圾收集器的整理阶段不同,ZGC的整理操作是并发的,即与应用线程同时运行。这得益于ZGC的染色指针技术,使得对象在移动过程中仍然可以被正确地访问。
引用更新(Reference Processing)和弱引用处理(Weak Reference
Processing):在并发整理过程中,ZGC还需要处理对象的引用更新和弱引用。
三、性能优势
线程无关性:ZGC是一个线程无关的垃圾收集器,这意味着它可以在不同的线程之间并行执行垃圾收集任务,进一步提高应用程序的吞吐量。
无锁设计:ZGC采用了无锁设计,避免了锁定导致的竞争条件和死锁等问题,进一步提高了应用程序的性能。 四、适用场景

ZGC非常适合对延迟敏感的应用场景,如在线交易、实时数据分析等。同时,由于其可伸缩性设计,ZGC也适用于大规模堆内存和高吞吐量应用,是云计算和大数据领域的理想选择

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎么挑选骨传导耳机?精选六大选购技巧教你如何挑选

过去的两年里,骨传导耳机逐渐被大众的所熟知。可能毕竟长时间使用音量过大的传统入耳式耳机,多多少少会对我们的听力健康构成威胁。所以很多人就想找一款不伤耳朵的耳机。然后就了解到了骨传导耳机,所以就会延伸出这些问题——骨传导耳机好用…

PostgreSQL发展史

PostgreSQL是一个开源的对象-关系型数据库管理系统(ORDBMS),其历史可以追溯到上世纪80年代。以下是对PostgreSQL发展史的深入解析: 1980年代:起源 1.Ingres 项目 1977年,Michael Stonebraker 和他的团队…

若依新增页面,在左侧显示菜单栏的页面,可点击

选择指定的某个目录下 菜单名称,路由地址,组件路径这几个是必填的,其他的暂时就不用管了。 菜单名称:就是显示到左侧目录中的名称。 路由地址:自定义,一般写页面名称就可以。 组件路径:根据前端…

页面加载不出来,报错[@umijs/runtime] load component failed

问题描述 页面加载不出来数据,一直在旋转,控制台输出内容如下: 原因分析: 之前页面是没有问题的,在写当前页面突然出现页面加载不出来,控制台报错,主要是页面引入了这行代码报错 import { …

M-A352AD在桥梁/建筑结构健康监测中的应用

钢筋混凝土的面世,使人类基建迈进了新的阶段,大规模的桥梁和高楼大厦拔地而起。随之而来的,就是对其安全的忧虑。因此,我们需要对其结构安全健康进行监测,以保证行恰当的维护和提前发现隐患。桥梁/建筑结构健康监测是以…

时空AI软件:地理信息与遥感领域的智慧引擎

在地理信息与遥感技术的广阔疆域,时空AI软件如同一颗璀璨新星,将时空信息与智能深度融合,驱动着地理信息分析、决策支持、环境监测、城市规划等领域的深刻变革。本文将深入剖析其技术核心、应用实例、未来趋势,探索时空AI软件如何…

elemnt ui 时间选择器。 当前日期往前推6个月以前的的不可选择

<div class"hengxiang"><div class"lefttitle titlesBt" style"color:#15a66a;"><div>建单起始日期</div><el-date-picker class"elinputs" type"date" placeholder"请输入起始日" v-…

InternLM2-Math-Plus全面升级,全尺寸最强的开源数学模型

总览 数学能力是大语言模型推理水平的重要体现。上海人工智能实验室在推出领先的开源数学模型InternLM2-Math的三个月之后对其进行了升级&#xff0c;发布了全新的 InternLM2-Math-Plus。升级后的 InternLM2-Math-Plus 在预训练和微调数据方面进行了全面的优化&#xff0c;显著…

从零开始:如何集成美颜SDK和优化美颜接口

今天&#xff0c;小编将从零开始&#xff0c;详细讲解如何集成SDK并优化美颜接口。 一、选择合适的美颜SDK 评估SDK的功能 在评估过程中&#xff0c;可以通过阅读官方文档、查看示例代码以及实际测试来确定SDK是否符合需求。 兼容性和性能 确保其支持你开发的应用平台&…

ADC模数转换器的简介及参数详解

ADC全称是Analog-to-Digital Converter模数转换器&#xff0c;一般我们把模拟信号(Analog signal) 用A来进行简写&#xff0c;数字信号(digital signal) 用D来表示。是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。 今天我们主要说ADC的参数&#xff0c;我们把…

android studio 导入github里的项目后提示:Add Configuration

原文链接&#xff1a;https://blog.csdn.net/weixin_45677723/article/details/125940912 从github上面clone项目&#xff0c;出现下图问题&#xff1a; 解决问题&#xff1a; 我这个的情况是因为多文件嵌套了&#xff0c;我用Android Studio打开的是A文件&#xff0c;而B项…

定个小目标之每天刷LeetCode热题(2)

今天刷的是这题&#xff0c;属于中等题&#xff0c;我是直接看的题解&#xff0c;官方给出了两种方法 第一种是递归&#xff0c;直接看代码吧 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root p || root q || roo…

Windows环境下Maven3.5.4下载和配置详细图文教程

1、 前言&#xff1a;有了maven这个仓库&#xff0c;我们就少为包之间的冲突烦恼了。 2、 说明&#xff1a;版本&#xff1a;Maven3.5.4 3、 官网下载地址如下http://maven.apache.org/download.cgi&#xff0c;点这里下载&#xff08;如果版本更新&#xff0c;在这里可以找到…

香橙派Kunpeng Pro性能测评:高效能小型服务器开发板的全面体验

香橙派 Kunpeng Pro 是一款面向开发者和教育市场的高性能单板计算机&#xff0c;其搭载了鲲鹏处理器&#xff0c;可提供 8TOPS INT8 计算能力&#xff0c;提供了 8GB 和 16GB 两种内存版本&#xff0c;开发板结合了鲲鹏全栈根技术&#xff0c;全面使能高校计算机系统教学和原生…

张驰咨询:六西格玛培训,IT界的“福尔摩斯”

六西格玛&#xff0c;这个曾以制造业为背景的管理理念&#xff0c;如今却在IT领域大放异彩。其背后的原因&#xff0c;不仅仅是因为六西格玛追求零缺陷、持续改进的核心价值观与IT行业对产品质量和用户体验的极致追求不谋而合&#xff0c;更是因为它提供了一种全新的思维方式和…

护眼灯到底有用吗?引发护眼台灯危害的四大原因曝光!

护眼灯到底有用吗&#xff1f;近几年随着各大科技感满满的设备诞生&#xff0c;近视率也伴随着不断提高&#xff0c;现如今是已经攀升到了惊人的53.6%&#xff0c;这一数据也清晰的警惕着每一位家长&#xff0c;此刻护眼灯以独特的护眼效果脱颖而出&#xff0c;同时也在书房中占…

AI Agent:自主性、反应性与交互性的融合,将颠覆软件行业

Agent来袭&#xff1a;AI如何变身软件界的超级英雄&#xff1f; ©作者|Zhongmei 来源|神州问学 前言 “AI Agent不仅会彻底改变计算机的使用方式&#xff0c;它还将颠覆软件行业&#xff0c;是一个对科技行业的冲击波&#xff0c;是一场自‘输入命令到点击图标’变革之后…

postgresql insert on conflict 不存在则插入,存在则更新

向一张表执行插入动作&#xff0c;如果插入的字段数据已存在&#xff0c;则执行更新操作&#xff0c;不存在则进行插入操作。 1、创建一张表 CREATE TABLE "user_info" ( "id" int2 NOT NULL, "name" varchar(20) COLLATE "pg_catalog&quo…

VMware的网络不通?这一篇给你一定的参考.虚拟机网络配置

如果你的虚拟机莫名其妙ping不通网络了&#xff0c;可以参考一下我的配置。这不是一篇教程&#xff0c;你可以核对一下自己的bug。 虚拟网络配置器中&#xff1a; 使用管理员权限更改设置&#xff0c;会跳出来vmnet0 桥接、仅主机和NAT都必须要有 vment0&#xff1a; vmnet1:…

庆余年2火了,却把热爱开源的程序员给坑了

庆余年 2 终于开播了&#xff0c;作为一名剧粉&#xff0c;苦等了五年终于盼来了。开播即爆火&#xff0c;虽然首播的几集剧情有些拖沓&#xff0c;不过也不影响这是一部好剧。 然而&#xff0c;庆余年 2 的爆火&#xff0c;却把 npmmirror 镜像站给坑惨了。npmmirror 镜像站&…