java - 是什么导致 Java 类被加载?

标签 java classloader

我试图打开一个Java类文件,检测字节码并在类加载到JVM之前保存类文件。我的问题是类“太快”加载到 JVM 中。类加载到 JVM 后,就会对字节码进行检测。

-verbose:class 在加载每个类时打印,但它没有告诉我是什么触发了 JVM 加载该类。如何获取显示正在加载的类的调用堆栈?

在以下代码中放置断点,显示类初始化且未加载时的调用堆栈。

static
{
    System.out.println("Initialized!");
}

注意:我知道我可以使用 Java 代理来执行此操作并保证字节码已被检测。但是,我出于多种原因选择了这条路线。

最佳答案

我打开了java.lang.ClassLoader,并在loadClass(String name, boolean resolve)中设置了一个条件断点。条件为 arg0.endsWith("MyClass"),其中 arg0name 参数。当断点被触发时,IDE会显示调用堆栈。调用堆栈上的几个帧向我展示了加载该类的原因。

注意:此条件在 Eclipse IDE 中有效,在其他 IDE 中可能需要进行一些调整。

关于java - 是什么导致 Java 类被加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37469208/

相关文章:

java - 将 Collections.emptyMap 作为参数传递时出现错误

java - 对象不是使用 java 反射声明类的实例

java - 如何在单例类 Spring Boot 中使用服务(使用 "usual"类连接不同的服务)

java - eclipse tycho + java 11 = 未知的 OSGi 执行环境 : 'JavaSE-11'

java - 重定向时请求的资源(/xxx.html)不可用

java - 在tomcat中重新加载类文件

java - 通过 onejar 插件使用反射

java - 使用 ClassLoader 加载文件

java - 在 Mac 上使用 Resin 3.1.x 配置 JRebel 5

java - 如何解析带有可选部分的日期时间?