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

问题描述 投票:0回答:12

最近我切换到 Java 11 并开始调试我的应用程序并看到此消息:

OpenJDK 64 位服务器虚拟机警告:仅支持启动共享 加载器类,因为已附加引导类路径

仅找到this committicket,但它并没有告诉我太多信息。

我需要担心吗?

java intellij-idea classloader java-11
12个回答
184
投票

在安装

jdk-12.0.1_windows-x64_bin.zip
后尝试将调试器与 IntelliJ IDEA 一起使用时,我也遇到了这个问题。我收到错误(Java HotSpot(TM) 64 位服务器虚拟机警告:仅引导加载程序类支持共享,因为已附加引导类路径)。我还发现,进入“设置”并搜索“异步”,然后取消选中“检测代理”框。为我工作!


43
投票

您可以忽略此警告。这只是意味着对于引导类加载器未加载的类禁用类数据共享。

来自 通过应用程序类数据共享改善启动时间 […]:

JVM使用引导类加载器加载一些JDK类 其余的与系统类加载器一起,但将它们全部包含在 它的默认存档。当 IntelliJ 执行您的项目时,它会告诉 JVM 通过附加到引导类加载器来加载一些代码 该类路径(消息的第二部分)。现在,这意味着 包含系统加载的类的存档部分 类加载器可能会失效,因此 JVM 会部分失效 停用共享(消息的第一部分)。

您可以使用

-Xshare:off

 完全禁用类数据共享,但这可能会增加启动时间。


17
投票
我在安装 Java12 后尝试将调试器与 Intellij Idea 一起使用时遇到了这个问题。我找到的解决方案是进入“设置”并搜索“异步”,然后取消选中“检测代理”框。


13
投票
对我来说,仅当我在 Docker 中运行以及使用 DataDog APM 代理 (

-javaagent:/dd-java-agent.jar

) 等 java 命令行代理时,才会出现此问题。
当我在 JDK11 运行时环境(没有代理)中运行时,我没有收到警告。


7
投票
考虑到 IntelliJ 中的此警告是无害的(请参阅

https://stackoverflow.com/a/57957031/779173),您可以通过右键单击该行并选择“像这样折叠行”来从控制台视图中隐藏该行”

完成此操作后,您将看到:

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

4
投票
对于 Intellij IDE -> 设置/首选项对话框 ( Ctrl+Alt+S ),转到构建 |执行 |部署|调试器|异步 -> 取消选中检测代理


2
投票

Operation guide

1.打开

首选项选项;

2.找到

构建、执行、部署选项;

3.进入

调试器 --> 异步堆栈跟踪 ;

4.取消选中

检测代理(需要重新启动调试器) ;


请参阅此

了解详细信息


0
投票
如果不重要的话可以更改jdk版本。我已从 jdk14 更改为 jdk 11。希望它对您有用。


0
投票
遇到了同样的问题,并尝试按照上面所写的方法解决它。

但是后来我在不更改设置的情况下得到了另一个问题解决方案。

在您放置断点并想要调试的文件上按鼠标右键。然后选择“调试

你的文件名.method()”。

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

这对我有用,无需更改异步设置。

Screenshot


0
投票
使用 gradle,您可以关闭共享:

tasks.test { //kotlin jvmArgs = listOf("-Xshare:off") //groovy jvmArgs "-Xshare:off'"; }
    

-9
投票
Java 版本必须为 9 或更高版本。

enter image description here


-9
投票
今天我发现了和你一样的问题。 情况:不设置断点调试 解决办法:在点击调试按钮之前至少设置一个断点!

© www.soinside.com 2019 - 2024. All rights reserved.