在使用Java 11进行调试期间,如何避免出现“仅由于引导程序类路径已附加而仅支持引导加载程序类共享”的警告?


78

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

OpenJDK 64位服务器VM警告:共享仅受引导加载程序类支持,因为已附加了引导程序类路径

仅找到此提交故障单,但并不能告诉我太多。

我需要担心吗?


5
您正在尝试同时使用-Xbootclasspath / a和CDS(或AppCDS)。可以使用-Xshare:off来禁用CDS吗?
艾伦·贝特曼

1
只是一个猜测(因为我看到了类似的东西),您使用的是正在执行Alan指出的操作的IDE,而您甚至没有意识到它?那是IntelliJ吗?
Naman

1
是的,这是IntelliJ
Dmitriy Dumanskiy

13
带有Java 12的IntelliJ IDEA中的相同问题
。– turbanoff

4
切换到Java 12之后,我就发生了这种情况,我确实使用-Xshare:off运行,并且也可以正常工作,但是究竟是什么呢,这是否可以防止我将来需要的东西,否则可能会发生不好的情况?
扎雷斯

Answers:


104

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


10
在关闭此功能之前,请阅读有关“异步堆栈跟踪”功能的信息,以查看该功能是否对您没有用:jetbrains.com/help/idea/async-stacktraces.html
Samuel,

1
简而言之:当父线程启动子线程或进程(某些“捕获点”)时,将进行线程转储。当您中断子线程时,其堆栈跟踪的一部分将来自父线程。
Mark Jeronimus


7

您可以忽略此警告。这仅表示对于未由引导类加载器加载的类禁用了类数据共享。

使用应用程序类数据共享缩短启动时间[…]

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

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


6

对我来说,仅当我在Docker中运行时,以及当我使用Java命令行代理(例如DataDog APM代理(-javaagent:/dd-java-agent.jar))时,才出现此问题。当我在JDK11运行时环境(没有代理)中运行时,没有得到警告。


3

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



0

今天,我发现了与您相同的问题。情况:在没有设置断点的情况下调试解决方案:在单击调试按钮之前,至少设置一个断点!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.