JDK17 新特性 Preview 2
接着上一篇 Preview 1,本文将继续介绍 JDK17 的新特性。
Record 类
“类似 lombok 的属性只读”。在 JDK 14 中,引入了 Record 类,可以用来创建只读的类,这样就不需要使用 lombok 来实现了。
1 | public record Person(String name, int age) { |
从上面的代码可以看出,Record 类的定义和普通类的定义很相似,只是在类名前面加上了 record 关键字。
Record 类的属性默认是 final 的,且只有 getter 方法,没有 setter 方法,所以 Record 类的属性是只读的。
优化空指针异常
在 JDK 17 中,对空指针异常进行了优化,当出现空指针异常时,会打印出更加详细的信息,包括:
空指针异常的位置
空指针异常的原因
空指针异常的堆栈信息
1 | public class NullPointerExceptionDemo { |
在 JDK 17 中,运行上面的代码,会打印出如下信息:
1 | Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null |
可以看出,JDK 17 对空指针异常进行了优化,打印出了更加详细的信息。
ZGC垃圾回收器
在 JDK 17 中,引入了 ZGC 垃圾回收器,ZGC 垃圾回收器是一种低延迟的垃圾回收器,可以在几毫秒内处理几个字节到几个TB的堆。
ZGC 垃圾回收器的特点:
低延迟
可以处理几个字节到几个TB的堆
与应用程序线程并发执行
不卡顿
使用 ZGC 垃圾回收器:
1 | java -XX:+UseZGC |
在 JVM 启动时,使用 -XX:+UseZGC 参数,就可以使用 ZGC 垃圾回收器。