JDK 8 → JDK 17 主要变动
1. 模块化系统(Java 9)
module com.example.myapp {requires java.base;exports com.example.myapp;}
- 引入模块系统(Project Jigsaw)
- 可以精确控制哪些类暴露给其他模块
2. 语法新特性
| 特性 | 示例 | 支持版本 |
|---|---|---|
| Records | record Point(int x, int y) {} |
Java 16 |
| Sealed Classes | sealed class Shape permits Circle, Square {} |
Java 17 |
| Pattern Matching | if (obj instanceof String s) { s.length() } |
Java 16 |
| Switch表达式 | int result = switch(x) { case 1 -> 10; default -> 0; }; |
Java 14 |
| Text Blocks | """Hello\nWorld""" |
Java 15 |
| Sealed Interfaces | sealed interface I permits A, B {} |
Java 17 |
3. 垃圾回收器
| 回收器 | 说明 |
|---|---|
| G1 | 默认回收器(JDK 9起) |
| ZGC | 低延迟垃圾回收器(JDK 11) |
| Shenandoah | 低延迟GC(JDK 12) |
| Parallel GC | JDK 8默认,高吞吐量 |
| CMS | 已废弃移除 |
4. 移除的内容
- Applet(Java 9移除)
- Java Web Start(Java 11移除)
- JavaFX(JDK 8后独立)
- CORBA(Java 11移除)
5. API 变化
新增:
Stream.toList()(Java 16)List.of(),Set.of(),Map.of()不可变集合工厂方法Optional.isEmpty()(Java 11)String.isBlank(),String.strip(),String.lines()(Java 11)HttpClient(Java 11)Files.readString(),Files.writeString()(Java 11)- 新的伪随机数生成器(JDK 17)
删除:
Thread.stop,Thread.suspend,Thread.resumesun.misc.Unsafe部分方法受限
6. 性能提升
- 类数据共享(CDS/AppCDS):启动更快
- G1:默认低延迟
- AOT编译:提前编译(JDK 9)
- JVM 改进:逃逸分析、锁优化
7. 其他重要变化
| 变化 | 说明 |
|---|---|
| 版本字符串 | 9 → 17(不再用 1.x) |
| 许可证 | JDK 17 长期支持,免费商用 |
| Unicode | 支持更高版本 Unicode |
| 日期时间 | java.time API(JDK 8引入,保持更新) |
兼容性
- 向下兼容:绝大多数 Java 8 代码可以在 JDK 17 运行
- 模块系统可能需要调整:使用
--add-opens访问内部API
正文完