美文网首页
反射的性能开销都在哪

反射的性能开销都在哪

作者: 拿拿guardian | 来源:发表于2020-09-24 14:21 被阅读0次

1.反射调用过程中会产生大量的临时对象,这些对象会占用内存,可能会导致频繁 gc,从而影响性能。
2.反射调用方法时会从方法数组中遍历查找,并且会检查可见性等操作会耗时。
3.反射在达到一定次数时,会动态编写字节码并加载到内存中,这个字节码没有经过编译器优化,也不能享受JIT优化。
4.Method#invoke 方法会对参数做封装和解封操作,会涉及自动装箱/拆箱和类型转换,都会带来一定的资源开销。
5.反射方法难以内联
6.需要检查方法可见性和校验参数

invoke 方法的参数是一个可变长参数,也就是构建一个 Object 数组存参数,这也同时带来了基本数据类型的装箱操作,在 invoke 内部会进行运行时权限检查,这也是一个损耗点。普通方法调用可能有一系列优化手段,比如方法内联、逃逸分析,而这又是反射调用所不能做的,性能差距再一次被放大。
优化反射调用,可以尽量避免反射调用虚方法、关闭运行时权限检查、可能需要增大基本数据类型对应的包装类缓存、如果调用次数可知可以关闭 Inflation 机制,以及增加内联缓存记录的类型数目。

相关文章

  • 反射的性能开销都在哪

    1.反射调用过程中会产生大量的临时对象,这些对象会占用内存,可能会导致频繁 gc,从而影响性能。2.反射调用方法时...

  • 反射的性能差在哪里?

    一直以来都在说反射慢,但是根本没有具体测试过,也没感受过 反射真的慢吗? 参考:https://www.jians...

  • java反射实现

    java反射为什么比较慢?reflect的性能开销: 变长方法参数导致导致的Object数组 基本类型自动装箱拆箱...

  • Java反射

    什么是反射? 反射的作用? 反射性能优化?

  • [Unity优化] unity性能优化CPU篇

    CPU方面 就目前的Unity移动游戏而言,CPU方面的性能开销主要可归结为两大类:引擎模块性能开销和自身代码性能...

  • Android中线程池使用

    为什么使用线程池 减少创建线程数量,提高APP性能 (减少创建和销毁线程的性能开销) 节省开销,防止并发线程过多,...

  • iOS开发中的耗电优化

    主要围绕CPU、GPU和内存三大方面进行说明。 CPU的性能开销主要可归结为两大类:引擎模块性能开销和自身代码性能...

  • reflect.go包学习_之二 指针操作提高反射性能 反射应用

    reflect.go包学习_之二 指针操作提高反射性能 反射应用 反射创建实例 反射信息、反射调用方法、反射修改值...

  • 为什么C语言的变量可以不赋初值

    因为赋值有开销,而C语言追求性能。

  • 04.性能问题

    性能问题 尽管使用多线程的初衷是提高性能,但与单线程的方法相比,多线程会引起一些额外的开销。造成这些开销的操作包括...

网友评论

      本文标题:反射的性能开销都在哪

      本文链接:https://www.haomeiwen.com/subject/qgbzyktx.html