Java动态代理的性能成本

40

许多现代框架(如Spring、Hibernate)通过使用Java动态代理提供非常好的动态行为,但与此相关的确切性能成本是多少? 是否有针对Sun JVM的公共基准测试可用?

3个回答

44

2
感谢提供的链接,尤其是最后一个链接提供了真实的基准数值:原始使用中的1.63倍因子。 - Gennady Shumakher

8

我不知道你提到的框架中是否有性能分析,但在我的项目lambdaj中,我大量使用了动态代理技术(使用了相同的技术cglib)。在解释我的库如何工作的pdf文档中,你也可以找到一个有趣的性能比较。


1
如果我理解正确,您的框架会将迭代平均减慢4.56倍,但这是与cglib代理还是库的其他元素有关呢? - Gennady Shumakher
主要影响 lambdaj 性能的两个因素是 cglib 和反射。我的测试结果显示,第二个因素比第一个稍微更加相关。因此我认为,通过 cglib 进行调用的速度大约是普通调用的两倍。 - Mario Fusco

2

根据Remi Forax的说法,Java代理禁止Jit编译器正确地执行其工作(在本例中是内联)。

请查看他重写的Proxy:

https://github.com/forax/proxy2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接