JDK12:
一、Switch Expressions
旧版本switch 语句如果漏写了一个 break,那么逻辑往往就跑偏了,这种方式既繁琐,又容易出错。jdk12中switch 表达式,Pattern Matching 机制能够自然地保证只有单一路径会被执行。
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
二、Shenandoah GC
新增了一个名为 Shenandoah 的 GC 算法,通过与正在运行的 Java 线程同时进行 evacuation 工作来减少 GC 暂停时间。使用 Shenandoah 的暂停时间与堆大小无关,这意味着无论堆是 200 MB 还是 200 GB,都将具有相同的暂停时间
JDK13:
一、文本块升级
jdk13之前:
String html = "<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>\n";
jdk13之后:
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
二、switch优化更新
static void howMany(int k) {
System.out.println(
switch (k) {
case 1 -> "one"
case 2 -> "two"
default -> "many"
}
);
}
三、重新实现旧版套接字API
四、核心库/java.util中:I18N
五、取消使用未使用的内存
JDK14:
1、switch优化变更为最终版
2、垃圾回收相关
1)删除cms垃圾收集器
2)弃用 ParallelScavenge + SerialOld GC 的垃圾回收算法组合
3)将 zgc 垃圾回收器移植到 macOS 和 windows 平台
3、instanceof的模式匹配(预览版)
instanceof运算符支持模式匹配来增强java语言,如下:
if (obj instanceof String s) {
// can use s here
} else {
// can't use s here
}
4、删除了安全库java.security.acl API
5、货币格式(优化)
可以通过 NumberFormat.getCurrencyInstance(Locale)使用“ u-cf-account” Unicode区域设置扩展名来获得具有记帐样式的货币格式实例,其中金额在某些区域设置中用括号表示,例如,Locale.US,它将格式化为($3.27)而不是-$3.27。