目录
[1. 局部变量类型推断(JEP 286)](#1. 局部变量类型推断(JEP 286))
[2. 不可修改集合(JEP 269)](#2. 不可修改集合(JEP 269))
[3. 并行全垃圾回收(JEP 307)](#3. 并行全垃圾回收(JEP 307))
[4. 应用类数据共享(JEP 310)](#4. 应用类数据共享(JEP 310))
[5. 线程局部管控(JEP 312)](#5. 线程局部管控(JEP 312))
Java 10 引入了多项重要改进,以下是核心特性及代码示例:
1. 局部变量类型推断(JEP 286)
特性 :使用 var
声明局部变量,编译器自动推断类型。
应用场景:简化冗长类型声明,增强代码可读性。
java
import java.util.ArrayList;
import java.util.List;
public class VarDemo {
public static void main(String[] args) {
// 声明集合(自动推断为 ArrayList<String>)
var list = new ArrayList<String>();
list.add("Java");
list.add("10");
// 遍历集合(元素自动推断为 String)
for (var element : list) {
System.out.println(element.toUpperCase()); // 可调用 String 方法
}
// 声明数值(自动推断为 int)
var count = 10;
System.out.println(count * 2); // 输出 20
}
}
注意:
- 仅适用于局部变量(方法内)
- 不可用于字段、方法参数或返回类型
- 必须显式初始化(如
var list;
会报错)
2. 不可修改集合(JEP 269)
特性 :新增 List.copyOf()
, Set.copyOf()
, Map.copyOf()
创建不可变集合。
应用场景:创建线程安全的只读集合。
java
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ImmutableCollections {
public static void main(String[] args) {
// 创建不可变 List
var originalList = List.of("A", "B", "C");
var copiedList = List.copyOf(originalList);
// copiedList.add("D"); // 抛出 UnsupportedOperationException
// 创建不可变 Map
var map = Map.of("Key1", 1, "Key2", 2);
var copiedMap = Map.copyOf(map);
System.out.println(copiedMap.get("Key1")); // 输出 1
}
}
3. 并行全垃圾回收(JEP 307)
特性 :G1 垃圾回收器支持并行 Full GC,减少停顿时间。
应用场景:提升大堆内存应用的性能。
bash
# 启动命令(启用并行 Full GC)
java -XX:+UseG1GC -XX:ParallelGCThreads=4 -jar MyApp.jar
效果:
- 通过多线程并行处理垃圾回收
- 减少 Full GC 停顿时间 30%~50%
4. 应用类数据共享(JEP 310)
特性 :允许将应用程序类放入共享存档,减少启动时间和内存占用。
应用步骤:
bash
# 1. 创建共享存档
java -Xshare:dump -XX:SharedArchiveFile=app-cds.jsa -jar MyApp.jar
# 2. 使用共享存档启动
java -Xshare:on -XX:SharedArchiveFile=app-cds.jsa -jar MyApp.jar
效果:
- 启动时间减少 10%~20%
- 内存占用降低约 5%
5. 线程局部管控(JEP 312)
特性 :通过 Thread#onSpinWait()
提示 JVM 优化自旋锁。
应用场景:高并发忙等待循环的性能优化。
java
public class SpinWaitDemo {
private volatile boolean flag = false;
public void waitForFlag() {
while (!flag) {
Thread.onSpinWait(); // JVM 优化提示
}
System.out.println("Flag set!");
}
}
总结
特性 | 核心价值 | 适用场景 |
---|---|---|
局部变量类型推断 | 简化代码,减少冗余 | 复杂泛型声明 |
不可修改集合 | 线程安全,防止意外修改 | 配置数据、常量集合 |
并行 Full GC | 减少垃圾回收停顿时间 | 大内存应用 |
应用类数据共享 | 加速启动,降低内存占用 | 容器化环境、微服务 |
线程局部管控 | 优化高并发自旋锁性能 | 低延迟系统 |
最佳实践:
- 优先在局部作用域使用
var
增强可读性- 关键配置数据使用
List.copyOf()
防止篡改- 生产环境启用 CDS 优化启动性能