JDK 10
JDK 10 面向开发者最明显的变化是局部变量类型推断,平台侧则增强了容器感知、CDS 和 GC 能力。
局部变量类型推断
java
var names = new ArrayList<String>();
var count = names.size();var 仍是静态类型,编译器会在编译期推断出确定类型。它只能用于带初始化器的局部变量、增强 for 循环变量和传统 for 循环变量,不能用于字段、方法参数或返回值。
java
// 无法从右侧清楚判断业务类型时,不建议使用
var result = service.execute();API 增强
List.copyOf、Set.copyOf、Map.copyOf创建不可修改副本Collectors.toUnmodifiableList、toUnmodifiableSet、toUnmodifiableMapOptional.orElseThrow()无参重载
浅拷贝集合不代表元素不可变;集合元素仍可能被外部修改。
JVM 与运行环境
| 特性 | 说明 |
|---|---|
| 容器感知 | HotSpot 能识别容器 CPU 与内存限制,改善堆和线程数计算 |
| AppCDS | Application Class-Data Sharing 开放为正式可用能力 |
| G1 并行 Full GC | 降低 G1 退化到 Full GC 时的停顿成本 |
| 线程本地握手 | 在不执行全局安全点的情况下对单个线程执行回调 |
| 实验性 Graal JIT | 可通过 JVMCI 使用 Graal 编译器,当时仍属实验功能 |
工具与发布模型
- 移除
javah,JNI 头文件通过javac -h生成。 - 引入基于时间的版本字符串和六个月发布节奏。
- 支持在备用内存设备上分配 HotSpot Java 堆。
架构关注
容器感知不等于自动获得合理参数。生产环境仍应依据容器限制、工作负载和 GC 指标设置 MaxRAMPercentage、初始/最大堆及线程池大小。