Java 10 新特性 (EOL)
warning
生命周期结束时间(EOL): 2018/03/31
官方发布介绍页面:https://openjdk.org/projects/jdk/10/
1. 局部变量类型推断
在 Java 当引入泛型的时候,我们申明具体类型的时候需要这样写(等号两边都需要):
List<String> list = new ArrayList<String>();
Map<String, String> map = new HashMap<String,String>();
后来在 Java 7 推出之后,简化为(只需要在左边申明类型即可):
List<String> list = new ArrayList<>();
Map<String, String> map = new HashMap<>();
而 Java 10 中,对类型的推断进一步优化,只需要这样即可(类型在等号右边决定):
var list = new ArrayList<String>();
var map = new HashMap<String, String>();
对于var的使用还有几点要注意的:
- 定义的时候必须初始化
- 只能用于定义局部变量
- 不能用于定义成员变量、方法参数、返回类型
- 每次只能定义一个变量,不能复合声明变量
2. 垃圾回收器接口
引入了一个新的垃圾回收器接口,使得不同的垃圾回收器可以更容易地集成。
// 使用命令行参数来选择垃圾回收器
// -XX:+UseG1GC
3. 并行全局垃圾回收
G1 垃圾回收器现在可以并行处理全局垃圾回收。
// 使用命令行参数来启用并行全局垃圾回收
// -XX:+UseParallelGC
4. 应用类数据共享
应用类数据共享 (AppCDS) 允许在不同的 Java 进程之间共享类元数据。
// 创建类数据共享存档
// java -Xshare:dump -XX:SharedArchiveFile=app-cds.jsa -XX:SharedClassListFile=classlist.txt
5. 合并 JDK 和 JRE 镜像
JDK 和 JRE 镜像被合并为一个单一的镜像,简化了部署和管理。
// JDK 和 JRE 现在在同一个镜像中
6. 线程局部握手
线程局部握手允许在不停止所有线程的情况下执行回调。
// 示例代码无法直接展示线程局部握手的效果
7. 根证书
默认情况下,JDK 现在包含了一组默认的根证书。
// 默认根证书位于 JDK 安装目录的 lib/security/cacerts 文件中
8. 备用内存设备
JVM 现在可以在备用内存设备上分配堆内存。
// 使用命令行参数来指定备用内存设备
// -XX:AllocateHeapAt=<path>
9. 统一的 JVM 日志记录
引入了统一的 JVM 日志记录框架,简化了日志记录配置。
// 使用命令行参数来配置日志记录
// -Xlog:gc