一种用于在热更新时对差分更新进行优化时避免代码过渡膨胀的方法和装置与流程
- 国知局
- 2024-10-09 14:44:33
本申请涉及计算机,特别涉及一种用于在热更新时对差分更新进行优化时避免代码过渡膨胀的方法、装置、计算设备和计算机可读存储介质。
背景技术:
1、在移动互联网领域,通常使用热更新的方式来实现app的功能更新或bug修复,用户打开app时即可实现更新,不用重新下载整个app,从而实现了良好的用户体验。在本申请人的在先申请cn202211019435.1中提供了一种用于在热更新时进行差分更新的方法,实现了将变动的代码用解释器解释方式执行,未改动的函数仍然调用运行时中已经经过编译的函数,从而实现最大程度地接近原生程序的执行效率。接下来,在申请人的在先申请cn202211510811.7中,为了避免灾难性的链式脏函数扩散,在每个需要差分执行的函数头部插入了一段更新检查代码。该代码检查该函数是否已经存在新的版本,如果存在则跳转到新版本执行,否则继续执行当前函数,但是由于额外引入了一个if语句及相关的跳转代码,这个方法也显著增加了函数体大小及执行时间,影响了程序的执行效率,因此亟需一种方法来综合考虑上面的问题。
技术实现思路
1、有鉴于此,本申请例提供了一种用于在热更新时对差分更新进行优化时避免代码过渡膨胀的方法和装置,以解决现有技术中存在的技术缺陷。
2、根据本申请实施例的第一方面,提供了一种用于在热更新时对差分更新进行优化时避免代码过渡膨胀的方法,包括:
3、将新版本热更新程序集源代码转换成目标语言代码时,扫描代码中的所有函数获取包括了目标函数的第一函数集,以及调用了所述目标函数的第二函数集;
4、对比热更新程序集的新旧版本代码,如果所述第一函数集中的目标函数发生了改变,则将所述目标函数以及第二函数集中直接或间接调用了所述目标函数的函数标脏;
5、对所述新版本热更新程序集中其他的函数添加可访问的解释执行字段,并在所述其他的函数的函数头部插入更新检查代码;
6、所述其他的函数为热更新程序集中除开标脏函数之外的所有函数。
7、根据本申请实施例的第二方面,提供了一种用于在热更新时对差分更新进行优化时避免代码过渡膨胀的装置,包括:
8、获取模块,用于将新版本热更新程序集源代码转换成目标语言代码时,扫描代码中的所有函数获取包括了目标函数的第一函数集,以及调用了所述目标函数的第二函数集;
9、标记模块,用于对比热更新程序集的新旧版本代码,如果所述第一函数集中的目标函数发生了改变,则将所述目标函数以及第二函数集中直接或间接调用了所述目标函数的函数标脏;
10、插入模块,用于对所述新版本热更新程序集中其他的函数添加可访问的解释执行字段,并在所述其他的函数的函数头部插入更新检查代码;所述其他的函数为热更新程序集中除开标脏函数之外的所有函数。
11、根据本申请实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述用于在热更新时对差分更新进行优化时避免代码过渡膨胀的方法的步骤。
12、根据本申请实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述用于在热更新时对差分更新进行优化时避免代码过渡膨胀的方法的步骤。
13、本申请的实施例中,为了同时解决和协调在先申请中存在的由于代码更新带来了的标脏函数无限扩散以及在所有函数的函数体中插入更新检测代码带来的代码膨胀进而影响执行效率问题;先对程序集中符合要求的目标函数进行标记,这些目标函数无需加入额外的更新检测代码,从而将代码膨胀的范围进行了缩小。当新版本的目标函数发生了变化时,仅对这些变化的目标函数和引用了这些目标函数的函数进行标脏,将标脏的范围也控制在一定的程度内。对于那些没有进行标脏的函数,还是采用插入更新检查代码的方式来进行新旧版本的判断。在本申请实施例通过选择目标函数的方式,对于符合一定要求的目标函数不插入额外的更新检测代码,实现了同时将标脏函数以及插入了额外代码的函数都控制在一定的范围内的效果,在合理的范围内既实现了新旧函数的区分,也不会过多的影响程序的执行效率。
技术特征:1.一种用于在热更新时对差分更新进行优化时避免代码过渡膨胀的方法,其特征在于,包括:
2.根据权利要求1所述的方法,其中,所述扫描代码中的所有函数获取包括了目标函数的第一函数集包括:
3.根据权利要求2所述的方法,其中,获取程序集中的短函数,将所述短函数标记为目标函数后加入第一函数集包括:
4.根据权利要求1所述的方法,其中,所述扫描代码中的所有函数获取包括了目标函数的第一函数集还包括:
5.根据权利要求1所述的方法,其中,该方法还包括:在运行时阶段,直接在解释器中进行执行所述标脏函数。
6.根据权利要求1所述的方法,其中,该方法还包括:在运行时阶段,针对所述其他的函数,首先得到函数的解释执行字段对该解释执行字段进行判断,当解释执行字段为空时,执行aot编译部分的原函数代码;若解释执行字段不为空,转到解释器执行。
7.一种用于在热更新时对差分更新进行优化时避免代码过渡膨胀的装置,其特征在于,包括:
8.一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,其特征在于,所述处理器执行所述指令时实现权利要求1-6任意一项所述方法的步骤。
9.一种计算机可读存储介质,其存储有计算机指令,其特征在于,该指令被处理器执行时实现权利要求1-6任意一项所述方法的步骤。
技术总结本申请提供了一种用于在热更新时对差分更新进行优化时避免代码过渡膨胀的方法和装置,该方法增加了用于标识函数是否进行解释执行的字段。在执行函数时,首先得到的函数对应的解释执行字段,对解释执行字段进行判断后选择相应的执行方法。通过上述的方式,当其他函数再次调用AOT编译部分的函数时,会首先判断该函数的解释执行字段的值是否为空,若该字段不为空,则说明函数进行了热更新,直接跳转到解释器进行解释执行。如此以来,所有直接或间接调用了该函数的函数都不用再被标记为脏函数,进而极大减少了需要被标记为脏函数的AOT函数的数量,提高了混合热更新解决方案中的工程实践效率。技术研发人员:黄强受保护的技术使用者:代码哲学(北京)科技有限公司技术研发日:技术公布日:2024/9/29本文地址:https://www.jishuxx.com/zhuanli/20241009/306326.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。