jdk17,8区别

1次阅读
没有评论

JDK 8 → JDK 17 主要变动

1. 模块化系统(Java 9)

  1. module com.example.myapp {
  2. requires java.base;
  3. exports com.example.myapp;
  4. }
  • 引入模块系统(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.stopThread.suspendThread.resume
  • sun.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
正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-04-27发表,共计1139字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)