news 2026/7/14 7:33:27

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/7/7 21:08:41

上位机软件崩溃日志分析:系统学习故障诊断流程

以下是对您提供的博文《上位机软件崩溃日志分析:系统学习故障诊断流程》的 深度润色与专业重构版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,全文以一位有15年工业软件开发+现场支持经验的资深工程师口吻自然叙述; ✅ 所有模块有机融合,无“引言/概述/总结…

作者头像 李华
网站建设 2026/7/9 12:44:25

SiameseUIE中文-base效果验证:中文法律条文引用与解释对象精准匹配

SiameseUIE中文-base效果验证&#xff1a;中文法律条文引用与解释对象精准匹配 1. 为什么法律文本需要专用信息抽取能力 你有没有遇到过这样的场景&#xff1a;在处理一份上百页的司法判决书时&#xff0c;要手动翻找“援引了哪几条《刑法》第XX条”“该条款具体解释的是什么…

作者头像 李华
网站建设 2026/7/3 11:26:41

项目调试中I2C HID设备报错代码10的完整诊断流程

以下是对您提供的博文内容进行 深度润色与结构化重构后的技术文章 。全文已彻底去除AI生成痕迹,采用资深嵌入式系统工程师+固件开发者双重视角,以真实调试现场的语言风格重写;逻辑层层递进、案例具象可感、术语精准但不堆砌,并融合大量一线实战经验与“踩坑”反思。所有技…

作者头像 李华
网站建设 2026/7/4 0:39:10

图解说明PCB铺铜对EMI抑制的影响原理

以下是对您提供的博文进行 深度润色与专业重构后的版本 。我以一位深耕高速PCB设计与EMC实战十余年的工程师视角,将原文中偏教科书式的结构、术语堆砌和AI痕迹显著的表达,彻底转化为 真实项目现场的语言节奏、问题驱动的逻辑流、带温度的技术判断与可落地的设计直觉 。 …

作者头像 李华
网站建设 2026/7/13 17:31:16

Qwen3-TTS-Tokenizer-12Hz效果展示:不同信噪比下鲁棒性编解码对比实验集

Qwen3-TTS-Tokenizer-12Hz效果展示&#xff1a;不同信噪比下鲁棒性编解码对比实验集 1. 为什么这次实验值得你花三分钟看完&#xff1f; 你有没有遇到过这样的问题&#xff1a;语音合成系统在安静环境下效果惊艳&#xff0c;可一旦加入空调声、键盘敲击声、甚至远处人声&…

作者头像 李华
网站建设 2026/7/2 3:35:53

GLM-4v-9b实战教程:构建教育AI助教——试卷图片自动批改系统

GLM-4v-9b实战教程&#xff1a;构建教育AI助教——试卷图片自动批改系统 1. 为什么选GLM-4v-9b做试卷批改&#xff1f; 你有没有遇到过这样的场景&#xff1a;老师拍下学生手写的数学试卷&#xff0c;想快速知道哪道题答对了、哪道题步骤有误、哪里漏写了单位&#xff1f;传统…

作者头像 李华