资讯专栏INFORMATION COLUMN

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

andot / 2515人阅读

摘要:代理模式的意图很多,比如安全原因,远程调用等。这里主要讨论使用代理模式实现延迟加载,从而提升系统的性能和反应速度。是低级的字节码生成工具,使用已经近乎于在使用编程,对开发人员要求更高,当然也是性能最好的一种动态代理生成工具。

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

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

代理模式的实现和使用

代理分为几种

静态代理

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

动态代理

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


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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65407.html

相关文章

  • 一名【合格】前端工程师的自检清单

    摘要:在他的重学前端课程中提到到现在为止,前端工程师已经成为研发体系中的重要岗位之一。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。一基础前端工程师吃饭的家伙,深度广度一样都不能差。 开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。 winter在他的《重学前端》课程中提到: 到现在为止,前端工程师已经成为研...

    罗志环 评论0 收藏0
  • 一名【合格】前端工程师的自检清单

    摘要:在他的重学前端课程中提到到现在为止,前端工程师已经成为研发体系中的重要岗位之一。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。一基础前端工程师吃饭的家伙,深度广度一样都不能差。开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。 winter在他的《重学前端》课程中提到: 到现在为止,前端工程师已经成为研发体系...

    isaced 评论0 收藏0
  • 超实用百道Java面试题

    摘要:是的简称,运行环境,为的运行提供了所需的环境。分割字符串,返回分割后的字符串数组。当计算的值相同时,我们称之为冲突,的做法是用链表和红黑树存储相同的值的。迭代器取代了集合框架中的,迭代器允许调用者在迭代过程中移除元素。 Java基础1.JDK和JRE有什么区别? JDK 是java development kit的简称,java开发工具包,提供java的开发环境和运行环境。JRE 是j...

    MkkHou 评论0 收藏0
  • Java 最常见 200+ 面试题全解析:面试必备(附答案)

    摘要:的简称,运行环境,为的运行提供了所需环境。分割字符串,返回一个分割后的字符串数组。线程安全是线程安全的,而是非线程安全的。迭代器取代了集合框架中的,迭代器允许调用者在迭代过程中移除元素。 本文分为十九个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Clou...

    hufeng 评论0 收藏0

发表评论

0条评论

andot

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<