JDK新版本中都有哪些新特性?
面试回答¶
面试官: JDK 新版本都带来了哪些值得关注的新特性?
你:
Java 这几年更新非常快,我重点挑几个里程碑版本,从语言层面、性能层面和工程层面三条线来说。
语言层面:让代码更简洁
-
JDK 8(LTS):Lambda 表达式和 Stream API 是革命性的,让 Java 终于有了函数式编程的味道,再配合方法引用和 Optional,让集合处理、避免空指针变得清爽很多。
-
JDK 14:引入
record,专门用来声明只读的纯数据类。以前一个 POJO 要写一堆构造器、getter、equals/hashCode、toString,现在一行record User(String name, int age){}全搞定,编译器自动生成,代码量骤减且语义明确。 -
JDK 15:文本块
"""..."""正式转正,写多行 JSON、SQL 终于不用满屏转义和拼接了。 -
JDK 17(LTS):引入密封类
sealed class,限制哪些子类可以继承或实现,配合switch模式匹配,让类型系统更严谨,编译器还能提示你分支不全。 -
JDK 21(LTS):虚拟线程(Virtual Threads)正式发布,还有
switch的模式匹配、record模式等预览特性逐步稳定,语言表达力持续增强。
性能层面:让运行更轻快
-
JDK 11(LTS):ZGC 实验性推出,目标是把 GC 停顿控制在 10ms 以内,后来持续优化,到 JDK 21 已经支持分代模式,几 GB 甚至 TB 级堆都能低停顿。
-
JDK 17:G1 持续增强,默认 GC 成熟稳定;同时
Foreign Function & Memory API孵化,准备取代 JNI,让本地调用更安全。 -
JDK 21:虚拟线程是最大的性能亮点,一个 Java 进程可以轻松创建上百万个轻量线程,IO 密集型任务的吞吐量大幅提升,并且写法完全兼容原有 Thread API。
工程层面:让构建和部署更省心
-
JDK 9:模块化系统(JPMS)起步,虽然短期阵痛,但让大型项目的依赖管理和访问隔离更清晰。
-
JDK 12:
jpackage可以将 Java 应用打包成原生安装包(.exe/.dmg/.deb),告别非得依赖用户装 JRE 的尴尬。 -
JDK 17+:LTS 版本发布节奏稳定,每两年出一个长期支持版,企业升级路径清晰。同时开始移除旧的 sun.misc.Unsafe 等内部 API,鼓励用标准 API 替代。
用 JDK 21 的虚拟线程举个例子:
原先用线程池跑 100 万并发任务,操作系统线程非常重,根本扛不住。虚拟线程占用极小,可以随便创建,只要 IO 密集,一台机器扛几十万并发很轻松。下面的时序图对比了平台线程和虚拟线程在 IO 任务上的差异。

总结一下: 现代 Java 的开发体验已经和十年前截然不同,代码更短、跑得更快、并发能力更强。如果现在接手新项目,用 JDK 17 或 21 的 LTS 版本,能把 record、文本块、密封类、虚拟线程这些生产力工具都用起来。