Skip to main content

Java 10

核心总结

  • 半年节奏的第一个版本。语言层是 var,本身也完成 JDK 仓库、GC 接口、AppCDS 和版本号模型整理。

升级关注

  • var 只适合局部变量,公共 API 中不要用它表达设计意图。
  • javah 已移除,JNI 头文件生成使用 javac -h。

示例

var 局部变量类型推断

var users = new java.util.ArrayList<String>();
users.add("wener");

for (var user : users) {
System.out.println(user.toUpperCase());
}

AppCDS

# 启动类加载器默认启用 CDS
# -XX:+UseAppCDS 启用 app class loader 的 CDS

# 记录所有加载的类;不加 -XX:+UseAppCDS 时主要只会显示启动类加载器加载的类
java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=hello.lst -cp hello.jar HelloWorld

# 创建 AppCDS 归档
java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=hello.lst -XX:SharedArchiveFile=hello.jsa -cp hello.jar

# 使用 AppCDS 归档
java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar HelloWorld

javah 替代

javac -h target/native-headers src/main/java/com/example/NativeApi.java

JEPs

JEP状态分类标题中文描述
JEP 286正式语言Local-Variable Type Inference局部变量类型推断 var,只影响局部变量声明。
JEP 296正式库/APIConsolidate the JDK Forest into a Single Repository多个 Mercurial forest 合并为单仓库,降低开发复杂度。
JEP 304正式GC/RuntimeGarbage-Collector Interface抽象 GC 接口,让 HotSpot 更容易接入和剥离 GC 实现。
JEP 307正式GC/RuntimeParallel Full GC for G1G1 Full GC 并行化,降低最坏停顿。
JEP 310正式GC/RuntimeApplication Class-Data SharingAppCDS 支持应用类共享归档,改善启动和内存。
JEP 312正式GC/RuntimeThread-Local Handshakes可只让单个线程执行 VM 回调,减少全局 safepoint 需求。
JEP 313移除/禁用库/APIRemove the Native-Header Generation Tool (javah)移除 javah,改用 javac -h。
JEP 314正式库/APIAdditional Unicode Language-Tag Extensions支持更多 Unicode locale 扩展。
JEP 316正式库/APIHeap Allocation on Alternative Memory Devices允许把堆分配到 NV-DIMM 等替代内存设备。
JEP 317实验库/APIExperimental Java-Based JIT Compiler实验性 Graal Java JIT 编译器。
JEP 319正式安全/加密Root CertificatesOpenJDK 提供默认根证书集合。
JEP 322正式库/APITime-Based Release Versioning时间驱动发布版本号模型。

References