6

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

考虑到 Java 会推迟一个类的加载,直到不能再延迟它,所以这个特定的类这么快被加载肯定是有原因的。

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

4

1 回答 1

2

正如您已经指出的,Java(或者实际上是运行您的代码的 VM)在加载和解析类时,它们是必需的。这通常也会导致几个班级的连锁反应。显然,不包含编织代码的类很有可能在 Spring 类之前加载。

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

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

于 2013-07-11T12:21:53.763 回答