我想知道如果使用 AspectJ 来拦截应用程序中的每个(或只是大多数)方法,是否存在任何重大性能问题。当然,性能也会受到每次拦截时执行的建议的影响。
为了这个例子,让我们假设它是非常简单的建议,它运行得非常快并且开销最小/没有内存泄漏。由于每个方法都被拦截,是否仍然存在显着的性能 killer ?
最佳答案
它肯定不会加速您的代码。 我已经看到可怕的结果,其中在调用者和被调用者之间添加了 19 个堆栈帧,以用于其他直接的快速事件处理方法。可以说 AOP 在我心中已经死了。
如果幸运的话,您可能已经编译了代码,这些代码由 jit 编译器内联,并且只添加了您选择添加的实际工作,就像您就地编写一样。最坏的情况,比如那里的 spring/osgi 垃圾,你最终会得到一些无法使用的蜗牛。
关于java - AOP 的性能开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8880648/