JDK 14
JDK 14 正式发布 Switch 表达式,并预览 Record、instanceof 模式匹配和第二版文本块。
Switch 表达式(正式)
java
String type = switch (status) {
case 200, 201 -> "success";
case 400 -> "client-error";
default -> {
audit(status);
yield "other";
}
};箭头标签不会发生传统 case 穿透;需要多条语句时使用代码块和 yield 返回值。
Records(Preview)
java
record User(long id, String name) {}Record 用于表达透明的数据载体,编译器生成访问器、构造器、equals、hashCode 和 toString。JDK 14 中仍是 Preview,JDK 16 才正式发布。
instanceof 模式匹配(Preview)
java
if (value instanceof String text) {
System.out.println(text.length());
}它把类型检查、强制转换和局部变量声明合并,并通过流敏感作用域避免变量在不安全分支中可见。
Helpful NullPointerExceptions
JVM 可以指出空指针发生在表达式链的哪个变量上,而不再只报告代码行。JDK 14 中可通过 -XX:+ShowCodeDetailsInExceptionMessages 开启,后续版本默认启用。
JVM、工具与移除项
| 特性 | 说明 |
|---|---|
| JFR Event Streaming | 持续消费 JFR 事件,用于低开销实时监控 |
jpackage | 孵化阶段,将应用打包为平台原生安装包 |
| Foreign-Memory Access API | 孵化阶段,安全高效访问堆外内存 |
| G1 NUMA | 改善多路 NUMA 机器上的内存分配 |
| CMS 移除 | Concurrent Mark Sweep GC 被正式删除 |
| Pack200 移除 | 删除 pack200、unpack200 工具及 API |
迁移关注
如果旧系统仍指定 -XX:+UseConcMarkSweepGC,升级到 JDK 14+ 会失败,需要切换并压测 G1、ZGC 或 Shenandoah。