Skip to content

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 Main

JDK 12 的语法仍处于预览阶段,不能和 JDK 14 的最终语法完全等同。

API 增强

API作用
Collectors.teeing同时执行两个 Collector,再合并结果
Files.mismatch返回两个文件首个不匹配字节的位置
String.indent调整每行缩进
String.transform把字符串传给函数进行转换
CompactNumberFormat格式化 1K1万 等紧凑数字

JVM 与 GC

  • Shenandoah 作为实验性低停顿垃圾收集器加入 OpenJDK。
  • G1 支持可中止的 Mixed Collection,并能更及时地把未使用堆内存归还操作系统。
  • 64 位平台默认生成 CDS Archive,缩短启动时间并减少内存占用。
  • 引入 JVM Constants API,对类文件和 invokedynamic 常量进行类型安全建模。
  • 只保留一套 64 位 ARM 实现,删除重复的旧 AArch64 源码。

工具

Microbenchmark Suite 被纳入 JDK 源码,用于 JDK 自身性能测试。业务代码做微基准测试仍应使用 JMH,避免直接用循环和 System.nanoTime() 得到失真结果。