【问题标题】:Can't use Shenandoah GC无法使用雪兰多 GC
【发布时间】:2021-09-08 00:56:57
【问题描述】:

在尝试运行 Java 应用程序时,我无法让 ShenandoahGC 工作。无论我尝试什么,当从终端(或 CMD)调用 java 命令时,输出如下:

虚拟机初始化时出错

不支持选项 -XX:+UseShenandoahGC

在 Ubuntu (WSL) 和 Windows 上运行 openJDK 版本 15.0.2,我在两者上都收到相同的消息。

已尝试在 -XX:+UseShenandoahGC 旁边应用 -XX:+UnlockExperimentalVMOptions 选项,但据我所知,JDK 15 放弃了实验状态。

【问题讨论】:

  • 你确定你没有下载oracle jdk而不是openjdk?我们在生产中使用 openjdk,根本没有 -XX:+UnlockExperimentalVMOptions
  • 是的,Oracle JDK 和 OpenJDK 都不包含它。 AdoptOpenJDK 可以。
  • 是的,现在一切都说得通了。

标签: java garbage-collection shenandoah


【解决方案1】:

根据我在这里阅读的内容:What is new in Java 15(第 10 点。JEP 379)Shenandoah GC 未包含在 OpenJDK 15 官方版本中。

【讨论】:

  • 摘自第 10 条“但是,官方的 OpenJDK 15 构建不包括 Shenandoah GC(就像 Java 12 中发生的一样)。”事实上,这就是我的运行时没有找到它的原因。 AdoptOpenJDK 包含它
【解决方案2】:

简短的回答是,可从官方 OpenJDK 下载站点获得的 Oracle Java 和 OpenJDK Java 版本不包括对 Shenandoah GC 的支持。

但好消息是许多其他 Java 12+ 构建版本。 AdoptOpenJDK 可以。 RHEL 的 Java 可以。 Ubuntu 的 Java(从包管理器安装)可以。我希望其他人也能这样做。


Red Hat 博客上的一篇文章解释了这种情况,摘录如下。

"Not all OpenJDK 12 builds include Shenandoah: Here's why"

日期:2019 年 4 月 19 日

[...]

小历史:Shenandoah,高性能低暂停时间 垃圾收集器,是 Red Hat 主导的项目。当我们第一次提议 将 Shenandoah 贡献给 OpenJDK,甲骨文明确表示他们 不想支持它。这很公平:OpenJDK 是免费的 软件,因此您不必支持任何您不想要的东西。我们 告诉甲骨文,我们将与他们合作设计一个真正干净的 可插拔垃圾收集器接口,允许任何人轻松地 选择要包含在其构建中的垃圾收集器。我们这样做了 一起,Shenandoah 进入了 JDK 12。

显然甲骨文选择不建造雪兰多。他们没有做 排除它有什么严重错误,但感觉不到什么 对我来说。 Oracle 不支持这些构建——您需要它们的 商业二进制文件以获得支持——那么为什么要排除雪兰多呢?它可能 仅仅是因为他们使用他们的标准构建脚本来构建他们的 开源二进制文件。然而,在一个功能相当轻的 OpenJDK 发布,我觉得开源构建排除其中一个很奇怪 最重要的贡献。我非常感谢 Oracle 提供 GPL 许可的 OpenJDK 构建,但我希望他们能构建所有这些。

[...]

请注意,上面的评论不是我的,而是博文作者的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 2021-05-27
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2019-03-01
    相关资源
    最近更新 更多