JDK13新特性
大约 2 分钟后端JDK新特性
[TOC]
switch表达式增强
添加yield关键词,可以有效地从switch表达式返回值。
@Test
@SuppressWarnings("preview")
public void whenSwitchingOnOperationSquareMe_thenWillReturnSquare() {
var me = 4;
var operation = "squareMe";
var result = switch (operation) {
case "doubleMe" -> {
yield me * 2;
}
case "squareMe" -> {
yield me * me;
}
default -> me;
};
assertEquals(16, result);
}
文本块
支持多行文本块,格式如下:
String TEXT_BLOCK_JSON = """
{
"name" : "xiangwang",
"website" : "https://blog.xiangwang.tech/"
}
""";
动态CDS归档
类数据共享(CDS)已经成为Java HotSpot VM的一个突出特性。允许在程序退出时动态归档类。它允许跨不同的jvm共享类元数据,以减少启动时间和内存占用。JDK 10通过添加apppcds扩展了这一功能,使开发人员能够在共享归档中包含应用程序类。JDK 12进一步增强了该特性,在默认情况下包括CDS存档。
创建存档:
java -XX:ArchiveClassesAtExit=<archive filename> -cp <app jar> AppName
使用存档:
java -XX:ArchiveClassesAtExit=<archive filename> -cp <app jar> AppName
ZGC优化(增强 ZGC 释放未使用内存)
ZGC是在Java 11中引入的,作为一种低延迟的垃圾收集机制,GC暂停时间从不超过10毫秒。与其他HotSpot VM gc(如G1和Shenandoah)不同的是,它没有将未使用的堆内存返回给操作系统。Java 13将此功能添加到ZGC中。我们现在得到了减少的内存占用和性能改进。
从Java 13开始,ZGC在默认情况下将未提交的内存返回给操作系统,直到达到指定的最小堆大小。如果不想使用此特性,可以通过以下方式
- 使用选项-XX:-ZUncommit
- 设置相等的最小堆大小(-Xms)和最大堆大小(-Xmx)
Socket API 重构
在 Java 13 之前,通过使用 PlainSocketImpl 作为 SocketImpl 的具体实现。
Java 13 中的新底层实现,引入 NioSocketImpl 的实现用以替换 SocketImpl 的 PlainSocketImpl 实现,此实现与 NIO(新 I/O)实现共享相同的内部基础结构,并且与现有的缓冲区高速缓存机制集成在一起,因此不需要使用线程堆栈。除了这些更改之外,还有其他一些更便利的更改,如使用 java.lang.ref.Cleaner 机制来关闭套接字(如果 SocketImpl 实现在尚未关闭的套接字上被进行了垃圾收集),以及在轮询时套接字处于非阻塞模式时处理超时操作等方面。