反射的性能差在哪里?

反射的性能差在哪里?,第1张

参考: https://www.jianshu.com/p/4e2b49fa8ba1

下图是一亿次循环的耗时:

反射的速度差异只在大量连续使用才能明显看出来,理论上100万次才会说反射很慢,对于一个单进单出的请求来说,反射与否根本差不了多少。

事实上各大框架注解,甚至业务系统中都在使用反射,不能因为慢就不用了。

在后台Controller中序列化请求响应信息大量使用注解,高并发就意味着连续百万级别调用反射成为可能,各大MVC框架都会着手解决这个问题,优化反射。

反射核心的是getMethod和invoke了,分析下两者的耗时差距,在一亿次循环下的耗时。

证明getMethod很耗时,所以说我们要优先优化getMethod,看看为什么卡?

getMethod最后直接调用native方法,无解了。想复写优化getMethod是不可能的了,官方没毛病。

但是我们可以不需要每次都getMethod啊,我们可以缓存到redis,或者放到Spring容器中,就不需要每次都拿了。

我们看下invoke的源码:

尴尬,最后还是native方法,依然没毛病。

invoke不像getMethod可以缓存起来重复用,没法优化。

所以这里需要引入ASM,并做了个工具库reflectAsm:

参考: https://blog.csdn.net/zhuoxiuwu/article/details/78619645 , https://github.com/EsotericSoftware/reflectasm

使用如下:

参考: https://blog.csdn.net/z69183787/article/details/51657771

invoke是没办法优化的,也没办法做到像直接调用那么快。所以大佬们脑洞大开,不用反射的invoke了。原理如下:

实际上reflectAsm是有个致命漏洞的,因为要生成文件,还得load进JVM,所以reflectAsm的getMethod特别慢:

虽然getMethod很慢,但是invoke的速度是到达了直接调用的速度了。

下面是反射优化的测试样例:

java反射需要将内存中的对象进行解析,涉及到与底层c语言的交互,速度会比较慢。

java反射得到的每一个Method都有一个root,不暴漏给外部,而是每次copy一个Method。具体的反射调用逻辑是委托给MethodAccessor的,而accessor对象会在第一次invoke的时候才创建,是一种lazy init方式。而且默认Class类会cache method对象。目前MethodAccessor的实现有两种,通过设置inflation,一个native方式,一种生成java bytecode方式。native方式启动快,但运行时间长了不如java方式,个人感觉应该是java方式运行长了,jit compiler可以进行优化。所以JDK6的实现,在native方式中,有一个计数器,当调用次数达到阀值,就会转为使用java方式。默认值是15。java方式的实现,基本和非反射方式相同。

您好:

反射的性能远远低于直接调用,但对于必须要使用的场景,它的性能并非不可接受。对于“反射肯定是造成性能差的主要原因”这种说法,要冷静客观的分析。

.NET平台可以使用元数据完整的描述类型(类,结构,委托,枚举,接口)。许多.NET技术,例如WCF或序列化都需要在运行时发现类型格式。在.NET中,查看和操作元数据的动作称为反射(也称为元编程)。


欢迎分享,转载请注明来源:优选云

原文地址:https://54852.com/hy/474691.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-30
下一篇2023-03-30

随机推荐

  • 500ml玻尿酸爽肤水怎么那么便宜

    品牌和分子大小不同。玻尿酸爽肤水的品牌不同导致价格不同,500ml玻尿酸爽肤水使用的是大分子玻尿酸所以便宜。玻尿酸爽肤水的作用主要是用来解决皮肤干燥的问题,同时还能用来解决皮肤暗沉的问题,让皮肤看起来更加白皙而且富有光泽。其实你有考虑过用花

    2023-12-14
    19900
  • 香水百合的花语

    香水百合花的花语 如何百合的花语是有来源寓意的:在西方,百合花的花名是为了纪念圣母玛丽亚,自古以来圣母就被基督教视为清纯花朵,象征国家民族独立和经济繁荣。百合花的花语 在中国具有百年好合美好家庭、伟大的爱之涵义,有深深祝福的意义。受到百

    2023-12-14
    17500
  • 想问哪个牌子的隔离霜比较好价格在100左右.主要用来防晒的!而且我是学生,平常不化妆!

    MM还在上学,建议就不要挑有颜色的隔离霜了。如果本身肤色有缺陷的话,告诉你一些挑选的方法。一般有颜色的隔离霜分绿色,粉色,肤色,紫色。绿色适合白皙偏红肤色。粉色适合苍白肤色。肤色适合一般肤色或者偏暗沉肤色。紫色适合偏黄肤色。有的隔离霜还有白

    2023-12-14
    19800
  • 江湖救急,我在淘宝商城浙江欧诗漫专卖店买的珍珠粉,25g包装的,99元,觉得有点太便宜了,会是正品吗

    您好,很高兴为您服务!淘宝的天猫商城浙江欧诗漫专卖店是由欧诗漫集团旗下的子公司欧诗漫德清生物科技有限公司开设的,这个子公司也就是欧诗漫珍珠粉所有产品的生产和销售公司,包括网上和地面的销售所有珍珠粉系列产品。如果您确定是在浙江欧诗漫专

    2023-12-14
    25700
  • 国内哪个化妆品代加工公司好

    国内有许多化妆品代工公司还是不错的,和众多大牌都有合作,哪家公司好这还真没办法说,因为不同公司优势不一样,产品也有区别,要选择适合自己需求的才行。分享下考察化妆品代工厂要注意的几个点:交付效率大多品牌找化妆品oem代工其实是为了更快拿到产品

    2023-12-14
    16900
  • 无印良品水乳怎么样 无印良品乳液怎么样

    无印良品水乳一直有着不错口碑,主要是该品牌一直秉承着无任何不良添加成分,产品成分开然,这款无印良品水乳有高保湿型、滋润型、清爽型,以下我们来看看各款的特点与功效及实用效果怎么样。无印良品水乳怎么样专为敏感肌肤设计,不含防腐剂、矿物

    2023-12-14
    24300
  • 如何成为优秀的化妆品美导

    一般化妆品公司招美导都要求面容较好,皮肤不要太差,整体形象大方得体。对个美导个人来说,想从事好美导工作还是需要注意收拾好自己的形象,把自己收拾干净,服装职业带着时尚味,化点淡妆。也是对自己与自己的职业的一种尊重。2、内在修养:做为美导要求具

    2023-12-14
    22200
  • 迪奥护肤品和法国天芮哪个好

    迪奥护肤品。1、效果方面。迪奥护肤品渗透能力强,精华很多,保湿效果好。而法国天芮护肤品则精华少,保湿效果差。2、成分方面。迪奥护肤品采用的是纯植物提取的成分,没有添加有害的化学物质,其成分都是经过药监局检测合格的,十分安全。而法国天芮护肤品

    2023-12-13
    16000
  • 买到了假化妆品怎么维权

    买到了假化妆品怎么维权?先和店家协调解决,如果不给解决可以到当地的消费者协会投诉。如果消协说不给解决的话,可以让记者曝光。求助,店里买到假化妆品,怎么办,怎么才能维权拨打药监局电话可以进行举报,报告你的化妆品名和相关资讯,会有人

    2023-12-13
    15700

发表评论

登录后才能评论
保存