代理模式几种实现性能比较

代理模式的意图很多,比如:安全原因,远程调用等。这里主要讨论使用代理模式实现延迟加载,从而提升系统的性能和反应速度。

延迟加载的核心思想是:如果当前并没有使用这个组件,则不需要真正地初始化它,使用一个代理对象替代它的原有的位置,只要在真正需要使用的时候,才对它进行加载。

代理模式的实现和使用

代理分为几种

静态代理

    
为每一个代理写一个方法,其实是挺烦的。接口有变动,真实主题与代理类都要修改。

动态代理

解决了上面问题,同时可以在运行时指定代理类的执行逻辑,从而大大提升系统的灵活性。
动态代理又分JDK自带的动态代理,CGLIB,Javassist或者ASM库。
ASM是低级的字节码生成工具,使用ASM已经近乎于在使用Java bytecode编程,对开发人员要求更高,当然也是性能最好的一种动态代理生成工具。但ASM的使用是在过于繁锁,而且性能也没有数量级的提升,与CGLIB等高级字节码生成工具相比,ASM程序的维护性也较差,如果不是在对性能有苛刻要求的场合,建议还是使用CGLIB或Javassist


实际测试中,JDK的动态类创建过程很快,这是因为在这个内置实现中defineClass()方法被定义为native实现,故性能高于其它几种实现。但在代理类的函数调用性能上,JDK的动态代理就不如CGLIB和Javassist的基于动态代理的代理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值