【问题标题】:Spring AOP vs AspectJ startup perf/memory reqsSpring AOP vs AspectJ 启动性能/内存请求
【发布时间】:2012-03-11 05:23:41
【问题描述】:

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

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

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

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

我看过帖子:

Spring AOP slow startup time

Spring AOP vs AspectJ

而且我绝对只是从一种减轻启动和内存需求负担的方式来看,并且只想在值得付出努力的情况下尝试迁移。

【问题讨论】:

    标签: spring aspectj


    【解决方案1】:

    我一直在为同样的问题而苦苦挣扎,并没有想出一个好的答案,但这是我迄今为止尝试过的,它可能会为您节省一些时间。

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

    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 有一个 chaching 模式让 LTW 加快速度,请参阅 https://bugs.eclipse.org/bugs/show_bug.cgi?id=367673 我没有使用它,所以我不知道它的效果如何。

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

    【讨论】:

      猜你喜欢
      • 2012-07-25
      • 2015-12-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2010-12-09
      • 2015-01-20
      相关资源
      最近更新 更多