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

java 5 2016-02-29 13:03
女装

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

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

代理模式的实现和使用

代理分为几种

静态代理

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

动态代理

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


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