核心内容摘要
开启数字视界新纪元:91n首页,不止于精彩
概述JDK8 作为业界经典版本至今仍是企业中使用最广泛的 JDK 版本。
随着 JDK 版本迭代从 JDK9 开始JDK 改为每半年推出新版本每三年推出一个 。
本文以 JDK21最新 LTS 版本为准梳理 JDK8 之后的重要新特性帮助开发者了解 Java 生态的发展方向。
语法增强
文本块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,合肥));
Switch 表达式增强扩展case匹配类型支持yield关键字提供流程控制语法更简洁可替代复杂if-elseinttmpswitch(name){case李白,杜甫,白居易-1;case苏轼,辛弃疾-2;default-{System.out.println(其他朝代诗人);yield3;}};
var 自动类型推断用于局部变量类型推断限制不能用于属性、函数返回值、类型不明确的 Lambda 表达式varnumsnewint[]{1,2,3,4,5};// 自动推断为int[]varsumArrays.stream(nums).sum();// 自动推断为int
重要扩展功能
记录类record用于表示不可变数据结构自动生成构造器、getter 方法、equals、hashCode、toString不能通过反射修改值publicrecordPoint(intx,inty){}PointpnewPoint(10,
;System.out.println(p.x()p.y());
隐藏类Hidden Classes不能被其他类直接使用的类通过读取目标类字节码创建用于动态类生成替代 ASM 等字节码操作技术byte[]classInBytesBase
getDecoder().decode(CLASS_INFO);Class?proxyMethodHandles.lookup().defineHiddenClass(classInBytes,true,MethodHandles.Lookup.ClassOption.NESTMATE).lookupClass();
密封类Sealed Classes限制父类可以被哪些子类继承通过sealed修饰配合permits指定可继承的类三种子类类型final不可再继承、non-sealed可继承、sealed可继续密封publicsealedabstractclassShapepermitsCircle,Rectangle,Square{publicabstractintlines();}publicfinalclassCircleextendsShape{Overridepublicintlines(){return0;}}
虚拟线程Virtual Threads用户态线程以用户态多个线程对应内核态一个真实线程极大提升多线程并发能力通过Executors.newVirtualThreadPerTaskExecutor()创建try(varexecutorExecutors.newVirtualThreadPerTaskExecutor()){IntStream.range(0,10_
.forEach(i-{executor.submit(()-{System.out.println(Virtual Taski is running);Thread.sleep(Duration.ofSeconds(
);returni;});});}
JDK 模块化机制
什么是模块化JDK9 开始引入模块化后JDK 内部功能以module形式存在可使用java --list-modules查看系统模块
模块化与类加载机制类加载器调整PlatformClassLoader替换ExtClassLoader双亲委派机制调整类加载请求优先委派给对应模块的类加载器
自己实现一个模块在模块根目录创建module-info.java使用requires声明依赖使用exports和opens声明对外 API使用provides和uses实现服务提供者接口moduleroy.demoModule2{exportscom.roy.service;providescom.roy.service.HelloServicewithcom.roy.service.impl.MorningHello,com.roy.service.impl.EveningHello;}
JDK 的向量计算 API
向量计算简介利用现代 CPU 的 SIMD 指令进行高效并行计算SIMDSingle Instruction Multiple Data单指令多数据
使用方式需要引入模块requires jdk.incubator.vector;使用VectorSpecies定义向量形状使用向量操作进行高效计算VectorSpeciesFloatspeciesFloatVector.SPECIES_256;varvaFloatVector.fromArray(species,newfloat[]{1,2,3,4,5,6,7,8,9},
;varvbFloatVector.fromArray(species,newfloat[]{8,7,6,5,4,3,2,1},
;varvcva.mul(vb);System.out.println(vc);
GC 垃圾回收器优化
GC 算法演进JDK15默认废弃偏向锁JDK17仍可手动开启偏向锁XX:UseBiasedLockingJDK21移除偏向锁相关参数
垃圾回收器变化CMS 被废弃JDK14 彻底删除SerialOld 被废弃ZGC 转正JDK11 引入JDK15 正式使用Shenandoah 集成非官方但被 Oracle 接受
当前默认 GCJDK21 版本默认垃圾回收器依然是 G1
GraalVM
GraalVM 简介由 Java 语言编写用于替代 HotSpot 的 C1/C2 编译器可将 Java 应用程序编译成机器语言绕过 class 文件翻译过程提升应用启动速度
GraalVM 优势云原生架构下提升启动速度和预热时间通过 Truffle 框架可快速实现自定义编程语言与 Spring 框架逐步兼容
总结JDK 从 8 到 21 的演进体现了 Java 生态在语法、性能、模块化和云原生适应性方面的持续进步。
虽然 JDK8 仍是企业主流版本但 JDK17 和 JDK21 作为 LTS 版本已为 Spring6/SpringBoot3 等框架提供了支持。
了解这些新特性不仅能帮助开发者跟上技术发展还能在实际项目中选择更优的解决方案提升应用性能和可维护性。