使用aop对性能的影响

Lio*_*orH 40 performance aop spring spring-aop

我们已经开始使用spring aop来实现我们应用程序的交叉切割(目前的安全性和缓存).

我的经理担心这项技术对性能的影响,尽管他完全理解这些技术带来的好处.

我的问题,您是否遇到过使用aop(特别是spring aop)引入的性能问题?

kro*_*old 33

只要你控制你的AOP,我认为它是有效的.无论如何我们确实遇到了性能问题,所以通过自己的推理我们并没有完全控制;)这主要是因为任何编写方面的人都充分了解系统中的所有其他方面以及它们如何相互关联.如果你开始做"聪明"的事情,你可以快速超越自己.在一个大型项目中做聪明的事情,很多人只看到系统的一小部分,这在性能上是非常危险的.这个建议可能也适用于没有AOP,但是AOP可以让你以一些真正优雅的方式射击自己.

Spring还使用代理进行范围操作,是一个容易导致意外性能损失的领域.

但鉴于你有控制权,AOP唯一真正的痛点就是对调试的影响.


Nat*_*han 27

如果性能成为一个问题,我们已经使用AspectJ产生了很大的效果.

因为它使用字节码编织(编译时与运行时间完全不同),它是最快的AOP框架之一.请参阅:AOP基准

  • 存档版本仍然可用[此处](https://web.archive.org/web/20150520175004/https://docs.codehaus.org/display/AW/AOP+Benchmark) (2认同)

Jon*_*eet 19

当我使用它时,我没有 - 但那时我的应用程序不是你的应用程序.

如果你将它用于非常紧凑的循环中使用的呼叫,那么就有机会获得显着的性能提升.如果它只用于检查每个请求的安全性并缓存各种内容,我看不出它可能是多么重要 - 但这就是为什么你应该对你的应用进行分析和基准测试.

我意识到"用您的应用程序衡量"可能不是您正在寻找的答案,但它可能是您猜到的那个:)


cli*_*ers 6

如果您使用的是基于代理的AOP,那么您正在讨论每个方面应用的另外一个Java方法调用.对那里的性能影响几乎可以忽略不计.唯一真正关心的是创建代理,但这通常只在应用程序启动时发生一次.SpringSource博客有一个很棒的帖子:

http://blog.springsource.com/2007/07/19/debunking-myths-proxies-impact-performance/

  • 真?为什么在调试时会在堆栈跟踪中看到这么多方法调用(~5)? (2认同)