Java 类加载 - 哪个类加载器和/或类导致加载?

标签 java jvm classloader verbose

我知道通过使用 verbose:class 标志,我们可以让 jvm 在加载类时以及从何处加载时注销。但是,我想查看一些附加信息 - 哪个类加载器加载了该类,最好是正在执行的导致加载的类。 (不完全确定后一部分是否有意义!)

有什么方法可以让 jvm 记录此信息,或者有任何其他关于如何获取它的建议吗?谢谢

最佳答案

如果您使用-XX:+TraceClassLoading,您可以看到在某些情况下触发类加载的原因。和-XX:+TraceClassResolution你会看到 Loading 的集合消息(当加载 .class 字节时)和后续 RESOLVE当类本身得到解决时的消息。因此,通过找出哪个RESOLVE您看到的消息应该能够确定哪个类导致加载依赖类。

不幸的是,这并没有告诉您有关类加载器的任何信息。因此,尽管它会打印出从中加载的 JAR,但如果它不能唯一标识您的类加载器,那么可能无法使用标准工具来回答该问题。但是,如果您使用的是 Tomcat 或 OSGi 等提供自己的类加载器的嵌入式引擎,则可能可以打开其他调试标志来识别正在使用哪个类加载器实例。

关于Java 类加载 - 哪个类加载器和/或类导致加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36643530/

相关文章:

java - 需要对 Spring 配置和初始化程序进行一些说明

java - 使用 XML 文件在 swing 中构建 GUI

java - -Xss JVM 选项的实际作用是什么

java.lang.NoSuchMethodError 因为 Tomcat 的 lib 文件夹中有重复的类

spring java配置问题: Rejected bean name 'requestMappingHandlerMapping' : no URL paths identified

java - 抽象类和接口(interface)在 JVM 中的存储方面有什么区别

java - java中如何将数据写入txt文件?

java - 如何通过 JNI 调用 Java 方法,让 JVM 垃圾收集参数?

Java jnlp 强制运行 32 位版本

java - 什么是非惰性初始化?