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文档注释(JEP 467)示例 三、ZGC:默认的分代模式(JEP 474)1. 为什么要引入分代模式2. 使用分代模式的优势3. 如何启用分代模式 四、隐式声明的类和实例主方法(JE…...
bat脚本实现自动化漏洞挖掘
bat脚本 BAT脚本是一种批处理文件,可以在Windows操作系统中自动执行一系列命令。它们可以简化许多日常任务,如文件操作、系统配置等。 bat脚本执行命令 echo off#下面写要执行的命令 httpx 自动存活探测 echo off httpx.exe -l url.txt -o 0.txt nuc…...
[创业之路-285]:《产品开发管理-方法.流程.工具 》-1- IPD的功能列表以及导入步骤
一、概述: 对于没有IPD(集成产品开发)流程的公司来说,导入IPD需要循序渐进、有序进行,而不是一步到位。这是因为IPD不仅仅是一种新的产品开发流程,它还涉及到公司文化、组织结构、团队协作方式以及思维方式…...
Redis命令:列表模糊删除详解
前言 在Redis中,列表(List)是一种非常常用的数据结构,允许存储多个有序的元素。然而,在实际应用中,可能会遇到需要删除列表中符合某种模式的元素的需求。本文将详细介绍如何在Redis中实现列表的模糊删除。…...
Day36-【13003】短文,数组的行主序方式,矩阵的压缩存储,对称、三角、稀疏矩阵和三元组线性表,广义表求长度、深度、表头、表尾等
文章目录 本次课程内容第四章 数组、广义表和串第一节 数组及广义表数组的基本操作数组的顺序存储方式-借用矩阵行列式概念二维数组C语言对应的函数-通常行主序方式 矩阵的压缩存储对称矩阵和三角矩阵压缩存储后,采用不同的映射函数稀疏矩阵-可以构成三元组线性表三…...
大数据sql查询速度慢有哪些原因
1.索引问题 可能缺少索引,也有可能是索引不生效 2.连接数配置:连接数过少/连接池比较小 连接数过 3.sql本身有问题,响应比较慢,比如多表 4.数据量比较大 -这种最好采用分表设计 或分批查询 5.缓存池大小 可能是缓存问题ÿ…...
文件 I/O 和序列化
文件I/O C#提供了多种方式来读写文件,主要通过System.IO命名空间中的类来实现,下方会列一些常用的类型: StreamReader/StreamWriter:用于以字符为单位读取或写入文本文件。 BinaryReader/BinaryWriter:用于以二进制格…...
机器学习中的关键概念:通过SKlearn的MNIST实验深入理解
欢迎来到我的主页:【Echo-Nie】 本篇文章收录于专栏【机器学习】 1 sklearn相关介绍 Scikit-learn 是一个广泛使用的开源机器学习库,提供了简单而高效的数据挖掘和数据分析工具。它建立在 NumPy、SciPy 和 matplotlib 等科学计算库之上,支持…...
HELLOCTF反序列化靶场全解
level 2 <?php/* --- HelloCTF - 反序列化靶场 关卡 2 : 类值的传递 --- HINT:尝试将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、结构体的简介 结构体(Struct)是编程语言中常见的一种复合数据类型,它将不同类型的数据元素(成员)组合成一个单一的实体。通过结构体,程序员可以将具有不同类型和性质的信息绑定到一个对象中,…...
版本控制的重要性及 Git 入门
版本控制:软件开发的基石 在软件开发的浩瀚宇宙中,版本控制无疑是那颗最为闪耀的恒星,照亮了整个开发过程,成为现代软件开发不可或缺的基石。 历史追溯,定位问题根源 版本控制就像是一位不知疲倦的史官,…...
[NKU]C++安装环境 VScode
bilibili安装教程 vscode 关于C/C的环境配置全站最简单易懂!!大学生及初学初学C/C进!!!_哔哩哔哩_bilibili 1安装vscode和插件 汉化插件 2安装插件 2.1 C/C 2.2 C/C Compile run 2.3 better C Syntax 查看已…...
deepseek本地部署
DeepSeek本地部署详细指南 DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,这里记录自己DeepSeek本地部署流程。 主机环境 cpu:amd 7500Fgpu:406…...
网络编程day1
实例: 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 时,如果文件对话框显示乱码,通常是因为编码问题。Qt 默认使用 UTF-8 编码,但如果你的系统或源代码文件的编码不一致,可能会导致乱码。 以下是几种可能的解决方法: 1. 确保源代码…...
绿联NAS安装cpolar内网穿透工具实现无公网IP远程访问教程
文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 本文主要介绍如何在绿联NAS中使用ssh远程连接后,使用一行代码快速安装cpolar内网穿透工具,轻松实现随时随地远程访问本地内网中的绿联NAS,无需公网…...
C++学习——缺省参数、重载函数、引用
目录 前言 一、缺省参数 1.1概念 1.2写法 1.3半缺省 1.4使用 二、重载函数 2.1.概念 2.2类型 2.3参数 2.4顺序 2.5问题 2.6原理 三、引用 1、引用是什么? 2、引用的使用方法 3、引用特性 1、引用在定义的时候必须要初始化 2、一个变量会有多个引用…...
web-JSON Web Token-CTFHub
前言 在众多的CTF平台当中,作者认为CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。 作者更新了CTFHub系列,希望小伙伴们多多支持…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
英国云服务器上安装宝塔面板(BT Panel)
在英国云服务器上安装宝塔面板(BT Panel) 是完全可行的,尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎,虽然官方主要面向中国大陆…...
RKNN开发环境搭建2-RKNN Model Zoo 环境搭建
目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. 本…...
