JDK 20 抢先体验发行说明


这是 JDK 20 随附的发行说明草稿,内容在发布前可能会发生变化。点击标题见详细

Build 22:

  • 禁用 TLS_ECDH_* 密码套件( JDK-8279164 )
  • IdentityHashMap 的删除和替换方法使用对象标识( JDK-8178355 )
  • 在 macOS 上,文件名不再规范化为 Apple 的 Unicode 规范化格式 D 变体 ( JDK-8289689 )
  • 在InvalidParameterException中 添加了构造函数 (String, Throwable) 和 (Throwable )( JDK-8296226 )
  • 弃用和禁用不支持并行的类加​​载器的旧版并行类加载解决方法( JDK-8295673 )
  • java.net.URL 构造函数已弃用( JDK-8294241 )
  • 禁用 DTLS 1.0 ( JDK-8256660 )
  • 新方法 Path::getExtension 返回文件的扩展名 ( JDK-8057113 )
  • JMX 连接默认使用 ObjectInputFilter ( JDK-8283093 )
  • 支持 Unicode 15.0 ( JDK-8284842 )

Build 21:

  • 改进了 G1 并发细化线程的控制 ( JDK-8137022 )

G1 并发细化线程的控制已被完全取代。新控制器通常分配更少的线程。它往往在细化线程活动中具有较少的尖峰。它还倾向于延迟细化,当有多个写入相同或附近的位置时,允许写入屏障进行更多过滤,从而提高屏障的效率。
有许多命令行选项用于为旧控制器提供参数值。这些与新控制器无关,不再有任何用处。它们都已经过时了;在命令行上指定它们中的任何一个都只会打印一条关于该选项已过时的警告消息。
-XX:-G1UseAdaptiveConcRefinement

-XX:G1ConcRefinementGreenZone=buffer-count

-XX:G1ConcRefinementYellowZone=buffer-count

-XX:G1ConcRefinementRedZone=buffer-count

-XX:G1ConcRefinementThresholdStep=buffer-count

-XX:G1ConcRefinementServiceIntervalMillis=msec

Build 20:

  • FileChannel 位置写入在 APPEND 模式下未指定 ( JDK-6924219 )
  • 新的 JFR 事件:jdk.InitialSecurityProperty ( JDK-8292177 )
  • 在输入错误的情况下调用的URL构造函数可能会抛出以前没有抛出的MalformedURLException。 (JDK-8293590)
  • GetLocalXXX/SetLocalXXX 规范应该要求暂停目标线程( JDK-8288387 )

Build 17:

  • Thread.suspend/resume 更改为抛出 UnsupportedOperationException ( JDK-8249627 )
  • Thread.Stop 更改为抛出 UnsupportedOperationException ( JDK-8289610 )
  • 新的 JFR 事件:jdk.SecurityProviderService ( JDK-8254711 )

Build 16:


在 JDK 17 G1 中添加了“预防性”垃圾收集 (GC):这些是推测性垃圾收集,目的是避免在堆快满时由于分配突发而导致代价高昂的疏散失败。
然而,这些(推测性的)收集会带来额外的垃圾收集工作——因为对象老化是基于 GC 的数量,额外的 GC 会导致过早地提升到老年代——这会导致老年代中的更多数据,以及更多的垃圾收集努力移除这些物体。当前预测触发预防性垃圾收集非常保守,这使情况更加复杂;这意味着这些垃圾回收通常是在不必要的情况下触发的。

默认情况下已禁用,可使用下面配置被重新启用:

-XX:+UnlockDiagnosticVMOptions -XX:+G1UsePreventiveGC