Java 9 新特性全整理
🎉 Java 9 新特性全整理🌟
🚀 Java 9 ,它不仅首次引入模块系统(Project Jigsaw),还带来了 JShell、全新的 HTTP 客户端 API、Stream API 增强、集合类改进等众多高影响力特性。更重要的是,它奠定了未来 JDK 版本演进的基础。本文将带你通过历史背景+演化动因+使用价值的方式,轻松搞懂 Java 9 的全部关键点!
🗂️ 历史背景简述:为什么 Java 9 非看不可?
Java 自 1995 年问世以来,便以平台无关、面向对象、内存自动管理等优势风靡世界。然而随着生态庞大、JDK 膨胀、代码依赖混乱、启动慢等问题凸显,Java 开始呼唤一次底层架构的彻底革新。
从 Java 7 起就酝酿的模块化改革——Project Jigsaw,最终在 Java 9 中正式落地,揭开了 Java 现代化的序章。同时,众多开发者呼声极高的“REPL工具(JShell)”“更加灵活的语法支持”“更快更安全的 HTTP 网络通信 API”等,也都终于实现。
📢 可以说:Java 9 是过渡者,也是奠基者。
🧱 模块系统 Project Jigsaw
☕ 核心目标:解耦、精简、封装、安全 —— 四位一体的架构升级!
-
使用
module-info.java
明确依赖、强封装 -
配合
jlink
工具定制运行时,打造轻量级 JVM -
移除 rt.jar/tools.jar 等遗留结构
🔍 彻底终结 classpath 混乱,支持 IDE 更好的自动提示、编译依赖检查,提升工程质量与部署效率。
🧪 JShell 命令行交互工具
Java 9 首次引入 REPL 工具,支持:
-
交互执行 Java 语句和表达式
-
定义变量、方法、类
-
加载外部 Java 文件
-
自动补全与历史命令查询
适合教学、调试、测试等场景,是 Java 向“现代开发者友好”迈出的重要一步。
🍬 语法层面增强
-
try-with-resources 简化写法:资源可提前定义再使用
-
接口支持
private
方法:接口内部逻辑更清晰 -
Diamond 操作符支持匿名类:泛型代码更短更爽
-
_
单下划线不再允许命名变量:避免误用
🛠️ JDK 工具链升级
-
javac 新增
--release
参数,保障跨版本兼容 -
jlink 支持模块瘦身构建 runtime
-
jdeps 增强,支持模块依赖可视化
-
移除过时工具 jhat、hprof,鼓励使用 VisualVM 等现代分析工具
🔐 安全机制加强
-
默认 keystore 从 JKS 改为 PKCS12,更符合国际标准
-
引入 SHA-3、TLS ALPN、强随机数生成器
-
弃用 SHA-1 证书,强化整体信任链安全
📚 类库增强
-
String
内部由char[]
改为byte[]
(Compact String),节省内存 -
新增
List.of()
、Set.of()
、Map.of()
简化只读集合创建 -
Optional.stream()
实现 Optional 与 Stream 的无缝融合 -
StackWalker
API 替代Throwable.getStackTrace()
,性能更高 -
VarHandle
替代Unsafe
,提升内存访问安全性
🌐 全新 HTTP Client API
-
支持 HTTP/1.1 与 HTTP/2 协议
-
支持异步、同步、WebSocket
-
全新
HttpClient
/HttpRequest
/HttpResponse
架构,体验更佳 -
早期以 incubator 模块提供,后在 JDK 11 稳定落地
💡 Stream API 增强
-
takeWhile()
/dropWhile()
用于流数据切片 -
ofNullable()
创建 null 安全 Stream -
iterate()
新重载支持终止条件 -
Optional.stream()
便于链式操作 Optional
🖼️ 多分辨率图像 API(简要)
-
新增
MultiResolutionImage
接口,适配高 DPI 屏 -
对开发桌面应用影响有限,属于系统兼容性优化
♻️ GC 与性能优化
-
G1 成为默认垃圾回收器,代替 Parallel GC
-
引入
-Xlog
统一日志机制 -
实验性 AOT 编译工具
jaotc
支持将字节码转为本地机器码
🧠 JavaScript 引擎 Nashorn 升级
-
支持 ECMAScript 6 语法
-
引入 JS Parser API,可用于构建 AST 分析工具
-
提升 Java 与 JS 的互操作性,适用于混合开发场景
🔄 动态编译能力增强
-
JVMCI 接口支持 Java 层实现编译器(如 Graal)
-
引入 AOT 编译机制,提升冷启动效率(初期为实验功能)
📊 JDK 8 与 JDK 9 对比一览
特性领域 | Java 8 | Java 9 |
---|---|---|
模块系统 | ❌ 无 | ✅ Project Jigsaw |
REPL | ❌ | ✅ JShell |
HTTP 客户端 | HttpURLConnection | HttpClient 支持 HTTP/2 |
集合创建 | Collections.unmodifiableXXX | List.of() 等 |
Javadoc | HTML4 | HTML5 + 搜索框 |
GC 默认 | Parallel GC | G1 GC |
Optional | 基础功能 | Optional.stream() |
安全机制 | SHA-1 支持 | PKCS12 默认、SHA-3 引入 |
AOT 支持 | ❌ | ✅ jaotc 实验性 |
JavaScript 引擎 | Nashorn 初版 | 支持 ES6、新增 Parser API |
🧾 总结与展望
✅ Java 9 虽非 LTS,但引入的模块系统、jshell、HTTP Client、Stream 增强等,是 Java 从“平台型语言”向“现代开发平台”转型的关键拐点。
🌱 它是 Java 10~21 的基础奠基者,值得深入理解。