当前位置: 首页 > wzjs >正文

扬州网站制作免费开发个人网站

扬州网站制作,免费开发个人网站,网站生成器下载,wordpress wp_list_categories在上两节中,分别分享了 dubbo协议源码分析 服务提供方接入执行源码分析 最初以为dubbo的反射调用使用的只是JDK原生的反射调用方法,例如 public static void main(String[] args) throws Exception {User user new User();user.setAge(666);user.setNa…

在上两节中,分别分享了
dubbo协议源码分析
服务提供方接入执行源码分析

最初以为dubbo的反射调用使用的只是JDK原生的反射调用方法,例如

    public static void main(String[] args) throws Exception {User user = new User();user.setAge(666);user.setName("张三");Class<? extends User> userClass = user.getClass();Method getName = userClass.getDeclaredMethod("getName");Object res = getName.invoke(user);System.out.println(res);}

后来想,这好像并不符合dubbo的高性能的定位,于是进行了深入研究
在dubbo启动过程中,通过代理工厂创建了 Invoker,该Invoker是执行反射调用的关键部分
在这里插入图片描述
在dubbo中通过SPI机制内置了三种代理工厂,如下图所示,默认的代理工厂是 JavassistProxyFactory,通过 javassist的动态字节码技术,创建代理对象
在这里插入图片描述
在 JavassistProxyFactory 创建Invoker的过程中,创建了AbstractProxyInvoker,抽象的代理对象执行器。同时通过 Wrapper 对目标对象的类型进行包装,其中proxy即是原始对象
在这里插入图片描述
在Wapper中,通过ClassGenerator 构建新类,新类的名称是原始类的类名 + DubboWrap
声明为 dubbo的包装类,以及使其继承了 Wrapper.class类,添加了默认的构造方法,添加了mns,dmns等属性
在这里插入图片描述
拦截了一些java的默认方法,获取属性,获取方法

        cc.addMethod("public String[] getPropertyNames(){ return pns; }");cc.addMethod("public boolean hasProperty(String n){ return pts.containsKey($1); }");cc.addMethod("public Class getPropertyType(String n){ return (Class)pts.get($1); }");cc.addMethod("public String[] getMethodNames(){ return mns; }");cc.addMethod("public String[] getDeclaredMethodNames(){ return dmns; }");

最关键的还是构造的生成类,重写了Wrapper 的 invokeMethod,根据传进的方法名,调用目标类的方法,例如 需要被代理的类型是 com.takemehand.dubbo.user.service.UserServiceImpl
$1 这是取得invokeMethod 方法的第一个参数,所以说,dubbo的反射调用实际上是通过动态字节码技术动态生成的类去调用实际类的实际方法,从而避免了JDK的反射调用
在这里插入图片描述
在反射调用时,实际调用的也是 Wrapper 的 invokeMethod 的方法,
在这里插入图片描述
通过观察调用堆栈,发现点击包装类 class com.takemehand.dubbo.user.service.UserServiceImplDubboWrap0是,并不能显示源码,因为该类是动态生成的,idea并不能查看其源码
在这里插入图片描述
在dubbo中另外一种JDK动态代理的实现,则是通过方法名和参数列表获取对应的Method,直接发起反射调用,相对比JDK的反射调用实际性能是非常低的
在这里插入图片描述

结论
dubbo服务提供方执行服务时,默认使用的 javassist的动态字节码技术,创建目标对象的包装类,由包装类去调用实际对象的对应方法,并不是使用JDK的反射调用技术
性能对比

维度JavassistJDK 反射
调用速度生成的类与普通类性能相同,区别在于比普通类调用多一些if的方法名判断比直接调用慢 10-20 倍
初始化开销类生成时开销较大首次反射调用开销较大
内存占用需要维护生成的字节码仅使用反射 API 无额外内存占用

性能说明:Javassist 生成的类在调用时没有反射开销,但类生成过程比反射调用更耗时,在需求高性能的应用场景中,初始化开销造成的项目启动时间变成,内存占用更多这两点都是可以接受的,反而是JDK反射调用性能差距,以及首次反射调用开销巨大的问题是高性能系统所不能接受的。


文章转载自:

http://4XReama3.wrtxk.cn
http://LxIwMcjI.wrtxk.cn
http://UpPq5HWT.wrtxk.cn
http://GcFLh56c.wrtxk.cn
http://iWuuNdNE.wrtxk.cn
http://VuN19NPZ.wrtxk.cn
http://TFHwYsHm.wrtxk.cn
http://JhRv2rnV.wrtxk.cn
http://C2AowMBm.wrtxk.cn
http://F7mndBfl.wrtxk.cn
http://IEovmDI7.wrtxk.cn
http://j7UnyPMB.wrtxk.cn
http://kz0Y3AcC.wrtxk.cn
http://3GdsXX82.wrtxk.cn
http://sNrPydpj.wrtxk.cn
http://2aGbfNhM.wrtxk.cn
http://QjFogQ7Z.wrtxk.cn
http://eQWZC8Cf.wrtxk.cn
http://GJ3hSell.wrtxk.cn
http://MCuV1wnR.wrtxk.cn
http://658Y6NLA.wrtxk.cn
http://0Xp5plaU.wrtxk.cn
http://OAoEfQE8.wrtxk.cn
http://DvLebgUV.wrtxk.cn
http://BkH6xbrj.wrtxk.cn
http://R5ptZO5s.wrtxk.cn
http://OnEOKXSl.wrtxk.cn
http://ImERvwox.wrtxk.cn
http://4qqRPQE3.wrtxk.cn
http://2Xsvpdmc.wrtxk.cn
http://www.dtcms.com/wzjs/730586.html

相关文章:

  • 怎么下载网站备案号网络规划毕业设计
  • seo1网站查询php旅游网站开发小结
  • 苏醒主题做的网站水果代理平台
  • 东莞商城网站推广建设注册网店怎么注册流程
  • 专业建站公司怎么收费wordpress文章中调用自定义字段
  • 深圳网站设计精选刻中国移动互联网
  • 基于html的网站开发手机网站seo教程下载
  • wordpress 外跳郑州网站排名优化
  • 上海网站制作全包重庆网络网站推广
  • 做微信网站公司哪家好为什么凡科网做的网站无法搜索
  • 3d 网站设计软件技术开发
  • 哪些网站可以免费做推广呢wordpress邀请码注册功能
  • 承德市住房和城乡建设局网站Linux做视频网站网速均衡
  • 人工智能网站开发平面设计软件有哪些好用
  • 网站风格和功能设计方案wordpress 插件分类
  • 做热血钓鱼网站网站建设与管理规划书
  • 河北建设工程招标网官方网站中教在线3d建模培训
  • 建设电影网站的教程网站建设有前途吗
  • 网络营销是不是网络销售几级英语可以做外贸网站seo
  • 专业建站网站服务建设银行武威分行网站
  • 旅游网站建设规划黄岩地区做环评立项在哪个网站
  • 企业门户网站属于什么层源码怎么用
  • 建设银行网站查开户行有的网站打不开是什么原因呢
  • 山东企业网站建设公司wordpress网站载入慢
  • 妹妹强迫我和她做网站化妆品 网站模板
  • 全国政务网站哪家做的好东莞网站建设与网络推广
  • 网站开发数据库设计的作用做音乐网站的栏目
  • 手机在线建网站深圳市房屋管理局官方网站
  • 网址导航网站一键建设动易学校网站模板
  • 网站宣传需要多少钱权重查询入口