我目前遇到的问题是我有一个(部分)程序试图加载一个类但失败,因为它找不到这个类.查看堆栈跟踪,我看不出任何特定原因导致 VM首先尝试加载此特定类.是否有任何工具可以让我弄清楚为什么要加载特定的类?
提示:我已经在JVM尝试加载类(通过代理)的确切位置获取堆栈跟踪.但是,堆栈跟踪不包含行号.因此我只知道哪个方法触发了正在加载的类,而不是哪个语句.然后,即使知道该陈述可能还不够.单个语句可以导致以多种方式加载类,因为有时VM需要加载类的传递闭包的一部分.
kdg*_*ory 21
使用-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
Run Code Online (Sandbox Code Playgroud)
您需要跟踪特定类的RESOLVE消息链.或者更有可能的是,当程序尝试加载类时,您会看到错误,前面是加载它的类的解析消息.
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |