一种内存管理方法及系统技术方案

技术编号:18018753 阅读:22 留言:0更新日期:2018-05-23 05:05
本发明专利技术公开了一种内存管理方法及系统,属于互联网技术领域。方法包括:向操作系统申请指定大小的内存作为预留内存;设置目标覆盖函数;通过目标覆盖函数截获各内存分配器向操作系统申请内存的请求,并将截获的请求发送给操作系统;通过目标覆盖函数监控操作系统对请求的响应结果;根据响应结果判断向操作系统申请内存是否成功;若否,则将预留内存归还给操作系统;通过目标覆盖函数重新向操作系统发送申请内存的请求。本发明专利技术覆盖了各内存分配器向系统申请内存的过程,引入预留内存以解决内存分配器向操作系统申请内存失败报内存不足错误OOM的问题,从而在很大程度上减少了内存不足错误的发生频率。

【技术实现步骤摘要】
一种内存管理方法及系统
本专利技术涉及互联网
,尤其涉及一种内存管理方法及系统。
技术介绍
以浏览器应用为代表的复杂应用,一般由多个模块组成,这些模块可能采用不同的内存管理方式,使用不同的内存分配器,相互之间没有更多的了解,彼此向系统申请内存也是缺乏协调的。这容易导致进程虚存空间的碎片及内存空间内存不足错误,或称OOM(OutOfMemory)错误。现有技术中处理内存申请的过程如图1所示:第一步:各内存分配器分别接收程序申请内存的请求;第二步:各内存分配器分别处理内存请求,若响应失败,则向操作系统发出申请内存的请求;第三步,操作系统接收到内存分配器发送的请求后,处理请求,若处理失败,则报内存不足错误(OOM)。可见,现有技术中,一般仅在内存分配器内部设有处理内存碎片方案,以防止因为内存碎片引起的内存不足,但是在各内存分配器与系统之间,并没有处理内存不足的技术方案。
技术实现思路
为了解决上述问题,本专利技术提供了一种内存管理方法及系统,用以解决内存分配器向系统请求内存过程中内存不足的问题。本专利技术实施例第一方面公开一种内存管理方法,包括:向操作系统申请指定大小的内存作为预留内存;设置目标覆盖函数;通过目标覆盖函数截获各内存分配器向操作系统申请内存的请求,并将截获的请求发送给操作系统;通过目标覆盖函数监控操作系统对所述请求的响应结果;根据响应结果判断向操作系统申请内存是否成功;若否,则将所述预留内存归还给操作系统;通过目标覆盖函数重新向操作系统发送申请内存的请求。进一步地,所述通过目标覆盖函数重新向操作系统发送申请内存的请求后,还包括:通知各内存分配器对应的内存控制模块回收内存。进一步地,所述设置目标覆盖函数,包括:将内存分配器向操作系统申请内存改为调用目标覆盖函数向操作系统申请内存。可选地,所述设置目标覆盖函数,包括:建立包含所述目标覆盖函数的目标覆盖函数共享库,将所述目标覆盖函数命名为和操作系统中的系统内存分配函数一致;所述系统内存分配函数用于响应申请内存的请求;先加载所述目标覆盖函数共享库;再加载所述系统内存分配函数所在的共享库。可选地,所述设置目标覆盖函数,包括:建立包含中间函数的中间函数共享库,所述中间函数共享库与各内存分配器所在的共享库静态连接;将所述目标覆盖函数命名为和操作系统中的系统内存分配函数一致,所述目标覆盖函数通过调用所述中间函数来调用所述系统内存分配函数;所述系统内存分配函数用于响应申请内存的请求。进一步地,所述通过目标覆盖函数重新向操作系统发送申请内存的请求之后,还包括:再次向操作系统申请指定大小的内存作为预留内存。进一步地,所述通过目标覆盖函数重新向操作系统发送申请内存的请求之后,还包括:通过目标覆盖函数接收操作系统返回的内存分配结果。进一步地,所述向操作系统申请指定大小的内存作为预留内存,包括:向操作系统申请指定大小的内存作为预留内存,将所述预留内存分配给指定预留内存持有者;所述将所述预留内存归还给操作系统,包括:通知预留内存持有者释放所述预留内存。本专利技术还提供了一种内存管理系统,包括:预留内存申请模块,用于向操作系统申请指定大小的内存作为预留内存;目标覆盖函数设置模块,用于设置目标覆盖函数;请求截获模块,用于通过目标覆盖函数截获各内存分配器向操作系统申请内存的请求,并将截获的请求发送给操作系统;响应监控模块,用于通过目标覆盖函数监控操作系统对所述请求的响应结果;判断模块,用于根据响应结果判断向操作系统申请内存是否成功;预留内存归还模块,用于将所述预留内存归还给操作系统;内存申请模块,用于通过目标覆盖函数重新向操作系统发送申请内存的请求。进一步地,还包括:回收通知模块,用于通知各内存分配器对应的内存控制模块回收内存。进一步地,还包括:二次预留模块,用于再次向操作系统申请指定大小的内存作为预留内存。进一步地,还包括:结果接收模块,用于通过目标覆盖函数接收操作系统返回的内存分配结果。进一步地,所述预留内存申请模块包括预留内存分配单元,用于将所述预留内存分配给指定预留内存持有者。进一步地,所述预留内存使用模块包括释放通知单元,用于通知预留内存持有者释放所述预留内存。进一步地,还包括内存分配器,用于响应程序申请内存的请求,若响应失败,则向操作系统发送申请内存的请求。进一步地,所述内存分配器包括:程序请求接收单元,用于接收程序申请内存的请求;响应单元,用于使用内存分配器内部缓存的空余内存响应所述请求。本专利技术实施例提供了一种内存管理方法,该方法包括向操作系统申请指定大小的内存作为预留内存;设置目标覆盖函数;通过目标覆盖函数截获各内存分配器向操作系统申请内存的请求,并将截获的请求发送给操作系统;通过目标覆盖函数监控操作系统对所述请求的响应结果;根据响应结果判断向操作系统申请内存是否成功;若否,则将所述预留内存归还给操作系统;通过目标覆盖函数重新向操作系统发送申请内存的请求。本专利技术覆盖了各内存分配器向系统申请内存的过程,引入预留内存以解决内存分配器向操作系统申请内存失败报内存不足错误OOM的问题,本专利技术能够截获个内存分配前与向系统申请内存的请求及系统向内存分配器返回的分配结果,从而获取各内存分配器与系统的交互信息,并在截获到申请失败时通过归还预留内存有效地缓解内存不足问题,从而在很大程度上减少了内存不足错误的发生频率。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。图1是根据现有相关技术中的内存管理方法的示意图;图2是根据本专利技术实施例的内存管理方法的计算机终端的硬件结构框图;图3是根据本专利技术实施例1的内存管理方法的流程图;图4是根据本专利技术实施例1中内存分配器工作的流程图;图5是根据本专利技术实施例2的内存管理方法的又一流程图;图6是根据本专利技术实施例3的内存管理系统的流程图;图7是根据本专利技术实施例的计算机终端的结构框图。具体实施方式为了使本
的人员更好地理解本专利技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分的实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本专利技术保护的范围。需要说明的是,本专利技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本专利技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。实施例1根据本专利技术实施例,提供了一种内存管理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,本文档来自技高网
...
一种内存管理方法及系统

【技术保护点】
一种内存管理方法,其特征在于,包括:向操作系统申请指定大小的内存作为预留内存;设置目标覆盖函数;通过目标覆盖函数截获各内存分配器向操作系统申请内存的请求,并将截获的请求发送给操作系统;通过目标覆盖函数监控操作系统对所述请求的响应结果;根据响应结果判断向操作系统申请内存是否成功;若否,则将所述预留内存归还给操作系统;通过目标覆盖函数重新向操作系统发送申请内存的请求。

【技术特征摘要】
1.一种内存管理方法,其特征在于,包括:向操作系统申请指定大小的内存作为预留内存;设置目标覆盖函数;通过目标覆盖函数截获各内存分配器向操作系统申请内存的请求,并将截获的请求发送给操作系统;通过目标覆盖函数监控操作系统对所述请求的响应结果;根据响应结果判断向操作系统申请内存是否成功;若否,则将所述预留内存归还给操作系统;通过目标覆盖函数重新向操作系统发送申请内存的请求。2.根据权利要求1所述的内存管理方法,其特征在于,所述通过目标覆盖函数重新向操作系统发送申请内存的请求后,还包括:通知各内存分配器对应的内存控制模块回收内存。3.根据权利要求1所述的内存管理方法,其特征在于,所述设置目标覆盖函数,包括:将内存分配器向操作系统申请内存改为调用目标覆盖函数向操作系统申请内存。4.根据权利要求1所述的内存管理方法,其特征在于,所述设置目标覆盖函数,包括:建立包含所述目标覆盖函数的目标覆盖函数共享库,将所述目标覆盖函数命名为和操作系统中的系统内存分配函数一致;所述系统内存分配函数用于响应申请内存的请求;先加载所述目标覆盖函数共享库;再加载所述系统内存分配函数所在的共享库。5.根据权利要求1所述的内存管理方法,其特征在于,所述设置目标覆盖函数,包括:建立包含中间函数的中间函数共享库,所述中间函数共享库与各内存分配器所在的共享库静态连接;将所述目标覆盖函数命名为和操作系统中的系统内存分配函数一致,所述目标覆盖函数通过调用所述中间函数来调用所述系统内存分配函数;所述系统内存分配函数用于响应申请内存的请求。6.根据权利要求1所述的内存管理方法,其特征在于,所述通过目标覆盖函数重新向操作系统发送申请内存的请求之后,还包括:再次向操作系统申请指定大小的内存作为预留内存。7.根据权利要求1所述的内存管理方法,其特...

【专利技术属性】
技术研发人员:刘海鹏
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1