如何避免在 Java11调试期间出现“共享仅支持引导加载程序类,因为引导类路径已被追加”的警告?

最近我转向 Java11并开始调试我的应用程序,看到了这样的信息:

OpenJDK64-BitServerVM 警告: 只有在引导时才支持共享 加载程序类,因为已追加了引导类路径

只找到了 这个承诺罚单但没什么线索。

我需要担心吗?

133672 次浏览

对我来说,只有在运行 Docker 时,以及使用诸如 DataDog APM 代理(-javaagent:/dd-java-agent.jar)之类的 java 命令行代理时,才会出现这个问题。 当我运行我的 JDk11执行期函式库(没有代理)时,我没有得到警告。

我在安装 Java12之后遇到了这个问题,当时我试图用 Intellij Ideas 来调试这个调试器。我找到的解决方案是进入设置和搜索异步并取消检测代理框。

在安装 jdk-12.0.1_windows-x64_bin.zip之后,我在尝试使用 IntelliJIDEA 调试器时也遇到了这个问题。我得到了一个错误的(JavaHotSpot (TM)64-BitServerVM 警告: 共享仅支持引导加载程序类,因为已附加了引导类路径)。我还发现,进入设置和搜索异步,并取消检测代理框。对我有用! ASYNC settings

您可以忽略这个警告。这只是意味着对于没有由引导类装入器装入的类禁用类数据共享。

来自 通过应用类数据共享提高启动时间[ ... ]:

JVM 用引导类装入器装入一些 JDK 类 以及其余部分与系统类装入器一起使用,但是将它们全部包含在 当 IntelliJ 执行项目时,它告诉 附加到。 JVM 用引导类加载器加载一些代码 类路径(消息的第二部分) 包含由系统加载的类的归档文件的一部分 类装入器可能会失效,因此 JVM 部分失效 停用共享(消息的第一部分)。

您可以使用 -Xshare:off完全禁用类数据共享,但是您会失去一些性能。

Java 版本必须是9或更高版本。

enter image description here

对于 Intellij IDE-> Settings/Preferences 对话框(Ctrl + Alt + S) ,转到 Build | Execution | Deployment | Debugger | Async-> uncheck 径检测代理

今天我发现了和你一样的问题。 情况: 在没有设置断点的情况下进行调试 解决方案: 在单击调试按钮之前至少设置一个断点!

如果它不是关键的,您可以更改您的 jdk 版本。我从 JDK14变成了 JDK11。希望对你有用。

Operation guide

1. 开启 偏好选项;

2. 查找 构建,执行,部署选项;

3. 输入 调试器—— > 异步堆栈跟踪;

4. 取消选中 检测代理(需要重新启动调试器);


请看这个 详细资料

你必须把红点放在代码行的左边,你将进行调试。 如果没有你得到这个按摩的 IntelliJ

遇到了同样的问题,并试图解决它,正如上面所写的。

但后来我得到了另一个解决方案的问题,没有改变设置。

按鼠标右键在您的文件中,您放置断点,并要调试。然后选择“调试 Ur file name.method ()”。

不要使用工具窗口中的调试按钮。看起来问题在于 Ideas 无法理解你想要调试哪个文件。

这在不改变异步设置的情况下对我有效。

截图

得到了相同的问题,并试图解决这样写的所有上述方法。

但是,我仍然无法调试我的文件的唯一原因是,在调试你的程序之前,你需要设置调试点,直到我们想要调试。所以只要点击图中显示的位置并设置调试点,我们的程序就可以很容易地进行调试。什么都不做。在此输入图像描述

考虑到 IntelliJ 中的这个警告是无害的(参见 https://stackoverflow.com/a/57957031/779173) ,您可以通过右键单击该行并选择“ Fold Lines Like This”来从 Console 视图中隐藏该行

做完这些,你就会看到:

"C:\Program Files\Java\jdk-17.0.2\bin\java.exe" ... <1 internal line>