news 2026/4/23 12:56:29

JDK新特性梳理:从JDK8到JDK21的演进

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JDK新特性梳理:从JDK8到JDK21的演进

概述

JDK8 作为业界经典版本,至今仍是企业中使用最广泛的 JDK 版本。随着 JDK 版本迭代,从 JDK9 开始,JDK 改为每半年推出新版本,每三年推出一个 。本文以 JDK21(最新 LTS 版本)为准,梳理 JDK8 之后的重要新特性,帮助开发者了解 Java 生态的发展方向。


一、语法增强

1. 文本块(Text Blocks)

  • 使用三个引号声明长文本块("""
  • 支持String.format格式化
  • 新增转义字符:\\(行连接)、\\s(单个空白字符)
Stringquery=""" SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = ' %s ' \\ ORDER BY `EMP_ID`, `LAST_NAME`; """;System.out.println(String.format(query,"合肥"));

2. Switch 表达式增强

  • 扩展case匹配类型
  • 支持yield关键字提供流程控制
  • 语法更简洁,可替代复杂if-else
inttmp=switch(name){case"李白","杜甫","白居易"->1;case"苏轼","辛弃疾"->2;default->{System.out.println("其他朝代诗人");yield3;}};

3. var 自动类型推断

  • 用于局部变量类型推断
  • 限制:不能用于属性、函数返回值、类型不明确的 Lambda 表达式
varnums=newint[]{1,2,3,4,5};// 自动推断为int[]varsum=Arrays.stream(nums).sum();// 自动推断为int

二、重要扩展功能

1. 记录类(record)

  • 用于表示不可变数据结构
  • 自动生成构造器、getter 方法、equalshashCodetoString
  • 不能通过反射修改值
publicrecordPoint(intx,inty){}Pointp=newPoint(10,20);System.out.println(p.x()+"===="+p.y());

2. 隐藏类(Hidden Classes)

  • 不能被其他类直接使用的类
  • 通过读取目标类字节码创建
  • 用于动态类生成,替代 ASM 等字节码操作技术
byte[]classInBytes=Base64.getDecoder().decode(CLASS_INFO);Class<?>proxy=MethodHandles.lookup().defineHiddenClass(classInBytes,true,MethodHandles.Lookup.ClassOption.NESTMATE).lookupClass();

3. 密封类(Sealed Classes)

  • 限制父类可以被哪些子类继承
  • 通过sealed修饰,配合permits指定可继承的类
  • 三种子类类型:final(不可再继承)、non-sealed(可继承)、sealed(可继续密封)
publicsealedabstractclassShapepermitsCircle,Rectangle,Square{publicabstractintlines();}publicfinalclassCircleextendsShape{@Overridepublicintlines(){return0;}}

4. 虚拟线程(Virtual Threads)

  • 用户态线程,以用户态多个线程对应内核态一个真实线程
  • 极大提升多线程并发能力
  • 通过Executors.newVirtualThreadPerTaskExecutor()创建
try(varexecutor=Executors.newVirtualThreadPerTaskExecutor()){IntStream.range(0,10_000).forEach(i->{executor.submit(()->{System.out.println("Virtual Task"+i+" is running");Thread.sleep(Duration.ofSeconds(1));returni;});});}

三、JDK 模块化机制

1. 什么是模块化

  • JDK9 开始引入
  • 模块化后,JDK 内部功能以module形式存在
  • 可使用java --list-modules查看系统模块

2. 模块化与类加载机制

  • 类加载器调整:PlatformClassLoader替换ExtClassLoader
  • 双亲委派机制调整:类加载请求优先委派给对应模块的类加载器

3. 自己实现一个模块

  • 在模块根目录创建module-info.java
  • 使用requires声明依赖
  • 使用exportsopens声明对外 API
  • 使用providesuses实现服务提供者接口
moduleroy.demoModule2{exportscom.roy.service;providescom.roy.service.HelloServicewithcom.roy.service.impl.MorningHello,com.roy.service.impl.EveningHello;}

四、JDK 的向量计算 API

1. 向量计算简介

  • 利用现代 CPU 的 SIMD 指令进行高效并行计算
  • SIMD:Single Instruction Multiple Data(单指令多数据)

2. 使用方式

  • 需要引入模块:requires jdk.incubator.vector;
  • 使用VectorSpecies定义向量形状
  • 使用向量操作进行高效计算
VectorSpecies<Float>species=FloatVector.SPECIES_256;varva=FloatVector.fromArray(species,newfloat[]{1,2,3,4,5,6,7,8,9},1);varvb=FloatVector.fromArray(species,newfloat[]{8,7,6,5,4,3,2,1},0);varvc=va.mul(vb);System.out.println(vc);

五、GC 垃圾回收器优化

1. GC 算法演进

  • JDK15:默认废弃偏向锁
  • JDK17:仍可手动开启偏向锁(XX:+UseBiasedLocking
  • JDK21:移除偏向锁相关参数

2. 垃圾回收器变化

  • CMS 被废弃(JDK14 彻底删除)
  • SerialOld 被废弃
  • ZGC 转正(JDK11 引入,JDK15 正式使用)
  • Shenandoah 集成(非官方,但被 Oracle 接受)

3. 当前默认 GC

  • JDK21 版本默认垃圾回收器依然是 G1

六、GraalVM

1. GraalVM 简介

  • 由 Java 语言编写,用于替代 HotSpot 的 C1/C2 编译器
  • 可将 Java 应用程序编译成机器语言,绕过 class 文件翻译过程
  • 提升应用启动速度

2. GraalVM 优势

  • 云原生架构下,提升启动速度和预热时间
  • 通过 Truffle 框架可快速实现自定义编程语言
  • 与 Spring 框架逐步兼容

总结

JDK 从 8 到 21 的演进,体现了 Java 生态在语法、性能、模块化和云原生适应性方面的持续进步。虽然 JDK8 仍是企业主流版本,但 JDK17 和 JDK21 作为 LTS 版本,已为 Spring6/SpringBoot3 等框架提供了支持。了解这些新特性,不仅能帮助开发者跟上技术发展,还能在实际项目中选择更优的解决方案,提升应用性能和可维护性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:21:56

Emotion2Vec+ Large功能测评:帧级和整句情感识别哪个更强?

Emotion2Vec Large功能测评&#xff1a;帧级和整句情感识别哪个更强&#xff1f; 在语音情感识别的实际应用中&#xff0c;一个常被忽视却至关重要的选择是&#xff1a;该用整句&#xff08;utterance&#xff09;粒度&#xff0c;还是帧级&#xff08;frame&#xff09;粒度进…

作者头像 李华
网站建设 2026/4/23 6:24:58

通义千问2.5-0.5B-Instruct自动化脚本:CLI工具开发实战

通义千问2.5-0.5B-Instruct自动化脚本&#xff1a;CLI工具开发实战 1. 为什么需要一个专为Qwen2.5-0.5B-Instruct设计的CLI工具 你有没有试过在树莓派上跑大模型&#xff1f;不是那种“能启动就行”的勉强运行&#xff0c;而是真正顺滑、可集成、能写进自动化流程里的体验&am…

作者头像 李华
网站建设 2026/4/23 10:29:47

公园放风筝的小孩被准确识别,细节描述到位

公园放风筝的小孩被准确识别&#xff0c;细节描述到位 本文属于效果展示类技术博客&#xff0c;聚焦于「万物识别-中文-通用领域」模型在真实生活场景中的图像理解能力。不讲抽象原理&#xff0c;不堆参数指标&#xff0c;只用你一眼就能看懂的案例说话——当一张普通照片上传…

作者头像 李华
网站建设 2026/4/18 15:25:22

MusePublic多场景落地:高端酒店集团AI生成各门店专属艺术迎宾人像

MusePublic多场景落地&#xff1a;高端酒店集团AI生成各门店专属艺术迎宾人像 1. 项目背景&#xff1a;当艺术人像遇见酒店空间 你有没有在走进一家高端酒店时&#xff0c;被大堂里那幅气质独特的迎宾人像打动过&#xff1f;不是千篇一律的模特图&#xff0c;也不是泛泛而谈的…

作者头像 李华
网站建设 2026/4/22 17:30:51

YOLOv13 FullPAD机制解析:信息流动更顺畅

YOLOv13 FullPAD机制解析&#xff1a;信息流动更顺畅 在目标检测模型持续迭代的今天&#xff0c;YOLO 系列早已超越“快”与“准”的二元竞争&#xff0c;转向对信息本质流动效率的深度重构。YOLOv13 并非简单堆叠模块或扩大参数量&#xff0c;而是从视觉感知的信息通路出发&a…

作者头像 李华