java 的三种代理模式 (三)——性能

https://cloud.tencent.com/developer/article/2422961

方法调用性能较高,避免了反射调用。

仅限于invokeSuper,so spring的cglib代理仍然用了反射

 

https://www.cnblogs.com/zwwhnly/p/17340026.html 这篇证明了invokeSuper没有用反射而是2个switch case  o(logn) + o(1)

先通过第一个switch methodName hash取得method从0开始的连续索引-o(logn), 然后第二个switch 调用发生 - o(1)

第一个switch case也可以定制为空间换时间用hash表,不过cglib和reflectasm都是用的switch树

 

https://www.zhihu.com/question/66004088/answer/2279409634?share_code=G8bXO9CduwDw&utm_psn=1934042358535659762

Java动态代理使用Java原生的反射API进行操作(运行期),在生成类上比较高效。 CGLIB使用ASM框架直接对字节码进行操作(编译期),在类的执行过程中比较高效

 

 

https://cloud.tencent.com/developer/article/2422961

在实际测试中,JDK动态代理在创建代理实例时的性能优于Cglib,而在方法调用时,Cglib的性能则优于JDK动态代理。这是因为JDK动态代理在方法调用时依赖于反射,而Cglib直接调用生成的子类方法(invokeSuper)。

 

relectionasm性能

reflectasm同样,生成慢,调用快,与cglib极为相似

 

posted on 2025-07-30 23:51  silyvin  阅读(10)  评论(0)    收藏  举报