Skip to content

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.copyOfSet.copyOfMap.copyOf 创建不可修改副本
  • Collectors.toUnmodifiableListtoUnmodifiableSettoUnmodifiableMap
  • Optional.orElseThrow() 无参重载

浅拷贝集合不代表元素不可变;集合元素仍可能被外部修改。

JVM 与运行环境

特性说明
容器感知HotSpot 能识别容器 CPU 与内存限制,改善堆和线程数计算
AppCDSApplication Class-Data Sharing 开放为正式可用能力
G1 并行 Full GC降低 G1 退化到 Full GC 时的停顿成本
线程本地握手在不执行全局安全点的情况下对单个线程执行回调
实验性 Graal JIT可通过 JVMCI 使用 Graal 编译器,当时仍属实验功能

工具与发布模型

  • 移除 javah,JNI 头文件通过 javac -h 生成。
  • 引入基于时间的版本字符串和六个月发布节奏。
  • 支持在备用内存设备上分配 HotSpot Java 堆。

架构关注

容器感知不等于自动获得合理参数。生产环境仍应依据容器限制、工作负载和 GC 指标设置 MaxRAMPercentage、初始/最大堆及线程池大小。