gpt4 book ai didi

Spring AOP 与 AspectJ 启动性能/内存要求

转载 作者:行者123 更新时间:2023-12-02 09:59:44 27 4
gpt4 key购买 nike

我正在努力提高我们的 war 的启动性能,因为我们本质上是托管一个基于服务的后端,其中我们有大约 50 多个 war (每个服务一个)。一次部署所有这些服务有时会导致 PermGen,并且服务器的重新启动可能需要相当长的时间。因此,我尝试评估架构(WLS、Spring、Hibernate、CXF)的所有可能性以提高性能。

我们所有的事务都是通过 Spring AOP 完成的,我们的一些 SLA/策略利用 AOP 切入点。

我见过一些情况,我们的 Spring AOP 切入点要么创建得不好,要么我们有很多切入点,这会导致 JUnit 转为 PermGen。看起来大部分启动时间都是创建切入点和检索切入点对象(因此我将一些自定义切入点/拦截器类合并到单个类和单个切入点中,这减少了启动时创建的切入点数量约 30%)。

为了从编译时编织中获得一些好处,是否值得将所有这些转换为 AspectJ(我以前没有使用过)?这会为启动性能和内存使用提供更好的速度吗?

我看过帖子:

Spring AOP slow startup time

Spring AOP vs AspectJ

我纯粹是在寻求一种减轻启动和内存需求负担的方法,并且只想在值得的情况下尝试迁移。

最佳答案

我一直在努力解决这个同样的问题,但没有找到一个好的答案,但这是我到目前为止所尝试过的,它可能会节省您一些时间。

我将 LTW 与 AspectJ 1.7.1 一起使用,它使我的启动时间增加了大约 3 秒,我将它与带有自定义类加载器的 tomcat 一起使用,并且将其配置为仅扫描我的代码而不扫描其他包。在我看来,剩下的启动时间似乎是在分析我的代码库以进行基于注释的 Autowiring 。

08:11:27,878 INFO  [DefaultContextLoadTimeWeaver] Using a reflective load-time weaver for class loader: org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader
08:11:30,326 INFO -- the last info printed from the LTW infrastructure

我有一台带 SSD 的相当快的机器,如果你的机器不那么快,这可能需要更长的时间。

新的 AspectJ 1.7 为 LTW 提供了一种 Chaching 模式,以加快速度,请参阅 https://bugs.eclipse.org/bugs/show_bug.cgi?id=367673我没有使用过所以我不知道它的效果如何。

最快的选择是将项目转换为 AspectJ 项目,这样就不会因为aspectJ而产生启动开销,因为我们正在进行编译时编织。我没有使用这个选项,因为我没有费心将aspectJ集成到我的构建系统中,并且我不想让编写aspect变得太容易:)

关于Spring AOP 与 AspectJ 启动性能/内存要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com