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

and*_*esp 6 java aop spring aspectj classloader

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

考虑到Java推迟了类的加载,直到它不可能延迟更多,必须有一个原因,为什么这个特定的类被很快加载.

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

See*_*ose 2

正如您已经指出的,Java(或者实际上是运行代码的虚拟机)会在需要时加载并解析类。这通常也会对多个类别产生连锁反应。显然,不包含编织代码的类很有可能先于 Spring 类加载。

然而,Java HotSpot VM(安装Oracle Java时的典型VM)在启动时可以通过多种方式进行配置。其中一个选项是“-XX:+TraceClassLoading”(注意加号;不幸的是,上面提到的链接记录了此选项的减号)。还有另一个选项,可以按引用顺序跟踪加载的类。

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