反射的性能差在哪里?

反射的性能差在哪里?,第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

随机推荐

  • 卡姿兰是哪个国家的品牌价格怎么样

    卡姿兰是中国的呀,价格很亲民,好多单品都不破百或者百元左右,而且使用效果很赞,性价比爆表。像是一度卖断货的卡姿兰大眼睛眼线笔也就不到五十,出水流畅,笔头粗细刚刚好,新手也能驾驭。新出的多金眼影盘也是不到80,但有10个配色,什么大闪片,小珠

    2023-12-14
    24600
  • 瑞丽免税店买什么划算的东西

    1 瑞丽免税店有很多划算的东西,但是具体性价比高的商品需要根据不同的需求和喜好进行选择。2 瑞丽免税店的化妆品、香水、手表等奢侈品牌比国内的专柜价格要低很多,因为免税店不需要交纳进口税和消费税,同时免税店也会经常推出限时优惠活动。3 如果你

    2023-12-14
    15300
  • 润芳可只能在美容院才能买到吗 一瓶护肤霜大概要多少钱

    再生乳霜816,再生精华498,全效滋养470,乳液470,除了洁面的160外,几乎都在470以上,死贵,每次拿货时都肉疼,但被美容院忽悠了,欲罢不能。润芳可还有口服的胶原蛋白及沙棘,30毫升,10瓶,198。一万多块已经送给美容院了,肝疼

    2023-12-14
    14300
  • 馥蕾诗fresh黑茶睡眠面膜怎么样

    睡眠面膜,顾名思义,指的是在晚上做完基础护肤之后,将睡眠面膜敷在脸上直接睡觉的一种面膜。一般清洗在第二天早晨,正常洁面即可。一般睡眠面膜都是啫喱或乳霜质地,涂上之后就像涂了一层护肤品,不会像普通面膜一样感觉糊了一层东西。大豆的洗面奶是卸妆界

    2023-12-14
    11500
  • 国妆特字号查询系统

    在国内,有特殊性功能的化妆品都需要通过卫生部门的批准字号。2010年,卫生部合并为“国家食品药品监督管理局”后,所有的批文都变为了“国妆特字”。以前由卫生部批准的是“卫妆特字”。其实两者都是一样的性质。这个特殊批文对于产品相当于“身份证”这

    2023-12-14
    9300
  • 欧莱雅玻尿酸和肤丽芳丝哪个好用

    欧莱雅玻尿酸好用。根据查询相关公开信息显示,欧莱雅玻尿酸中的玻尿酸分子小,能够更好地渗透到肌肤深层,并形成保湿膜,持久地保持肌肤的水分,导致欧莱雅玻尿酸的保湿效果比肤丽芳丝更持久,因此欧莱雅玻尿酸比肤丽芳丝好用。欧莱雅玻尿酸适用于所有肤质,

    2023-12-14
    11200
  • 韩束化妆品合格吗

    如此猛烈的广告宣传,现在韩束已经快成了国民品牌了,老少都在用。它的各种证照许可证肯定是齐全的,这个亲肯定可以放心的。就是不知道韩束适不适合亲用,选择适合自己用的才是最重要的,不需要跟风购买哦以上就是关于韩束化妆品合格吗全部的内容,包括:韩束

    2023-12-13
    9500
  • 国内的一线女装品牌有哪些

    国内一线女装品牌有香影、纳纹简、谷邦:哥弟、雅莹、似水年华、休闲时尚、芮玛、雅莹、德赛尼斯、真我永恒、虫二、诺曼琦、郁香菲少淑品牌、声雨竹、千百惠、侍女装(成熟女装)淑女品牌、点裳、阿玛施、GeN、淑女屋、欧时力、布衣坊侍女装等。扩展资料:

    2023-12-13
    11200
  • 求。《家,N次方》中苏泉(Spring)的扮演者是谁啊

    吉米。 姓名:吉米 性别:男国籍:中国(内地)职业:其它简介: 吉米是目前国内第一位来往国际间的著名形象设计师;中国第一位签约海外公司的形象设计师;中国第一位举办了时装设计展的造型师;中国历届模特大赛评委、总形象设计师;他先后在意大利威尼斯

    2023-12-13
    7900

发表评论

登录后才能评论
保存