我知道,通过使用: class标志,我们可以让jvm在加载类时和从何处注销。但是,我希望看到一些额外的信息-是哪个类加载器加载了类,以及理想情况下导致加载的正在执行的类。(不完全确定后半部分是否有意义!)
有没有任何方法可以让jvm记录这些信息,或者其他关于如何获取信息的建议呢?谢谢
发布于 2016-04-19 17:32:41
在某些情况下,您可以看到触发类加载的原因--如果使用-XX:+TraceClassLoading和-XX:+TraceClassResolution,您将看到Loading消息的集合(在加载.class字节时),以及类本身解析后的后续RESOLVE消息。因此,通过找出您正在看到的哪些RESOLVE消息,您应该能够确定哪个类正在导致一个依赖类被加载。
不幸的是,这并没有告诉你任何关于你的类加载器的信息。因此,尽管它会打印出它正在加载的JAR,但是如果它不能唯一地标识类加载器,那么就不可能使用标准工具回答这个问题。但是,如果您使用的是提供自己的类加载器的嵌入式引擎(如Tomcat或OSGi ),则可能会打开其他调试标志,以识别正在使用的类加载器实例。
发布于 2016-05-04 11:24:13
如果您的问题是调试类加载,我会考虑使用调试器.。
使用intellij,我能够在url加载器中设置一个断点。您可以将此断点配置为记录自定义消息,而不是中断。
如果您想在生产中打开它,当然可以编写您自己的类加载器.。
这并不复杂,但您必须弄清楚如何在不记录加载框架的情况下登录到日志记录框架。我想最简单的方法是在登录时忽略一些预定义的包。如果您选择这条路线,我可能可以为您提供一个解决方案的外壳。直接问吧。
https://stackoverflow.com/questions/36643530
复制相似问题