你好杰米 2018-04-27 02:15 采纳率: 87.5%
浏览 2655
已采纳

【反射】如何提高invoke的执行效率

我需要给100w个对象使用反射来进行赋值操作,发现占用时间有1分多,怎么可以提高呢?

  • 写回答

8条回答 默认 最新

  • threenewbee 2018-04-27 02:39
    关注

    反射本身速度是jvm决定的,没有办法,优化,但是为什么你要100万个对象,这个设计是可以优化的。

    首先,你不一定真的需要那么多对象,其次你不一定需要调用那么多次反射。

    你可以看到java自己的设计,有很多办法可以减少对象的使用,比如说“常量池”,将那些值相同的字符串共享唯一的对象实例。
    如果你的对象是不可变的(immutable),你完全可以借鉴这个思路,相同的对象,只引用同一个实例。如果需要修改对象,因为是不可变的,所以它只能指向新的对象,而不会改变它,因此不会破坏共享的其它对象的状态。
    如果你想设计不可变的对象,只要封闭所有的set方法,而只能在构造函数中初始化对象就可以了。

    另一个是懒惰加载(lazy load),也就是说,你用不着一次性创建全部的对象,比如你100万个对象代表一个地图上100万个坐标或者形状,那么实际上你只要加载显示区域内的那些就可以了。在用户滚动的时候再加载别的。

    还有,你可以通过对象的序列化和反序列化以及内存拷贝代替反射。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!