news 2026/6/5 1:16:04

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/5/25 13:48:44

JDK17的GC调优策略:深度解析与实践指南

概述 JDK17 作为当前主流的 LTS&#xff08;长期支持&#xff09;版本&#xff0c;其 GC&#xff08;垃圾回收&#xff09;性能对 Java 应用的执行效率至关重要。本文将系统梳理 JDK17 中 GC 调优的核心策略&#xff0c;包括 JVM 参数分类、内存布局优化、GC 算法选择及参数定制…

作者头像 李华
网站建设 2026/5/15 20:35:41

Nano-Banana惊艳效果展示:10组高还原度产品爆炸图作品集

Nano-Banana惊艳效果展示&#xff1a;10组高还原度产品爆炸图作品集 1. 为什么一张“拆开的产品图”突然变得这么重要&#xff1f; 你有没有过这样的经历&#xff1a;想给客户讲清楚一个设备的内部结构&#xff0c;翻遍官网只找到几张模糊的剖面示意图&#xff1b;或者在做产…

作者头像 李华
网站建设 2026/5/2 9:00:51

手机自动化进阶:Open-AutoGLM自定义任务配置

手机自动化进阶&#xff1a;Open-AutoGLM自定义任务配置 本文聚焦 Open-AutoGLM 的可配置化能力&#xff0c;详解如何通过参数、回调与Prompt定制&#xff0c;让 AI 手机助理真正适配你的工作流——不只“能用”&#xff0c;更要“好用”、“可控”、“可扩展”。 1. 为什么需要…

作者头像 李华
网站建设 2026/5/28 14:31:19

ChatGLM3-6B-128K生成效果:复杂数学证明题的逐步推导过程

ChatGLM3-6B-128K生成效果&#xff1a;复杂数学证明题的逐步推导过程 1. 这不是“能算数”的模型&#xff0c;而是真会“想问题”的推理伙伴 你有没有试过让AI解一道真正的数学证明题&#xff1f;不是填空、不是选择&#xff0c;而是从已知条件出发&#xff0c;一步步写出逻辑…

作者头像 李华
网站建设 2026/5/29 23:11:31

batch size怎么设?Qwen2.5-7B单卡最优参数推荐

batch size怎么设&#xff1f;Qwen2.5-7B单卡最优参数推荐 1. 为什么batch size不是越大越好&#xff1f; 你是不是也遇到过这样的困惑&#xff1a;明明显存还有空余&#xff0c;把per_device_train_batch_size从1调到2&#xff0c;训练却直接报OOM&#xff1f;或者好不容易跑…

作者头像 李华