Skip to main content

Java 9

核心总结

  • 模块化 JDK 的大版本。核心是 JPMS、jlink、jshell、集合工厂、Flow、G1 默认、内部 API 封装和多版本 JAR。

升级关注

  • 模块系统会暴露 split package、非法反射访问和内部 API 依赖问题。
  • 使用 jlink 可显著缩小运行时镜像,但需要先梳理模块依赖。

示例

module-info.java

module-info.java
module com.example.app {
requires java.net.http;
exports com.example.app;
}
var names = java.util.List.of("a", "b", "c");
var map = java.util.Map.of("k", "v");
javac --release 8 Hello.java
jlink --add-modules com.example.app --output runtime-image
jshell

JEPs

JEP状态分类标题中文描述
JEP 102正式库/APIProcess API Updates增强 Process API,可获取 PID、父子进程和进程信息。
JEP 110正式库/APIHTTP 2 Client孵化 HTTP/2 与 WebSocket 客户端,后续 Java 11 标准化。
JEP 158正式库/APIUnified JVM Logging统一 JVM 日志,使用 -Xlog。
JEP 193正式库/APIVariable HandlesVarHandle 提供比 Unsafe 更规范的变量和内存访问原语。
JEP 200正式库/APIThe Modular JDKJDK 自身模块化。
JEP 220正式库/APIModular Run-Time Images新的模块化运行时镜像布局,取消传统 rt.jar。
JEP 222正式库/APIjshell: The Java ShellJava REPL 工具。
JEP 223正式库/APINew Version-String Scheme新的版本字符串方案。
JEP 238正式库/APIMulti-Release JAR Files一个 JAR 内可放多个 Java 版本实现。
JEP 247正式库/APICompile for Older Platform Versionsjavac --release,用目标平台 API 编译,替代 source/target/bootclasspath 组合。
JEP 248正式GC/RuntimeMake G1 the Default Garbage CollectorG1 成为默认 GC。
JEP 254正式库/APICompact StringsString 内部用 byte 数组加编码标记,降低 Latin-1 文本内存占用。
JEP 260正式库/APIEncapsulate Most Internal APIs封装大部分 JDK 内部 API。
JEP 261正式库/APIModule SystemJPMS 模块系统。
JEP 266正式库/APIMore Concurrency UpdatesFlow Reactive Streams 接口、CompletableFuture 等增强。
JEP 269正式库/APIConvenience Factory Methods for CollectionsList.of、Set.of、Map.of 等不可变集合工厂。
JEP 282正式工具/平台jlink: The Java Linker按模块裁剪生成定制运行时镜像。
JEP 290正式库/APIFilter Incoming Serialization Data反序列化过滤器,降低反序列化攻击面。

References