jdk18是哪个版本(jdk18就是jdk1.8吗)

3 月 22 日,JDK 18发布。对于 ZGC 来说,这是一个相当安静的版本,因为我们在过去一年左右的大部分时间里都致力于使 ZGC 成为一代代 GC。尽管如此,在此版本中仍有 37个 与 ZGC 相关的错误修复和增强功能。我将在这篇文章中讨论一些更有趣的内容。如果您有兴趣了解有关以前 JDK 版本中 ZGC 功能/增强功能的更多信息,请查看我以前的一些帖子。

现在让我们谈谈 JDK 18 中的新功能(从 ZGC 的角度来看)。

字符串重复数据删除

jdk18是哪个版本(jdk18就是jdk1.8吗)

字符串重复数据删除是一个 JVM 特性 ( -XX:+UseStringDeduplication),它已经存在了很长一段时间。它通过自动删除支持 String 对象的相同字符数组来帮助减少 Java 堆内存使用量。例如,如果堆上存在两个 String 对象,并且它们都指向包含字符“Java”的后备数组,则其中一个 String 对象将被修改,以便两个 String 对象指向同一个数组,而另一个数组将变得无法访问并受到垃圾收集。对于某些应用程序,这可以帮助减少相当多的堆内存使用量,因为 String 对象可以占用 Java 堆的重要部分,并且在这些对象中查找重复项是相当普遍的。

我在 2014 年编写了JEP和该功能的初始实现,它作为 JDK 8u20 的一部分发布。这是在 ZGC 诞生之前,最初的实现只是在 G1 垃圾收集器中增加了对字符串去重的支持。

快进到 2021 年。Kim Barrett彻底检修 了 String 重复数据删除基础架构的重要部分。总体概念保持不变,但字符串重复数据删除机制与垃圾收集器的接口方式变得更加通用。这使得该功能更容易集成到 G1 以外的垃圾收集器中。结果,字符串重复数据删除支持后来被添加到SerialGC、 ParallalGC和ZGC。

如果您不熟悉字符串重复数据删除、它的实际作用以及何时可能想要启用它,请查看 JEP。即使该文档现在有点过时(例如,它只讨论 G1),该功能的要点仍然是相同的。

类卸载问题已修复

我们收到了一份关于 ZGC 邮件列表中的性能问题的报告。事实证明,这是一个 10 年前的错误,可以追溯到 PermGen的删除。

因此,大约 10 年前,移除 PermGen的补丁对处理内联缓存清理的函数进行了一些更改。内联缓存是 JVM 用来加速 Java 中的方法调用的一种推测性优化技术。当 GC 卸载未使用的类和已编译的方法时,需要清理一些 Inline Cache,以便它们不再引用任何卸载的实体。

事实证明,这个补丁包含一个小而重要的编辑错误,其中缩进和范围混淆了。只看补丁很难发现这个错误,因为有问题的代码也被移动了。这个错误导致一些内联缓存被错误地清理。但是,不正确的清理并没有导致任何明显的问题,例如 JVM 崩溃。相反,它引发了一个恶性循环,GC 和 Java 线程在如何清理这些缓存方面存在分歧并争执不休。最终结果是,在某些条件下,类卸载可能需要很长时间才能完成。由于问题的根本原因是 GC 和并发运行的 Java 线程之间的不良交互,它只影响了进行并发类卸载的 GC(例如 ZGC)。执行 Stop-the-World 类卸载的 GC(例如 SerialGC,

幸运的是,一旦发现了这个问题,修复就很 简单了。如果您对更多详细信息感兴趣,可以在相应的 拉取请求中阅读所有相关信息。

此修复也向后移植到 JDK 17.0.2。

Linux/PowerPC 支持

jdk18是哪个版本(jdk18就是jdk1.8吗)

早在 2013 年,即在 ZGC 成立之前,JEP 175的创建是为了将 Linux/PowerPC(以及 AIX/PowerPC)支持引入 OpenJDK。初始端口作为 JDK 8u20 的一部分发布,并一直保持至今。支持这个平台的努力从一开始就由我们在SAP的朋友资助。

因此,听说 SAP 也贡献了补丁以使 ZGC 在 Linux/PowerPC 上可用,这可能并不令人惊讶。添加对新 CPU 架构的支持主要是在解释器和两个 JIT 编译器中实现 ZGC 的各种屏障(负载屏障、nmethod 入口屏障和堆栈水印屏障)。补丁的重量约为 1200 行代码。

从 JDK 18 开始,ZGC 现在可以在以下平台上运行( 有关详细信息,请参阅此表):

  • Linux/x64
  • Linux/AArch64
  • Linux/PowerPC
  • macOS/x64
  • macOS/AArch64
  • 视窗/x64
  • 视窗/AArch64

概括

  • -XX:+UseStringDeduplication现在支持JVM 选项。此功能(默认禁用)告诉 ZGC 查找和去重支持 String 对象的相同字符数组,以减少整体堆内存使用。
  • 修复了一个存在 10 年之久的错误,该错误有时会导致类卸载需要很长时间。
  • ZGC 现在可以在 Linux/PowerPC 上运行,这要感谢 SAP 的人。
    
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 cloud@ksuyun.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.daxuejiayuan.com/4957.html