JDK12新特性
1. Shenandoah低暂停时间垃圾收集器(实验性)(JEP 341)
Shenandoah是一种旨在实现低暂停时间的垃圾收集器,特别适合需要高响应性和大堆内存的应用场景。
java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC YourApplication
2. Switch Expressions(预览版)(JEP 325)
从JDK 12开始,Switch语句得到了增强,支持更简洁的表达式形式,包括yield语句和更灵活的case匹配。
public class SwitchExpressions {
public static int dayOfWeek(String day) {
return switch (day) {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" -> {
System.out.println("It's a weekday");
yield 5;
}
case "Saturday", "Sunday" -> {
System.out.println("It's the weekend");
yield 10;
}
default -> throw new IllegalArgumentException("Invalid day: " + day);
};
}
public static void main(String[] args) {
System.out.println(dayOfWeek("Saturday"));
}
}
3. JVM Constants API(JEP 334)
引入了一个新的API,允许程序访问已编译到类文件中的常量池条目。
import jdk.internal.vm.annotation.Stable;
public class ConstantsAPIExample {
public static void main(String[] args) {
Class<?> clazz = String.class;
Stable annotation = clazz.getAnnotation(Stable.class);
if (annotation != null) {
System.out.println("The class is annotated as stable.");
}
}
}
4. Microbenchmark Suite(JEP 339)
JDK 12引入了一套微基准测试工具,用于测量JDK内部组件的性能。
5. AArch64端口统一(JEP 330)
JDK 12对AArch64架构的端口进行了统一,减少了维护成本,提高了性能。
6. G1混合集合日志记录(JEP 344)
增强了G1垃圾收集器的日志记录能力,提供了混合集合周期的详细信息。
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseG1GC -Xlog:gc*:file=g1logs.txt:time,tags:filecount=5,filesize=10m YourApplication
7. 默认CDS归档(JEP 345)
从JDK 12开始,默认启用Class Data Sharing (CDS),减少了不同JVM实例启动时的加载时间。
8. Abortable Mixed Collections for G1(JEP 349)
G1垃圾收集器增加了一个选项,可以在混合集合过程中遇到长时间暂停时选择中止。
java -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:+AbortablePreclean -XX:MaxTenuringThreshold=15 YourApplication