Java 23新特性

news2025/2/4 10:46:57

文章目录

  • 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.coloradmin.cn/o/2291745.html

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

相关文章

二叉树--链式存储

1我们之前学了二叉树的顺序存储&#xff08;这种顺序存储的二叉树被称为堆&#xff09;&#xff0c;我们今天来学习一下二叉树的链式存储&#xff1a; 我们使用链表来表示一颗二叉树&#xff1a; ⽤链表来表⽰⼀棵⼆叉树&#xff0c;即⽤链来指⽰元素的逻辑关系。通常的⽅法是…

C++,vector:动态数组的原理、使用与极致优化

文章目录 引言一、vector 的核心原理1. 底层数据结构1.1 内存布局的三指针模型1.2 内存布局示意图 2. 动态扩容机制2.1 动态扩容过程示例 3. 关键结论4. 代码验证内存布局5. 总结 二、vector 的使用方法1. 基本操作2. 迭代器与范围遍历 三、vector 的注意事项1. 迭代器失效2. 性…

bootstrap.yml文件未自动加载问题解决方案

在添加bootstrap.yml文件后,程序未自动扫描到,即图标是这样的: 查了一些资料,是缺少bootstrap相关依赖,虽然已经添加了spring-cloud-context依赖,但是这个依赖并未引入bootstrap依赖,可能是版本问题,需要手动引入 <dependency><groupId>org.springframework.cloud&…

物联网 STM32【源代码形式-ESP8266透传】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

一、MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种基于发布/订阅模式的轻量级通讯协议&#xff0c;构建于TCP/IP协议之上。它最初由IBM在1999年发布&#xff0c;主要用于在硬件性能受限和网络状况不佳的情…

计算机网络 性能指标相关

目录 吞吐量 时延 时延带宽积 往返时延RTT 利用率 吞吐量 时延 时延带宽积 往返时延RTT 利用率

软件测试02----用例设计方法

今天目标 1.能对穷举场景设计测试点 2.能对限定边界规则设计测试点 3.能对多条件依赖关系进行设计测试点 4.能对项目业务进行设计测试点 一、解决穷举场景 重点&#xff1a;使用等价类划分法 1.1等价类划分法 重点&#xff1a;有效等价和单个无效等价各取1个即可。 步骤&#…

冷启动+强化学习:DeepSeek-R1 的原理详解——无需监督数据的推理能力进化之路

本文基于 DeepSeek 官方论文进行分析,论文地址为:https://github.com/deepseek-ai/DeepSeek-R1/blob/main/DeepSeek_R1.pdf 有不足之处欢迎评论区交流 原文翻译 在阅读和理解一篇复杂的技术论文时,逐字翻译是一个重要的步骤。它不仅能帮助我们准确把握作者的原意,还能为后续…

014-STM32单片机实现矩阵薄膜键盘设计

1.功能说明 本设计主要是利用STM32驱动矩阵薄膜键盘&#xff0c;当按下按键后OLED显示屏上会对应显示当前的按键键值&#xff0c;可以将此设计扩展做成电子秤、超市收银机、计算器等需要多个按键操作的单片机应用。 2.硬件接线 模块管脚STM32单片机管脚矩阵键盘行1PA0矩阵键盘…

Spring Boot 2 快速教程:WebFlux处理流程(五)

WebFlux请求处理流程 下面是spring mvc的请求处理流程 具体步骤&#xff1a; 第一步&#xff1a;发起请求到前端控制器(DispatcherServlet) 第二步&#xff1a;前端控制器请求HandlerMapping查找 Handler &#xff08;可以根据xml配置、注解进行查找&#xff09; 匹配条件包括…

unity学习25:用 transform 进行旋转和移动,简单的太阳地球月亮模型,以及父子级关系

目录 备注内容 1游戏物体的父子级关系 1.1 父子物体 1.2 坐标关系 1.3 父子物体实际是用 每个gameobject的tranform来关联的 2 获取gameObject的静态数据 2.1 具体命令 2.2 具体代码 2.3 输出结果 3 获取gameObject 的方向 3.1 游戏里默认的3个方向 3.2 获取方向代…

CH340G上传程序到ESP8266-01(S)模块

文章目录 概要ESP8266模块外形尺寸模块原理图模块引脚功能 CH340G模块外形及其引脚模块引脚功能USB TO TTL引脚 程序上传接线Arduino IDE 安装ESP8266开发板Arduino IDE 开发板上传失败上传成功 正常工作 概要 使用USB TO TTL&#xff08;CH340G&#xff09;将Arduino将程序上传…

DeepSeekMoE:迈向混合专家语言模型的终极专业化

一、结论写在前面 论文提出了MoE语言模型的DeepSeekMoE架构&#xff0c;目的是实现终极的专家专业化(expert specialization)。通过细粒度的专家分割和共享专家隔离&#xff0c;DeepSeekMoE相比主流的MoE架构实现了显著更高的专家专业化和性能。从较小的2B参数规模开始&#x…

扩散模型(二)

相关阅读&#xff1a;扩散模型&#xff08;一&#xff09; Parameterization of L t L_t Lt​ for Training Loss 回想一下&#xff0c;我们需要训练一个神经网络来近似反向扩散过程中的条件概率分布&#xff0c;即, p θ ( x t − 1 ∣ x t ) N ( x t − 1 ; μ θ ( x t…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.18 对象数组:在NumPy中存储Python对象

2.18 对象数组&#xff1a;在NumPy中存储Python对象 目录 #mermaid-svg-shERrGOBuM2rBzeB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-shERrGOBuM2rBzeB .error-icon{fill:#552222;}#mermaid-svg-shERrGOBuM2rB…

LabVIEW双光子成像系统:自主创新,精准成像,赋能科研

双光子成像系统&#xff1a;自主创新&#xff0c;精准成像&#xff0c;赋能科研 第一部分&#xff1a;概述 双光子成像利用两个低能量光子同时激发荧光分子&#xff0c;具有深层穿透、高分辨率、低光损伤等优势。它能实现活体深层组织的成像&#xff0c;支持实时动态观察&…

bagging框架

bagging 1 bagging介绍 Bagging的全称是Bootstrap Aggregating&#xff0c;其思想是通过将许多相互独立的学习器的结果进行结合&#xff0c;从而提高整体学习器的泛化能力 bagging框架流程&#xff1a;首先&#xff0c;它从原始数据集中使用有放回的随机采样方式抽取多个子集…

《机器学习数学基础》补充资料:仿射变换

本文是对《机器学习数学基础》 第 2 章 2.2.4 节齐次坐标系的内容拓展。 1. 名称的来源 仿射&#xff0c;是英文单词 affine 的中文翻译。 单词 affine&#xff0c;读音&#xff1a;[ə’faɪn]。来自于英语 affinity。英语词根 fin 来自于拉丁语 finis&#xff0c;表示“边…

冲刺一区!挑战7天完成一篇趋势性分析GBD DAY1-7

Day1. 公开数据库的挖掘太火热了,其中GBD数据库的挖掘又十分的火爆.那我就来挑战一篇GBD、一篇关于趋势性分析的GBD&#xff01; GBD数据库挖掘是目前的四大刊常客&#xff0c;经常出现在顶级期刊上面。这个数据库亮点就是&#xff1a;可视化&#xff0c;统计学简单、而数据可…

掌握API和控制点(从Java到JNI接口)_36 JNI开发与NDK 04

4、 *.so的入口函数&#xff1a;JNI_OnLoad() VM (virtual machine)的角色 Java代码在VM上执行。在执行Java代码的过程中&#xff0c;如果Java需要与本地代码(*.so)沟通时&#xff0c; VM就会把*.so視为插件<Tn>而加载到VM里。然后让Java函数呼叫到这插件<Tn>里的…

Spring Bean 容器

技术成长&#xff0c;是对场景设计细节不断的雕刻&#xff01; 你觉得自己的技术什么时候得到了快速的提高&#xff0c;是CRUD写的多了以后吗&#xff1f;想都不要想&#xff0c;绝对不可能&#xff01;CRUD写的再多也只是能满足你作为一个搬砖工具人&#xff0c;敲击少逻辑流…