我试图打开一个Java类文件,检测字节码并在类加载到JVM之前保存类文件。我的问题是类“太快”加载到 JVM 中。类加载到 JVM 后,就会对字节码进行检测。
-verbose:class
在加载每个类时打印,但它没有告诉我是什么触发了 JVM 加载该类。如何获取显示正在加载的类的调用堆栈?
在以下代码中放置断点,显示类初始化且未加载时的调用堆栈。
static
{
System.out.println("Initialized!");
}
注意:我知道我可以使用 Java 代理来执行此操作并保证字节码已被检测。但是,我出于多种原因选择了这条路线。
最佳答案
我打开了java.lang.ClassLoader
,并在loadClass(String name, boolean resolve)
中设置了一个条件断点。条件为 arg0.endsWith("MyClass")
,其中 arg0
是 name
参数。当断点被触发时,IDE会显示调用堆栈。调用堆栈上的几个帧向我展示了加载该类的原因。
注意:此条件在 Eclipse IDE 中有效,在其他 IDE 中可能需要进行一些调整。
关于java - 是什么导致 Java 类被加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37469208/