1

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

虚拟机初始化过程中发生错误

选项 -XX:+UseShenandoahGC 不支持

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

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

4

2 回答 2

2

从我在这里读到的内容:Java 15 中的新功能(第 10 点。JEP 379)Shenandoah GC 未包含在 OpenJDK 15 官方版本中。

于 2021-02-23T13:23:29.383 回答
0

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

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


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

“并非所有 OpenJDK 12 版本都包含 Shenandoah:这就是原因”

日期:2019 年 4 月 19 日

[...]

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

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

[...]

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

于 2021-09-18T02:45:55.810 回答