我需要给100w个对象使用反射来进行赋值操作,发现占用时间有1分多,怎么可以提高呢?
8条回答 默认 最新
- threenewbee 2018-04-27 02:39关注
反射本身速度是jvm决定的,没有办法,优化,但是为什么你要100万个对象,这个设计是可以优化的。
首先,你不一定真的需要那么多对象,其次你不一定需要调用那么多次反射。
你可以看到java自己的设计,有很多办法可以减少对象的使用,比如说“常量池”,将那些值相同的字符串共享唯一的对象实例。
如果你的对象是不可变的(immutable),你完全可以借鉴这个思路,相同的对象,只引用同一个实例。如果需要修改对象,因为是不可变的,所以它只能指向新的对象,而不会改变它,因此不会破坏共享的其它对象的状态。
如果你想设计不可变的对象,只要封闭所有的set方法,而只能在构造函数中初始化对象就可以了。另一个是懒惰加载(lazy load),也就是说,你用不着一次性创建全部的对象,比如你100万个对象代表一个地图上100万个坐标或者形状,那么实际上你只要加载显示区域内的那些就可以了。在用户滚动的时候再加载别的。
还有,你可以通过对象的序列化和反序列化以及内存拷贝代替反射。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!
- ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
- ¥15 求daily translation(DT)偏差订正方法的代码
- ¥15 js调用html页面需要隐藏某个按钮