java8以上版本

news2024/11/18 2:37:21

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也适用于大规模堆内存和高吞吐量应用,是云计算和大数据领域的理想选择

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

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

相关文章

全面指南:IP SSL证书的申请与部署步骤

不同于常见的域名型SSL证书,IP SSL证书是专门用于为IP地址提供安全保护的SSL证书类型,适用于那些直接通过IP地址访问的网站或服务。本文将详细介绍IP SSL证书的申请步骤及其部署过程,帮助您轻松实现IP地址的安全加密。 一、了解IP SSL证书 …

CSS Canvas鼠标点击特效之天女散花(文本粒子动画)

1.效果 2.代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>body,html {margin: 0;padding: 0;w…

Docker HTTPS api V2 Manifest V 2, Schema 2 下的免装docker下载镜像的方法

目录 前言 下载镜像代码 使用方法 原代码中无法适配 Schema 2 的原因浅析 如何解决 相对原代码改动的东西 前言 本文提供代码主要是基于 https://github.com/NotGlop/docker-drag 提供的代码修改的。链接中提供的代码应该是是基于HTTPS api V2 Manifest V 2, Schema 1实…

【算法实战】每日一题:统计一个序列向某个方向的比他小的数的个数(非暴力)

题目 统计一个序列向某个方向的比他小的数的个数 思路 用单调栈&#xff0c;虽然这里说的是统计比他小的&#xff0c;但是是求和&#xff0c;所以我们可以用在用单调栈的时候统计里面所有比他大的元素 这两个级别上是一样的 伪代码 声明变量 n、num 和 sum 为整数。 声明…

实操专区-第15周-课堂练习专区-漏斗图与金字塔图

实操专区-第15周-课堂练习专区-漏斗图 下载安装ECharts&#xff0c;完成如下样式图形。 代码和截图上传 基本要求&#xff1a;下图3选1&#xff0c;完成代码和截图 完成 3.1.3.16 漏斗图中的任务点 基本要求&#xff1a;2个选一个完成&#xff0c;多做1个加2分。 请用班级学号姓…

vue组件的基本使用方法

组件 【1】组件是什么&#xff1f; 组件就是&#xff1a;扩展 HTML 元素&#xff0c;封装可重用的代码&#xff0c;目的是复用例如&#xff1a;有一个轮播图&#xff0c;可以在很多页面中使用&#xff0c;一个轮播有js&#xff0c;css&#xff0c;html组件把js&#xff0c;cs…

使用 Django 连接 MySQL 数据库

文章目录 步骤一&#xff1a;安装必要的库和驱动步骤二&#xff1a;配置数据库连接步骤三&#xff1a;执行数据库迁移步骤四&#xff1a;开始使用 MySQL 数据库创建一个模型迁移模型到数据库使用模型进行数据操作创建新记录&#xff1a;查询记录&#xff1a;更新记录&#xff1…

264 基于matlab的自适应语音盲分离

基于matlab的自适应语音盲分离&#xff0c;当a和b同时对着传声器A,B说话且传声器靠得很近时&#xff0c;传声器A,B会同时接受到a和b的声音&#xff0c;即a和b产生了混叠干扰&#xff0c;此时通过自适应语音盲分离系统可以将a,b的声音分离开&#xff0c;使得一个信道只有一个人的…

【并发程序设计】11.进程间通信

11.进程间通信 &#xff08;IPC&#xff0c;InterProcess Communication&#xff09;进程和进程之间交换信息。 常用通信方式 无名管道&#xff08;pipe&#xff09;有名管道 &#xff08;fifo&#xff09;信号&#xff08;signal&#xff09;共享内存(mmap)套接字&#xff0…

平衡二叉树的构建(理论,部分函数代码)

平衡二叉树是二叉排序树的一种特殊情况&#xff0c;平衡二叉树的出现是为了在最坏情况下的时间复杂度仍然是对数级别O(logn)&#xff0c;从而保证了高效的搜索、插入和删除操作。 举个例子&#xff0c;如果有一个数组是&#xff1a;1&#xff0c;2&#xff0c;3。如果只简单的…

数据库多表查询

多表查询&#xff1a; SELECT *FROM stu_table,class WHERE stu_table.c_idclass.c_id; 多表查询——内连接 查询两张表交集部分。 隐式内连接&#xff1a; #查询学生姓名&#xff0c;和班级名称&#xff0c;隐式调用 SELECT stu_table.s_name,class.c_name FROM stu_table…

vs code 中使用SSH 连接远程的Ubuntu系统

如下图&#xff0c;找到对应的位置 在电脑上找到以下位置 打开配置如下&#xff0c;记住&#xff0c;那个root为你的用户名&#xff0c;这个用户名&#xff0c;具体根据你的用户名来设置&#xff0c;对应的密码就是你登录Ubuntu时的密码 Host root192.168.0.64User rootHostNa…

文件跨境传输法律管控越来越严格,企业该如何有效应对?

文件跨境传输已经成为非常普遍的业务需求&#xff0c;企业在世界各地的总分支处、合作伙伴&#xff0c;客户间开展业务时&#xff0c;必须基于数据的跨境流转而展开。 但随着世界各国对数据安全的重视&#xff0c;文件跨境传输也日趋严格&#xff0c;各国在法律法规上均出具了更…

RP2040 SPI DMA驱动ST7735

SPI DMA演示 一、源码 #include <stdio.h> #include <stdlib.h> #include "pico/stdlib.h" #include "pico/binary_info.h" #include "hardware/spi.h" #include "hardware/dma.h" #include "font.h"#define X…

Ownips+Coze海外社媒数据分析实战指南

目录 一、引言二、ISP代理简介三、应用实践——基于Ownips和coze的社媒智能分析助手3.1、Twitter趋势数据采集3.1.1、Twitter趋势数据接口分析3.1.2、Ownips原生住宅ISP选取与配置3.1.3、数据采集 3.2、基于Ownips和Coze的社媒智能助手3.2.1、Ownips数据采集插件集成3.2.2、创建…

Ubuntu配置Git

安装git sudo apt install git 查看是否安装成功 git --version 配置git 用github上注册的用户名和邮箱地址&#xff0c;配置git git config --global user.name "username" git config --global user.email "usernameemail.com" 重启ubuntu查看…

首搭第五代DM技术,秦L DM-i正式上市,仅售9.98万元起

5月28日&#xff0c;比亚迪王朝重磅新车秦L DM-i在西安震撼上市&#xff0c;首搭第五代DM技术&#xff0c;百公里亏电油耗达到划时代的2.9L&#xff0c;“一箱油”满油满电综合续航达2100公里&#xff0c;引领中级&#xff0c;创下了百公里油耗的历史新低&#xff0c;开创油耗2…

机顶盒也可以跑pcdn--上机指南(贰)

机顶盒能跑PCDN&#xff0c;以下是相关上机指南操作步骤&#xff1a; 1.申请PCDN服务&#xff1a;登录PCDN控制台&#xff0c;申请开通PCDN服务。 2.后台开通PCDN服务&#xff1a;工作人员与用户沟通业务详细需求&#xff0c;用户确定使用PCDN&#xff0c;后台为用户开通PCDN…

VolWeb:集中式增强型数字取证内存分析平台

关于VolWeb VolWeb是一款最新开发的集中式增强型数字取证内存分析平台&#xff0c;该平台基于Volatility 3框架实现其功能&#xff0c;该工具旨在辅助广大研究人员执行安全分析和事件应急响应等任务。 VolWeb可以提供集中式、可视化的增强型网络应用程序&#xff0c;并提高安全…

Java基础:类的详细说明

Java是一门面向对象的编程语言&#xff0c;所谓的面向对象&#xff0c;简单的说&#xff0c;就是在软件开发过程中&#xff0c;用各种各样的对象实现所需功能。 对象就好像是现实世界中不计其数的物体&#xff0c;根据物体的性质可以将其进行分门别类&#xff1a;石头、锤子、…