JDK 12
JDK 12 开始集中交付一批后来在 JDK 14–17 定型的语言特性。本版本的 Switch 表达式仍是 Preview,必须显式开启。
Switch 表达式(Preview)
java
int days = switch (month) {
case APRIL, JUNE, SEPTEMBER, NOVEMBER -> 30;
case FEBRUARY -> 28;
default -> 31;
};Preview 特性需要使用:
bash
javac --enable-preview --release 12 Main.java
java --enable-preview MainJDK 12 的语法仍处于预览阶段,不能和 JDK 14 的最终语法完全等同。
API 增强
| API | 作用 |
|---|---|
Collectors.teeing | 同时执行两个 Collector,再合并结果 |
Files.mismatch | 返回两个文件首个不匹配字节的位置 |
String.indent | 调整每行缩进 |
String.transform | 把字符串传给函数进行转换 |
CompactNumberFormat | 格式化 1K、1万 等紧凑数字 |
JVM 与 GC
- Shenandoah 作为实验性低停顿垃圾收集器加入 OpenJDK。
- G1 支持可中止的 Mixed Collection,并能更及时地把未使用堆内存归还操作系统。
- 64 位平台默认生成 CDS Archive,缩短启动时间并减少内存占用。
- 引入 JVM Constants API,对类文件和
invokedynamic常量进行类型安全建模。 - 只保留一套 64 位 ARM 实现,删除重复的旧 AArch64 源码。
工具
Microbenchmark Suite 被纳入 JDK 源码,用于 JDK 自身性能测试。业务代码做微基准测试仍应使用 JMH,避免直接用循环和 System.nanoTime() 得到失真结果。