Java 13 它不是一个长久支持(LTS)版本。
重点特性列表:
- 动态应用程序类-数据共享
- 增强 ZGC 释放未使用内存
- Socket API 重构
- Switch 表达式扩展(预览功能)
- 文本块(预览功能)
动态应用程序类-数据共享
JDK5引入了Class-Data Sharing可以用于多个JVM共享class,提升启动速度,最早只支持system classes及serial GC
JDK9对其进行扩展以支持application classes及其他GC算法
java10的新特性JEP 310: Application Class-Data Sharing扩展了JDK5引入的Class-Data Sharing,支持application的Class-Data Sharing并开源出来(以前是commercial feature)
JDK11将-Xshare:off改为默认-Xshare:auto,以更加方便使用CDS特性
JDK12的341: Default CDS Archives即在64-bit平台上编译jdk的时候就默认在${JAVA_HOME}/lib/server目录下生成一份名为classes.jsa的默认archive文件(大概有18M)方便大家使用
JDK13的这个特性支持在Java application执行之后进行动态archive
导出jsa:
java -XX:ArchiveClassesAtExit=hello.jsa -cp hello.jar Hello
使用jsa:
java -XX:SharedArchiveFile=hello.jsa -cp hello.jar Hello
增强 ZGC 释放未使用内存
暂时无..
Switch 表达式扩展(预览功能)
在 Java 12 中引入了 Switch
表达式作为预览特性,而在 Java 13 中对 Switch
表达式做了增强改进,在块中引入了 yield
语句来返回值,而不是使用 break
。这意味着,Switch
表达式(返回值)应该使用 yield
,而 Switch
语句(不返回值)应该使用 break
,而在此之前,想要在 Switch
中返回内容,还是比较麻烦的,只不过目前还处于预览状态。
在 Java 13 之后,Switch
表达式中就多了一个关键字用于跳出 Switch
块的关键字 yield
,主要用于返回一个值,它和 return
的区别在于:return
会直接跳出当前循环或者方法,而 yield
只会跳出当前 Switch
块,同时在使用 yield
时,需要有 default
条件。
在 Java 12 之前,传统 Switch
语句写法为:
在 Java 12 之后,关于 Switch 表达式的写法改进为如下:
而在 Java 13 中,value break
语句不再被编译,而是用 yield
来进行值返回,上述写法被改为如下写法:
文本块(预览功能)
在 Java 13 之前,多行字符串写法为:
在 Java 13 引入文本块之后,写法为: