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博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【redis】数据类型之string

字符串类型是Redis最基础的数据结构。首先key都是字符串类型&#xff0c;而且其他几种数据结构都是在字符串类型基础上构建的&#xff0c;所以字符串类型能为其他四种数据结构的学习打下基础。 字符串类型的值实际可以是字符串&#xff08;简单的字符串、复杂的字符串&#xf…

前部分知识复习05

一、多级渐远贴图MipMap 选择贴图&#xff0c;可以勾选贴图的多级渐远效果 [IntRange]_MipMap("MipMap",Range(0,12))0 //多级渐远贴图的LOD调节滑杆 _MipMapTexture("MipMapTexture",2D)"white"{} //定义多级渐远贴图 多级渐远贴图的采样…

[高等数学]曲率

一、知识点 &#xff08;一&#xff09;弧微分 设函数 f ( x ) f(x) f(x) 在区间 ( a , b ) (a,b) (a,b) 内具有连续导数。 在曲线 y f ( x ) yf(x) yf(x) 上取固定点 M 0 ( x 0 , y 0 ) M_0(x_0,y_0) M0​(x0​,y0​) 作为度量弧长的基点&#xff0c;并规定依 x x x 增…

openGauss 3.0 数据库在线实训课程2:学习客户端工具gsql的使用

openGauss数据库状态查看 前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见&#xff1a;openGauss 3.0.0数据库在线实训课程 学习目标 学习openGauss数据库客户端工具gsql的使用。 课程作业 gsql是openGauss提供在命令行下运行的数据库连接工具&am…

模拟实现string类

目录 一.构造与析构函数 二.基础小功能的实现 1.clear 2.c_str 3外部对私有的查看 三.实现string的迭代器 四.string的增删查改 1.push_back尾插 1.1reserve扩容 1.2尾插 3.运算符重载 4.insert在任意位置插入 5.erase删除 5.1npos的处理 5.2函数的实现 6.find查…

机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战

前一篇文章&#xff0c;使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课&#xff1a;引领人工智能新时代【梗直哥瞿炜】 线性代数、微积分、概率论 …

记录一下 在Mac下用pyinstallter 打包 Django项目

安装: pip install pyinstaller 在urls.py from SheepMasterOneToOne import settings from django.conf.urls.static import staticurlpatterns [path("admin/", admin.site.urls),path(generate_report/export/, ReportAdmin(models.Report, admin.site).generat…

UE求职Demo开发日志#23 线性任务系统数据层实现

1 按上期设计创建数据结构&#xff08;做了一些修改&#xff09; USTRUCT(BlueprintType) struct ARPG_CPLUS_API FQuestNode {GENERATED_USTRUCT_BODY()// 记录前置节点IDUPROPERTY(EditAnywhere, BlueprintReadWrite,Category"QuestNode")TArray<int> Prede…

mysql8安装时提示-缺少Microsoft Visual C++ 2019 x64 redistributable

MySQL8.0安装包mysql-8.0.1-winx64进行安装&#xff0c;提示&#xff1a;This application requires Visual Studio 2019 x64Redistributable, Please install the Redistributable then runthis installer again。出现这个错误是因为我们电脑缺少Microsoft Visual C 这个程序&…

K8s 分布式存储后端(K8s Distributed Storage Backend)

K8s 分布式存储后端 在 K8s 中实现分布式存储后端对于管理跨集群的持久数据、确保高可用性、可扩展性和可靠性至关重要。在 K8s 环境中&#xff0c;应用程序通常被容器化并跨多个节点部署。虽然 K8s 可以有效处理无状态应用程序&#xff0c;但有状态应用程序需要持久存储来维护…

生产环境超实用shell脚本一

生产环境超实用shell脚本一 Shell脚本作为一种强大的自动化工具&#xff0c;能够帮助运维人员轻松应对各种复杂的任务。 本文将为您介绍服务器健康检查、日志清理、备份以及监控等多个方面&#xff0c;并详细阐述每个脚本的功能和应用场景&#xff0c;助力您提升运维效率&…

IM 即时通讯系统-46-OpenIM 提供了专为开发者设计的开源即时通讯解决方案

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术&#xff0c;提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

spy-debugger + Charles 调试移动端/内嵌小程序H5

简介说明&#xff1a; PC端可以用F12进行console等进行调试&#xff0c;但移动端App中使用webview就无法进行实时调试&#xff0c;针对这种情况 1. 安装 全局安装 spy-debugger sudo npm install spy-debugger -g // window不用加sudo2. spy-debugger 证书 其实spy-debugg…

深度整理总结MySQL——SQL的执行顺序和流程

SQL的执行顺序和流程 SQL的执行顺序执行一条select语句,发生了什么呢连接器查询缓存解析SQL执行SQL预处理器优化器执行器 总结 SQL的执行顺序 这是一条标准的查询语句: 但实际上并不是从上到下去解析的,真实的执行顺序是: 我们先执行from,join来确定表之间的连接关系&#x…

使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;的应用逐渐成为技术热点&#xff0c;而 DeepSeek 作为国产开…

Redis有哪些常用应用场景?

大家好&#xff0c;我是锋哥。今天分享关于【Redis有哪些常用应用场景?】面试题。希望对大家有帮助&#xff1b; Redis有哪些常用应用场景? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 是一个高性能的键值对存储数据库&#xff0c;它有许多应用场景&…

115,【7】 攻防世界 web fileinclude

进入靶场 试着访问了几个文件&#xff0c;都没得到信息&#xff0c;f12看看源码 还真有 <?php // 检查是否开启了错误显示功能 // ini_get 函数用于获取 PHP 配置选项的值&#xff0c;这里检查 display_errors 选项是否开启 if( !ini_get(display_errors) ) {// 如果错误…

SpringBoot开发(五)SpringBoot接收请求参数

1. SpringBoot接收请求参数 1.1. 获取参数的方式 &#xff08;1&#xff09;通过request对象获取参数   &#xff08;2&#xff09;RequestParam(针对请求头方式为x-www-form-ur lencoded)   &#xff08;3&#xff09;RequestBody(针对请求头方式为application/json)   …

如何理解多态,以及由此引出的抽象类和纯虚函数

文章目录 1. 多态2. 抽象类和纯虚函数 1. 多态 静态多态&#xff1a; 动态多态&#xff1a; #include <iostream> #include <string> using namespace std;// 动物的基类 class Animal { public:Animal(string name) : _name(name) {}virtual void bark() {} …

java基础2(黑马)

一、变量里的数据在计算机中的存储原理 1.二进制 .二进制&#xff1a;只有0、1&#xff0c; 按照逢二进一的方式表示数据。 十进制数字11转换为&#xff1a;1011 方法&#xff1a;除二取余法 计算机中表示数据的最小单元&#xff0c;一个字节&#xff08;Byte&#xff0c;简…