【技术实现步骤摘要】
一种热更新方法和装置
本专利技术的实施方式涉及计算机应用领域,更具体地,本专利技术的实施方式涉及一种热更新方法和装置。
技术介绍
本部分旨在为权利要求书中陈述的本专利技术的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。对于通过互联网提供服务的系统来说,当系统运行期间发现急需改正的问题时,需要及时修复以保证服务质量。为了使用户有更好的体验,一般采取在线热更新的方式修复问题。目前,热更新普遍的做法是,在系统开发时,将方法(包含一系列语句的代码块)模块化,将各个模块设计成单独的DLL(DynamicLinkLibrary,动态链接库),其中,要求各个模块不能通过变量记录运行状态,否则一旦卸载原有的DLL将导致变量所记录的运行状态丢;要求类定义与方法定义分离,否则将导致原有模块中的类定义所产生的对象在原有的DLL卸载后不可用。这样,通过上述做法实现的系统可以通过动态卸载原有的DLL加载更新的DLL实现热更新。
技术实现思路
但是,由于现有技术动态卸/加载DLL的方式热更新,对系统程序设计提出了特定要求,因此在现有技术中,如何热更新仍然是非常令人烦恼的问题。为此,非常需要一种改进的热更新方法,以实现对系统程序设计不存在特定要求的目的。在本上下文中,本专利技术的实施方式期望提供一种热更新方法及装置。在本专利技术实施方式的第一方面中,提供了一种热更新方法,例如,该方法包括:响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其中,所述更新程序集与所述已有程序集中相同的元数据具有相同的标识;将 ...
【技术保护点】
一种热更新方法,包括:响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其中,所述更新程序集与所述已有程序集中相同的元数据具有相同的标识;将所述更新程序集载入内存,以及根据所述差异描述,在所述更新程序集中查找出相对于已有程序集修改过的函数;对查找出的修改过的函数进行即时编译,得到更新本机代码;在所述修改过的函数对应的已有本机代码需要被运行时,以所述更新本机代码代替所述已有本机代码运行。
【技术特征摘要】
1.一种热更新方法,包括:响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其中,所述更新程序集与所述已有程序集中相同的元数据具有相同的标识;将所述更新程序集载入内存,以及根据所述差异描述,在所述更新程序集中查找出相对于已有程序集修改过的函数;对查找出的修改过的函数进行即时编译,得到更新本机代码;在所述修改过的函数对应的已有本机代码需要被运行时,以所述更新本机代码代替所述已有本机代码运行。2.根据权利要求1所述的方法,在响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与程序已有程序集区别的差异描述之前,还包括:对根据热更新需求修改的源代码进行编译,生成更新程序集;对所述更新程序集进行结构调整,使调整后的更新程序集与所述程序的已有程序集中相同的元数据具有相同的标识;将所述更新程序集与所述已有程序集进行比较,生成差异描述文件,其中,所述差异描述文件包含用于描述更新程序集与已有程序集区别的差异描述;向所述运行中的程序发送热更新指令,以使所述运行中的程序从所述差异描述文件中获取所述差异描述。3.根据权利要求1所述的方法,还包括:将所述修改过的函数对应的已有本机代码的第一条指令修改为跳转到所述更新本机代码处运行的跳转指令;所述在修改过的函数对应的已有本机代码需要被运行时,以更新本机代码代替已有本机代码运行的具体实现为:在修改过的函数对应的已有本机代码需要被运行时,进入所述已有本机代码的第一条指令运行,从而由所述跳转指令的运行跳转到所述更新本机代码处运行。4.根据权利要求3所述的方法,其中,如果所述修改过的函数为泛型函数,进一步查找出所有使用所述泛型函数实例化出的函数;针对每个使用所述泛型函数实例化出的函数,分别进行即时编译,得到对应的更新本机代码;将每个使用所述泛型函数实例化出的函数对应的已有本机代码的第一条指令修改为跳转到对应的所述更新本机代码处运行的跳转指令。5.根据权利要求1所述的方法,还包括:如果根据所述差异描述确定需要对指定方法的访问级别和/或指定字段的访问级别进行修改,查找出所述指定方法对应的对象和/或指定字段对应的对象;对查找出的对象的访问属性进行相应修改。6.根据权利要求1所述的方法,其中,所述更新程序集中包括:用于在全局哈希表中记录增加的字段与已有对象的映射关系的特定函数;在该特定函数对应的本机代码运行时,所述本机代码执行在所述全局哈希表中记录所述增加的字段与已有对象的映射关系的步骤;在对所述已有对象的引用期间,根据所述全局哈希表记录的映射关系对所述已有对象对应的增加的字段进行访问。7.根据权利要求6所述的方法,其中,在所述全局哈希表中记录映射关系而产生的对所述已有对象的引用为弱引用;且,还包括:按需对所述全局哈希表中记录的映射关系进行遍历,在遍历的过程中,对遍历到的映射关系中对应的对象是否被引用进行检查,如果否,则将该未被引用的对象的映射关系从所述全局哈希表中删除。8.根据权利要求2所述的方法,在对所述更新程序集进行结构调整之前,还包括:如果所述更新程序集以及已有程序集中由编译器优化而产生的类定义不同,将所述更新程序集中由编译器优化而产生的类的名称进行更改,以及将已有程序集中由编译器优化而产生的类定义复制到更新程序集中。9.一种热更新装置,包括:接收单元,配置用于响应于运行中的程序接收到热更新指令,获取更新程序集以及用于描述更新程序集与所述程序已有程序集区别的差异描述,其...
【专利技术属性】
技术研发人员:张伟土,卢立祎,
申请(专利权)人:网易杭州网络有限公司,
类型:发明
国别省市:浙江;33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。