Java:找出*为什么*加载类

用户66237:

我目前遇到的问题是,我有一个(部分)程序试图加载一个类,但由于找不到该类而失败。查看堆栈跟踪,我看不到VM 为何首先尝试加载此特定类的任何特定原因有什么工具可以让我弄清楚为什么要加载特定的类?

提示:我已经在JVM尝试通过代理加载类的确切位置获得了堆栈跟踪。但是,堆栈跟踪不包含行号。因此,我只知道哪个方法触发类的加载,而不知道哪个语句。然后,仅知道该语句可能还不够。单个语句可能导致以多种方式加载类,因为有时VM需要加载类的可传递闭包的一部分。

kdgregory:

使用-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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章