我知道通过使用 verbose:class 标志,我们可以让 jvm 在加载类时以及从何处加载时注销。但是,我想查看一些附加信息 - 哪个类加载器加载了该类,最好是正在执行的导致加载的类。 (不完全确定后一部分是否有意义!)
有什么方法可以让 jvm 记录此信息,或者有任何其他关于如何获取它的建议吗?谢谢
最佳答案
如果您使用-XX:+TraceClassLoading
,您可以看到在某些情况下触发类加载的原因。和-XX:+TraceClassResolution
你会看到 Loading
的集合消息(当加载 .class 字节时)和后续 RESOLVE
当类本身得到解决时的消息。因此,通过找出哪个RESOLVE
您看到的消息应该能够确定哪个类导致加载依赖类。
不幸的是,这并没有告诉您有关类加载器的任何信息。因此,尽管它会打印出从中加载的 JAR,但如果它不能唯一标识您的类加载器,那么可能无法使用标准工具来回答该问题。但是,如果您使用的是 Tomcat 或 OSGi 等提供自己的类加载器的嵌入式引擎,则可能可以打开其他调试标志来识别正在使用哪个类加载器实例。
关于Java 类加载 - 哪个类加载器和/或类导致加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36643530/