java - 获取 Java 类加载引用层次结构

标签 java spring classloader aop aspectj

在调试 Spring 驱动的 AspectJ LTW(使用 -verbose:class)时,我注意到在 Spring 建立与 AspectJ 编织器的连接之前,类加载器正在加载要建议的类之一。

考虑到 Java 会推迟类的加载,直到无法再延迟为止,所以必须有一个特定的类加载得这么快的原因。

是否有可能在特定时刻获得引发将类加载到 JVM 的“引用堆栈”(因此我可以尝试推迟其使用)?如果可以,我该怎么做?

最佳答案

正如您已经指出的那样,Java(或者实际上是运行您的代码的虚拟机)在需要时加载和解析类。这通常也会导致几个类(class)的链式 react 。很明显,不包含编织代码的类很可能在 Spring 类之前加载。

然而,Java HotSpot VM(典型的VM,当安装Oracle的Java时)可以是configured在许多方面开始时。其中一个选项是 "-XX:+TraceClassLoading"(注意加号;不幸的是,上面提到的链接记录了此选项的减号)。还有另一种选择,即按引用顺序跟踪加载的类。

这样,您应该能够缩小问题的范围。如果没有,一些示例代码可能会有所帮助。虽然我担心那会有点太大了。

关于java - 获取 Java 类加载引用层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17589934/

相关文章:

java - 无法使用resttemplate使用rest api

java - 多次使用class.forname会导致内存泄漏吗? (在tomcat内部运行)

自定义类加载器的 JSP 编译错误

java - Guice 无法实例化扩展 JPanel 的类 - NPE 调用 super 构造函数

java - java.util.concurrent.ExecutionException:com.android.builder.internal.aapt.v2.Aapt2Exception:Android资源编译失败-Jenkins

java - 下载一个完整的网页,包括 java 中的资源(如图像)

java - Spring Cloud Eureka : changing heartbeat and discovery path

java - 删除操作栏按钮的 android :title,?

Spring:spring-data-mongodb 或 spring-boot-starter-data-mongodb

java - 仅使用 Spring Security 自定义 token 无状态保护 REST Controller ,同时保持正常状态的完整 Web 登录工作