我目前遇到的问题是,我有一个(部分)程序试图加载一个类,但由于找不到该类而失败。查看堆栈跟踪,我看不到VM 为何首先尝试加载此特定类的任何特定原因。有什么工具可以让我弄清楚为什么要加载特定的类?
提示:我已经在JVM尝试通过代理加载类的确切位置获得了堆栈跟踪。但是,堆栈跟踪不包含行号。因此,我只知道哪个方法触发类的加载,而不知道哪个语句。然后,仅知道该语句可能还不够。单个语句可能导致以多种方式加载类,因为有时VM需要加载类的可传递闭包的一部分。
使用-XX:+TraceClassLoading
和-XX:+TraceClassResolution
标志运行程序。这将创建很多如下所示的输出:
[Loaded com.kdgregory.example.memory.PermgenExhaustion$MyClassLoader from file:/home/kgregory/Workspace/Website/programming/examples/bin/]
RESOLVE com.kdgregory.example.memory.PermgenExhaustion$MyClassLoader java.net.URLClassLoader
RESOLVE java.net.URLClassLoader java.lang.Class URLClassLoader.java:188
您需要跟踪特定类的RESOLVE消息链。或更可能的是,当您的程序尝试加载该类时,您会看到一个错误,首先是加载该类的类的解析消息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句