AOP 的性能开销
2022-09-03 16:12:58
我想知道使用AspectJ是否有任何重大的性能问题,如果它被用来拦截应用程序中的每个(或只是大多数)方法。当然,性能也会受到每次拦截时执行的建议的影响。
为了这个例子,让我们说它非常简单的建议,运行得非常快,开销最小/没有内存泄漏。由于每种方法都被拦截,是否仍然存在重要的性能杀手?
我想知道使用AspectJ是否有任何重大的性能问题,如果它被用来拦截应用程序中的每个(或只是大多数)方法。当然,性能也会受到每次拦截时执行的建议的影响。
为了这个例子,让我们说它非常简单的建议,运行得非常快,开销最小/没有内存泄漏。由于每种方法都被拦截,是否仍然存在重要的性能杀手?
它当然不会加速你的代码。我见过可怕的结果,其中在调用方和被调用方之间添加了19个堆栈帧,用于其他直接的快速事件处理方法。可以说AOP在我心目中已经死了。
如果幸运的话,您可能已经编译了代码,该代码由jit编译器内联,并且只是添加您选择添加的实际工作,就好像您就地编写了它一样。最糟糕的情况,比如弹簧/osgi废话,你最终会得到一些无法使用的蜗牛。