【发布时间】:2018-02-10 04:38:25
【问题描述】:
我正在进行的项目相当大。在尝试让这个 spring 项目的加载时间编织工作时,我被指示同时使用 spring-instrument javaagent 和 aspectjweaver javaagent。但是,我注意到当使用 aspectjweaver 代理时,我的启动时间增加了 4-6 倍。我还可以看到来自 ContextOverridingClassLoader 的相同编织消息 4-6 次。
但是,如果我删除 aspectjweaver,并且只使用 spring-instrument,我注意到我的启动时间显着减少,每个连接点只有一条来自 AppClassLoader 的编织消息。
唯一的问题是某些特定的类没有被编织(我发现这是由于在类加载器加载错误的类之前尚未加载 spring 应用程序上下文,因为 spring 是启用编织的机制)。我通过创建一个自定义 javaagent 找到了自己的解决方案,该 javaagent 以与 spring-instrument 相同的方式进行编织,只是它在 premain 中而不是在应用程序上下文加载时这样做。它现在可以在合理的时间内编织所有类。
但是,我不想走这条老生常谈的道路,因为我只能假设这两个代理的设计方式是有原因的。
我想知道是否有其他人在 aspectjweaver javaagent 中看到过类似的问题,是否有人可能知道为什么该代理与仅使用 spring-instrument 相比如此缓慢。
【问题讨论】: