当前位置: 首页 > news >正文

Java 23新特性

文章目录

  • Java 23新特性
    • 一、引言
    • 二、Markdown文档注释(JEP 467)
      • 示例
    • 三、ZGC:默认的分代模式(JEP 474)
      • 1. 为什么要引入分代模式
      • 2. 使用分代模式的优势
      • 3. 如何启用分代模式
    • 四、隐式声明的类和实例主方法(JEP 477)
      • 示例
    • 五、使用示例
    • 六、总结

Java 23新特性

在这里插入图片描述

一、引言

Java 23于2024年9月发布,带来了诸多新特性和改进,这些特性不仅提升了Java语言的表达能力,还优化了性能,改善了开发者的编程体验。本文将重点介绍其中几个关键特性,并通过代码示例帮助读者更好地理解和应用这些新特性。

二、Markdown文档注释(JEP 467)

Java 23正式引入了Markdown文档注释,允许开发者在JavaDoc中使用Markdown语法编写文档注释。这使得文档的格式更加简洁易读,同时也支持HTML元素和JavaDoc标记,方便开发者在不牺牲现有功能的情况下,提升文档的可读性和编写效率。

示例

传统的JavaDoc注释:

/*** Returns the ceiling modulus of the {@code long} and {@code int} arguments.* <p>* The ceiling modulus is {@code r = x – (ceilDiv(x, y) * y)},* has the opposite sign as the divisor {@code y} or is zero, and* is in the range of {@code -abs(y) < r < +abs(y)}.** @param x the dividend* @param y the divisor* @return the ceiling modulus {@code x – (ceilDiv(x, y) * y)}*/

使用Markdown语法的JavaDoc注释:

/// Returns the ceiling modulus of the `long` and `int` arguments.
///
/// The ceiling modulus is `r = x – (ceilDiv(x, y) * y)`,
/// has the opposite sign as the divisor `y` or is zero, and
/// is in the range of `-abs(y) < r < +abs(y)`.
///
/// @param x the dividend
/// @param y the divisor
/// @return the ceiling modulus `x – (ceilDiv(x, y) * y)`

三、ZGC:默认的分代模式(JEP 474)

Java 23引入了JEP 474,将Z垃圾收集器(ZGC)的默认模式切换为分代模式,并计划在未来版本中移除非分代模式。

1. 为什么要引入分代模式

  • 性能优化:分代模式通过将内存划分为年轻代和老年代,针对不同生命周期的对象进行更高效的垃圾回收。年轻代的对象通常生命周期较短,会被频繁回收;而老年代的对象生命周期较长,回收频率较低。这种模式可以显著减少垃圾回收的停顿时间,提升应用的响应速度。
  • 降低维护成本:维护两种模式(分代和非分代)会增加开发和维护的复杂性。通过专注于分代模式,Java团队可以更高效地开发新特性和优化现有功能。

2. 使用分代模式的优势

  • 减少停顿时间:分代模式通过更频繁地回收年轻代对象,减少了垃圾回收的停顿时间,特别适合对延迟敏感的应用。
  • 提升吞吐量:由于年轻代对象的快速回收,分代模式可以更高效地管理内存,提升应用的整体吞吐量。

3. 如何启用分代模式

在Java 23之前,启用ZGC的默认模式是非分代模式,需要显式指定分代模式:

bash复制

java -XX:+UseZGC -XX:+ZGenerational ...

从Java 23开始,ZGC的默认模式已经是分代模式,只需启用ZGC即可:

bash复制

java -XX:+UseZGC ...

如果仍需使用非分代模式,可以通过以下命令显式禁用分代模式,但会收到弃用警告:

bash复制

java -XX:+UseZGC -XX:-ZGenerational ...

使用非分代模式时,会收到以下警告:

复制

警告: 选项 ZGenerational 已被弃用,将在未来版本中移除。
警告: 非分代模式已被弃用,计划在未来版本中移除。

四、隐式声明的类和实例主方法(JEP 477)

Java 23继续对隐式声明的类和实例主方法进行第三次预览。这一特性允许在没有显式声明类的情况下编写主方法,简化了初学者的编程体验。开发者可以在同一个文件中定义多个main方法,Java编译器会根据参数类型和修饰符选择合适的方法。

示例

static void main(String[] args) {System.out.println("static main with args");
}void main() {System.out.println("main without args");
}

编译和运行时,需要使用--enable-preview选项:

bash复制

javac --release 23 --enable-preview Main.java
java --enable-preview Main

五、使用示例

以下是一个综合示例,展示如何在Java 23中使用Markdown文档注释和隐式声明的主方法:

/// 一个简单的示例类
public class Example {/// 主方法static void main(String[] args) {System.out.println("Hello, Java 23!");}
}

六、总结

Java 23通过引入Markdown文档注释、改进ZGC的分代模式以及对隐式声明的类和实例主方法的持续改进,进一步提升了开发者的编程体验和代码的可维护性。这些新特性不仅让代码更加简洁易读,还优化了性能,为Java开发者带来了更多的便利和效率。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • JDK 23的新特性摘要总结 - 教程文章 - 时代Java,与您同行!
  • Java23的新特性_java 23-CSDN博客

相关文章:

Java 23新特性

文章目录 Java 23新特性一、引言二、Markdown文档注释&#xff08;JEP 467&#xff09;示例 三、ZGC&#xff1a;默认的分代模式&#xff08;JEP 474&#xff09;1. 为什么要引入分代模式2. 使用分代模式的优势3. 如何启用分代模式 四、隐式声明的类和实例主方法&#xff08;JE…...

bat脚本实现自动化漏洞挖掘

bat脚本 BAT脚本是一种批处理文件&#xff0c;可以在Windows操作系统中自动执行一系列命令。它们可以简化许多日常任务&#xff0c;如文件操作、系统配置等。 bat脚本执行命令 echo off#下面写要执行的命令 httpx 自动存活探测 echo off httpx.exe -l url.txt -o 0.txt nuc…...

[创业之路-285]:《产品开发管理-方法.流程.工具 》-1- IPD的功能列表以及导入步骤

一、概述&#xff1a; 对于没有IPD&#xff08;集成产品开发&#xff09;流程的公司来说&#xff0c;导入IPD需要循序渐进、有序进行&#xff0c;而不是一步到位。这是因为IPD不仅仅是一种新的产品开发流程&#xff0c;它还涉及到公司文化、组织结构、团队协作方式以及思维方式…...

Redis命令:列表模糊删除详解

前言 在Redis中&#xff0c;列表&#xff08;List&#xff09;是一种非常常用的数据结构&#xff0c;允许存储多个有序的元素。然而&#xff0c;在实际应用中&#xff0c;可能会遇到需要删除列表中符合某种模式的元素的需求。本文将详细介绍如何在Redis中实现列表的模糊删除。…...

Day36-【13003】短文,数组的行主序方式,矩阵的压缩存储,对称、三角、稀疏矩阵和三元组线性表,广义表求长度、深度、表头、表尾等

文章目录 本次课程内容第四章 数组、广义表和串第一节 数组及广义表数组的基本操作数组的顺序存储方式-借用矩阵行列式概念二维数组C语言对应的函数-通常行主序方式 矩阵的压缩存储对称矩阵和三角矩阵压缩存储后&#xff0c;采用不同的映射函数稀疏矩阵-可以构成三元组线性表三…...

大数据sql查询速度慢有哪些原因

1.索引问题 可能缺少索引&#xff0c;也有可能是索引不生效 2.连接数配置&#xff1a;连接数过少/连接池比较小 连接数过 3.sql本身有问题&#xff0c;响应比较慢&#xff0c;比如多表 4.数据量比较大 -这种最好采用分表设计 或分批查询 5.缓存池大小 可能是缓存问题&#xff…...

文件 I/O 和序列化

文件I/O C#提供了多种方式来读写文件&#xff0c;主要通过System.IO命名空间中的类来实现&#xff0c;下方会列一些常用的类型&#xff1a; StreamReader/StreamWriter&#xff1a;用于以字符为单位读取或写入文本文件。 BinaryReader/BinaryWriter&#xff1a;用于以二进制格…...

机器学习中的关键概念:通过SKlearn的MNIST实验深入理解

欢迎来到我的主页&#xff1a;【Echo-Nie】 本篇文章收录于专栏【机器学习】 1 sklearn相关介绍 Scikit-learn 是一个广泛使用的开源机器学习库&#xff0c;提供了简单而高效的数据挖掘和数据分析工具。它建立在 NumPy、SciPy 和 matplotlib 等科学计算库之上&#xff0c;支持…...

HELLOCTF反序列化靶场全解

level 2 <?php/* --- HelloCTF - 反序列化靶场 关卡 2 : 类值的传递 --- HINT&#xff1a;尝试将flag传递出来~# -*- coding: utf-8 -*- # Author: 探姬 # Date: 2024-07-01 20:30 # Repo: github.com/ProbiusOfficial/PHPSerialize-labs # email: adminhello-ctf.com…...

十二、Docker Compose 部署 SpringCloudAlibaba 微服务

一、部署基础服务 0、项目部署结构 项目目录结构如下: /home/zhzl_hebei/ ├── docker-compose.yml └── geochance-auth/└── Dockerfile└── geochance-auth.jar └── geochance-system/└── Dockerfile└── geochance-system.jar └── geochance-gateway/…...

VUE之插槽

1、默认插槽 <template><div class"father"></div><h3>父组件</h3><div class"content"><Category title"热门游戏列表"><ul><li v-for"g in games" :key"g.id">{{…...

4. Go结构体使用

1、结构体的简介 结构体&#xff08;Struct&#xff09;是编程语言中常见的一种复合数据类型&#xff0c;它将不同类型的数据元素&#xff08;成员&#xff09;组合成一个单一的实体。通过结构体&#xff0c;程序员可以将具有不同类型和性质的信息绑定到一个对象中&#xff0c…...

版本控制的重要性及 Git 入门

版本控制&#xff1a;软件开发的基石 在软件开发的浩瀚宇宙中&#xff0c;版本控制无疑是那颗最为闪耀的恒星&#xff0c;照亮了整个开发过程&#xff0c;成为现代软件开发不可或缺的基石。 历史追溯&#xff0c;定位问题根源 版本控制就像是一位不知疲倦的史官&#xff0c;…...

[NKU]C++安装环境 VScode

bilibili安装教程 vscode 关于C/C的环境配置全站最简单易懂&#xff01;&#xff01;大学生及初学初学C/C进&#xff01;&#xff01;&#xff01;_哔哩哔哩_bilibili 1安装vscode和插件 汉化插件 ​ 2安装插件 2.1 C/C 2.2 C/C Compile run ​ 2.3 better C Syntax ​ 查看已…...

deepseek本地部署

DeepSeek本地部署详细指南 DeepSeek作为一款开源且性能强大的大语言模型&#xff0c;提供了灵活的本地部署方案&#xff0c;让用户能够在本地环境中高效运行模型&#xff0c;同时保护数据隐私&#xff0c;这里记录自己DeepSeek本地部署流程。 主机环境 cpu:amd 7500Fgpu:406…...

网络编程day1

实例&#xff1a; struct sockaddr_in addr {0};//初始化 addr.sin_family AF_INET;//设置地址族 addr.sin_port htons(8888);//设置端口号 addr.sin_addr.s_addr inet_addr("192.168.1.1"); //设置ip地址 bind(sock,(struct sockaddr *)&addr,sizeof(ad…...

QFileDialog::getOpenFileName(this,“文件对话框“,“.“,“c++ files(*.cpp);;“); 文件对话框显示乱码

在使用 QFileDialog::getOpenFileName 时&#xff0c;如果文件对话框显示乱码&#xff0c;通常是因为编码问题。Qt 默认使用 UTF-8 编码&#xff0c;但如果你的系统或源代码文件的编码不一致&#xff0c;可能会导致乱码。 以下是几种可能的解决方法&#xff1a; 1. 确保源代码…...

绿联NAS安装cpolar内网穿透工具实现无公网IP远程访问教程

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 本文主要介绍如何在绿联NAS中使用ssh远程连接后&#xff0c;使用一行代码快速安装cpolar内网穿透工具&#xff0c;轻松实现随时随地远程访问本地内网中的绿联NAS&#xff0c;无需公网…...

C++学习——缺省参数、重载函数、引用

目录 前言 一、缺省参数 1.1概念 1.2写法 1.3半缺省 1.4使用 二、重载函数 2.1.概念 2.2类型 2.3参数 2.4顺序 2.5问题 2.6原理 三、引用 1、引用是什么&#xff1f; 2、引用的使用方法 3、引用特性 1、引用在定义的时候必须要初始化 2、一个变量会有多个引用…...

web-JSON Web Token-CTFHub

前言 在众多的CTF平台当中&#xff0c;作者认为CTFHub对于初学者来说&#xff0c;是入门平台的不二之选。CTFHub通过自己独特的技能树模块&#xff0c;可以帮助初学者来快速入门。具体请看官方介绍&#xff1a;CTFHub。 作者更新了CTFHub系列&#xff0c;希望小伙伴们多多支持…...

自适应陷波器的FPGA实现 作用:消除特定频率的干扰信号 包含quartus源码与models...

自适应陷波器的FPGA实现 作用:消除特定频率的干扰信号 包含quartus源码与modelsim仿真自适应陷波器 FPGA 实现 —— 从算法到硬件的完整技术解码一、引言在通信、雷达、音频以及工业测控等场景中&#xff0c;窄带干扰往往比宽带噪声更难处理&#xff1a;它能量集中、时变性强&…...

Atmosphere:重新定义Nintendo Switch自制固件的革命性框架

Atmosphere&#xff1a;重新定义Nintendo Switch自制固件的革命性框架 【免费下载链接】Atmosphere Atmosphre is a work-in-progress customized firmware for the Nintendo Switch. 项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere 你是否曾想过&#x…...

KOReader终极指南:如何打造你的完美电子墨水屏阅读体验

KOReader终极指南&#xff1a;如何打造你的完美电子墨水屏阅读体验 【免费下载链接】koreader An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices 项目地址: https:…...

CSS 容器查询:组件级响应式设计

CSS 容器查询&#xff1a;组件级响应式设计代码如诗&#xff0c;容器如画。让我们用容器查询的强大能力&#xff0c;创建真正自适应的组件。什么是容器查询&#xff1f; 容器查询&#xff08;Container Queries&#xff09;是 CSS 中一项革命性的特性&#xff0c;它允许我们根据…...

PingFangSC字体专业配置与高效应用实践指南

PingFangSC字体专业配置与高效应用实践指南 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件&#xff0c;包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 在数字设计领域&#xff0c;字体选择直接影响用户体验与信息传…...

深度学习优化算法详解:从 SGD 到 AdamW

深度学习优化算法详解&#xff1a;从 SGD 到 AdamW 1. 背景与动机 优化算法是深度学习训练的核心&#xff0c;选择合适的优化器直接影响模型的收敛速度和最终性能。本文深入分析主流优化算法的原理和适用场景。 2. 梯度下降家族 2.1 SGD import torch import torch.nn as nnopt…...

ProfControl V8的介绍 组合成为模板

作者&#xff1a;刘凌波链接&#xff1a;环野电子, profcontrolhttp://oa.profcontrol.cn/teaching_V8-7926f783c6.html来源&#xff1a;ProfControl组合为模版1、按下SHIFT键&#xff0c;在地图区域空白处按下鼠标左键不松开&#xff0c;移动鼠标则进入框选模式&#xff0c;让…...

H5-Dooring零基础入门终极指南:无需编码制作专业H5页面

H5-Dooring零基础入门终极指南&#xff1a;无需编码制作专业H5页面 【免费下载链接】h5-Dooring H5 Page Maker, H5 Editor, LowCode. Make H5 as easy as building blocks. | 让H5制作像搭积木一样简单, 轻松搭建H5页面, H5网站, PC端网站,LowCode平台. 项目地址: https://g…...

VS Code高效调试:自定义console.log快捷键与智能代码片段配置

1. 为什么需要自定义console.log快捷键&#xff1f; 每次调试JavaScript代码时&#xff0c;手动输入完整的console.log语句实在是一件让人抓狂的事情。想象一下这样的场景&#xff1a;你正在调试一个复杂的Vue组件&#xff0c;需要快速查看某个变量的值。按照传统方式&#xf…...

开源工具Minder:用思维导图释放创意与效率的全功能解决方案

开源工具Minder&#xff1a;用思维导图释放创意与效率的全功能解决方案 【免费下载链接】Minder Mind-mapping application for Elementary OS 项目地址: https://gitcode.com/gh_mirrors/min/Minder 在信息爆炸的时代&#xff0c;您是否经常感到思绪混乱、创意难以捕捉…...