内存管理方法、装置、终端及存储介质与流程

文档序号:17489129发布日期:2019-04-23 20:16阅读:183来源:国知局
内存管理方法、装置、终端及存储介质与流程

本发明涉及互联网技术领域,具体涉及计算机技术领域,尤其涉及一种内存管理方法、一种内存管理装置、一种终端及一种计算机存储介质。



背景技术:

内存是终端中重要的部件之一,它是与终端的cpu进行沟通的桥梁,终端中的所有应用程序都是在内存中进行的,因此内存性能对终端的影响非常大。然而,终端的内存容量是有限的,为了保证终端操作系统的正常运转,终端内的各应用程序被允许使用的内存量是有一定限制的。以浏览器应用程序为例:在浏览器应用程序被允许使用的内存量范围内,操作系统会响应浏览器应用程序中的各运行模块的申请为其分配内存以支持浏览器应用程序的运行;但如果浏览器应用程序中的各运行模块使用了过多内存,例如:由于申请过多内存导致内存过度分配,或者由于出现内存泄漏导致内存使用过度、或由于资源过度加载导致内存使用过多等等,这些均会导致浏览器应用程序出现内存不足的情况,通常会触发浏览器应用程序产生崩溃退出的现象。由此可见,要避免应用程序由于内存不足而影响运行的一个有效手段在于实施有效的内存管理,而如何实施有效的内存管理则是一个值得思考及研究的课题。



技术实现要素:

本发明实施例提供了一种内存管理方法、装置、终端及终端存储介质,能够对目标应用程序进行有效地内存管理,避免目标应用程序因内存不足的风险而导致崩溃退出等异常现象的产生,保证目标应用程序的正常运行。

一方面,本发明实施例提供了一种内存管理方法,所述内存管理方法包括:

获取目标应用程序对应的目标进程的内存使用信息,所述内存使用信息包括所述目标应用程序的至少一个运行模块的内存占用信息;

根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险;

若存在所述风险,则激活所述目标应用程序的预留应急内存,并回收所述目标应用程序的至少一个运行模块的已占用内存。

另一方面,本发明实施例提供了一种内存管理装置,所述内存管理装置包括:

获取单元,用于获取目标应用程序对应的目标进程的内存使用信息,所述内存使用信息包括所述目标应用程序的至少一个运行模块的内存占用信息;

预测单元,用于根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险;

处理单元,用于若存在所述风险,则激活所述目标应用程序的预留应急内存,并回收所述目标应用程序的至少一个运行模块的已占用内存。

再一方面,本发明实施例提供了一种终端,所述终端包括输入设备和输出设备,所述终端还包括:

处理器,适于实现一条或一条以上指令;以及,

计算机存储介质,所述计算机存储介质存储有一条或一条以上指令,所述一条或一条以上指令适于由所述处理器加载并执行如下步骤:

获取目标应用程序对应的目标进程的内存使用信息,所述内存使用信息包括所述目标应用程序的至少一个运行模块的内存占用信息;

根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险;

若存在所述风险,则激活所述目标应用程序的预留应急内存,并回收所述目标应用程序的至少一个运行模块的已占用内存。

再一方面,本发明实施例提供了一种计算机存储介质,所述计算机存储介质存储有一条或一条以上指令,所述一条或一条以上指令适于由处理器加载并执行如下步骤:

获取目标应用程序对应的目标进程的内存使用信息,所述内存使用信息包括所述目标应用程序的至少一个运行模块的内存占用信息;

根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险;

若存在所述风险,则激活所述目标应用程序的预留应急内存,并回收所述目标应用程序的至少一个运行模块的已占用内存。

本发明实施例中,通过目标应用程序对应的目标进程的内存使用信息预测目标应用程序是否存在内存不足的风险,若存在风险则可激活目标应用程序的预留应用内存,同时回收目标应用程序的至少一个运行模块的已占用内存。通过预测方式能够在目标应用程序实际发生内存不足的情况之前提前捕捉内存不足的风险,有利于针对该风险及时启动应急补救措施,这样的内存管理方式能够在一定程度上避免目标应用程序出现内存不足的情况,进而避免目标应用程序出现崩溃退出等异常现象,保证目标应用程序的正常运行。

附图说明

为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种操作系统的结构示意图;

图2a是本发明实施例提供的一种内存管理方案的应用场景图;

图2b是本发明实施例提供的一种内存分配的示意图;

图3是本发明实施例提供的一种内存管理方法的流程示意图;

图4是本发明实施例提供的一种内存管理方法的流程示意图;

图5是本发明实施例提供的一种针对浏览器应用程序进行内存管理的流程示意图;

图6是本发明实施例提供的一种浏览器客户端和开发机之间的交互示意图;

图7是本发明实施例提供的一种内存管理装置的结构示意图;

图8是本发明实施例提供的一种终端的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

本发明实施例提出一种内存管理方案,该内存管理方案可应用于终端中,以实现对终端中的目标应用程序进行内存管理,此处的终端可以包括但不限于:智能手机、台式电脑、笔记本电脑、膝上计算机,等等。终端中可以安装并运行多个应用程序,例如:即时通信应用程序、浏览器应用程序、音视频应用程序等等;本发明实施例所述的目标应用程序可以是终端中的任一应用程序,例如该目标应用程序可以是浏览器应用程序。该终端可包括处理器以及操作系统(operatingsystem,os),当然可以理解的是,除此之外,该终端还可以包含支持终端相应功能的其他硬件单元,例如:收发器以使终端能够正常收发射频信号;用户接口以使终端能够实现人机交互功能;存储器以使终端具备存储功能等等。其中,处理器是终端的处理核心,例如本实施例中处理器可用于对目标应用程序执行内存管理的一系列操作;操作系统是管理和控制终端硬件与软件资源的计算机程序,该操作系统可以包括但不限于:android操作系统(安卓操作系统)、linux操作系统、ios操作系统、windows操作系统(视窗操作系统),等等。除特别说明外,本发明后续实施例中所述的操作系统以安卓操作系统为例进行阐述,目标应用程序以浏览器应用程序为例进行阐述。

如图1所示,终端的操作系统包括应用层及进程控制子系统。其中,应用层包括系统接口、函数库以及一个或多个应用程序等。通常,一个应用程序对应一个进程,所谓的进程是指终端中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配和调度的基本单位,是操作系统结构的基础。其中,进程控制子系统包括进程单元及内存单元;进程单元用于对终端中的进程进行管理,包括但不限于:在检测到某个应用程序被启动时添加并管理该应用程序对应的进程;或者,允许并协调各进程间的通信;等等。内存单元用于对终端的内存进行管理,例如为某个应用程序分配相应的内存资源等等。

目标应用程序可由一个或多个模块组成,例如,浏览器应用程序包括浏览器内核模块及浏览器客户端模块,其中,浏览器内核模块是浏览器内部实现网页浏览功能的核心模块,主要包括渲染引擎和js引擎;浏览器客户端模块是浏览器实现人机交互的核心模块,主要用于提供人机交互界面及人机交互接口等内容。若目标应用程序的任一模块被启动运行,则触发目标应用程序启动运行,同时,操作系统会启动该目标应用程序对应的目标进程来支持该目标应用程序的正常运行,此时该目标应用程序中处于运行状态的模块称为运行模块,该目标应用程序的一个或多个运行模块均运行于操作系统的目标进程中。目标应用程序在运行过程中,该目标应用程序的各运行模块可通过操作系统的函数库中的函数调用操作系统的系统接口向操作系统发送内存申请请求,操作系统则响应该内存申请请求从内存单元中获取相应的内存分配给该目标应用程序的各运行模块;由此可见,目标应用程序的各运行模块均会占用相应的内存,那么相应的,目标应用程序对应的目标进程的内存使用信息可包括该目标应用程序的至少一个运行模块的内存占用信息。

以目标应用程序为浏览器应用程序为例,该浏览器应用程序中设有内存信息捕捉函数,该内存信息捕捉函数用于记录浏览器内核模块的内存使用信息。那么,本发明实施例所述的内存管理方案具体如下:

①如图2a所示:终端的ui(userinterface,用户界面)中显示浏览器应用程序的快捷方式(如图中所示的图标),当用户想要使用浏览器应用程序浏览网页时,可以通过点击该浏览器应用程序的快捷方式启动终端中的浏览器应用程序。

②终端的处理器在检测到用户点击浏览器应用程序的快捷方式的操作后,向操作系统发送浏览进程的启动指令,该启动指令用于控制在操作系统中启动浏览器应用程序对应的浏览进程。如前述,浏览器应用程序包括浏览器内核模块和浏览器客户端模块;浏览器内核模块以及浏览器客户端模块均运行在浏览进程中。

③为了支撑浏览器应用程序的正常运行以使得用户可以正常浏览网页;操作系统为浏览器应用程序分配一个允许浏览器应用程序可使用的最大使用内存,该最大使用内存可以如图2b中实线框中的内存;同时浏览器应用程序还可以向操作系统申请分配一个预留应急内存,申请的预留应急内存可以如图2b中虚线框中的内存;该预留应急内存用于在预测到浏览器应用程序存在内存不足的风险时,缓解浏览器应用程序的运行压力。

④浏览器应用程序的运行过程中,浏览器内核模块以及浏览器客户端模块均会向操作系统发送内存申请,在浏览器应用程序的最大使用内存范围内,操作系统会响应浏览器内核模块和浏览器客户端模块的内存申请为其分配相应的内存以供使用。同时,在浏览器应用程序的运行过程中,处理器可以根据当前浏览进程的内存使用信息预测浏览器应用程序是否存在内存不足的风险;若存在风险,则激活预留应急内存,并回收浏览器内核模块以及浏览器客户端模块的已占用内存;力求使得浏览器应用程序的剩余内存能够保持在一定的合理范围内,这样则可以在一定程度上避免因剩余内存不足而导致内存分配失败的情况,从而避免浏览器应用程序出现崩溃退出的现象;在上述过程中,通过预测浏览器应用程序是否出现内存不足的风险,以及在风险存在时采用应急措施,可以使得用户能够持续并完整地在浏览器应用程序的用户界面中浏览当前网页内容,保证当前网页内容的顺利展示。

本发明实施例中,通过目标应用程序对应的目标进程的内存使用信息预测目标应用程序是否存在内存不足的风险,若存在风险则可激活目标应用程序的预留应用内存,同时回收目标应用程序的至少一个运行模块的已占用内存。通过预测方式能够在目标应用程序实际发生内存不足的情况之前提前捕捉内存不足的风险,有利于针对该风险及时启动应急补救措施,这样的内存管理方式能够在一定程度上避免目标应用程序出现内存不足的情况,进而避免目标应用程序出现崩溃退出等异常现象,保证目标应用程序的正常运行。

基于上述描述,本发明实施例提出一种内存管理方法,该内存管理方法可以应用于上述所提及的终端中,请参见图3,该内存管理方法可由终端中的处理器执行,该内存管理方法可以包括以下步骤s301-s303:

s301,获取目标应用程序对应的目标进程的内存使用信息,该内存使用信息包括目标应用程序的至少一个运行模块的内存占用信息。

目标应用程序可由一个或多个模块组成,该一个或多个模块中可包括指定模块;所谓指定模块是指在目标应用程序的运行过程中被调用的模块,例如:浏览器内核模块,该浏览器内核模块在浏览器应用程序的运行过程中既可以被浏览器客户端模块所调用,还可以被第三方应用程序所调用,例如在qq(一种即时通信应用程序)、微信、微博等应用程序中打开网页时,浏览器内核模块被qq、微信、微博等应用程序所调用。若指定模块被目标应用程序中除指定模块以外的其他模块调用,此时指定模块以及该其他模块均运行于同一个进程中,例如:浏览器客户端模块与浏览器内核模块运行于同一个浏览进程中;若指定模块被除目标应用程序以外的其他应用程序调用,此时指定模块和其他应用程序中的运行模块运行于不同进程中,例如:在qq应用程序中打开网页时,qq应用程序中的运行模块(例如qq客户端模块)运行于对应的qq应用进程中,而浏览器内核模块运行于浏览进程中。本发明实施例所提及的目标应用程序所对应的目标进程是指:目标应用程序中的指定模块所属进程。

当目标应用程序中的指定模块被目标应用程序中除指定模块以外的其他模块调用时,由于此情况下的指定模块和其他模块运行于同一进程中,因此获取到的目标应用程序对应的目标进程的内存使用信息可包括:指定模块的内存使用信息及其他模块的内存使用信息。当目标应用程序中的指定模块被除目标应用程序以外的其他应用程序调用时,由于此情况下的指定模块和其他应用程序中的运行模块运行于不同进程中,因此获取到的目标应用程序对应的目标进程的内存使用信息包括:指定模块的内存使用信息。由前述可知,模块运行在进程中时会占用相应的内存,因此获取到的目标进程的内存使用信息中可包括目标应用程序的至少一个运行模块的内存占用信息。

s302,根据目标进程的内存使用信息预测目标应用程序是否存在内存不足的风险。

内存不足是指:目标应用程序的剩余内存小于目标应用程序中的运行模块所申请的内存。在目标应用程序的最大使用内存范围内,操作系统会响应目标应用程序中的各运行模块的内存申请为其分配相应的内存以供使用。但是当目标应用程序的剩余内存小于运行模块的所申请的内存时,操作系统则无法响应该运行模块的内存申请为其分配相应的内存以供使用,此时则会出现因内存不足而导致内存分配失败,从而触发目标应用程序产生崩溃退出的现象。

实践表明,内存不足的情况通常是由于目标应用程序中的各运行模块使用了较多的内存导致的。因此本发明实施例可以根据各运行模块的已使用内存量来判断各运行模块是否使用了较多的内存,以预测目标应用程序是否存在内存不足的风险。具体的,在获取到目标进程的内存使用信息之后,可以根据目标进程的内存使用信息确定目标应用程序的已使用内存量;其中,若目标进程的内存使用信息包括指定模块的内存使用信息及其他模块的内存使用信息,则确定的目标应用程序的已使用内存量为指定模块的内存使用量及其他模块的内存使用量的总和;若目标进程的内存使用信息中包括指定模块的内存使用信息,不包括其他模块的内存使用信息,则确定的目标应用程序的已使用内存量为指定模块的内存使用量。

由前述可知,目标应用程序对应一个被允许使用的最大内存量,因此在一种实施方式中,可以根据目标应用程序被允许使用的最大内存量以及已使用内存量之间的关系来判断各运行模块是否使用了较多的内存,从而预测目标应用程序是否存在内存不足的风险。具体的,可以获取目标应用程序被允许使用的最大内存量,并根据目标进程的内存使用信息确定目标应用程序的已使用内存量;若已使用内存量和最大内存量之间的比值大于预设比值,则确定目标应用程序存在内存不足的风险。此处的预设比值可以根据实际需求或者经验值设置,例如预设比值设置为80%。

再一种实施方式中,还可以针对目标应用程序预设的内存量阈值以及已使用内存量之间的关系来判断各运行模块是否使用了较多的内存,从而预测目标应用程序是否存在内存不足的风险。具体的,可以获取目标应用程序被允许使用的最大内存量,并根据最大内存量确定目标应用程序的内存量阈值,该内存量阈值小于最大内存量;根据目标进程的内存使用信息确定目标应用程序的已使用内存量;若已使用内存量大于或等于内存量阈值,则确定目标应用程序存在内存不足的风险。此处的内存量阈值可以根据实际需求或者经验值设置,只要满足内存量阈值小于最大内存量即可。

s303,若存在风险,则激活目标应用程序的预留应急内存,并回收目标应用程序的至少一个运行模块的已占用内存。

若存在风险,则说明此时的目标应用程序的各运行模块使用了较多的内存,目标应用程序的剩余内存较少,因内存分配不足而异常崩溃退出的概率较大。因此,为了避免目标应用程序的异常崩溃退出,可以激活目标应用程序的预留应急内存,并同步回收目标应用程序的至少一个运行模块的已占用内存,以增大目标应用程序的剩余内存,缓解目标应用程序的运行压力。目标应用程序的预留应急内存是在目标应用程序开始运行时向操作系统申请的内存;预留应急内存包括预留虚拟内存及预留物理内存,所谓的虚拟内存是指对硬盘的一块区域进行划分而获得的内存空间;所谓的物理内存是指通过物理内存条而获得的内存空间,物理内存可以包括堆内存。预留应急内存是在目标应用程序的内存不足时应急使用的,在通常情况下没有被使用,因此若预留应急内存过大则会导致操作系统的内存大量空置浪费,若预留应急内存较小则会导致预留应急内存无法起到缓解目标应用程序的运行压力的作用,那么本发明实施例可根据经验值设置预留应急内存的大小,例如,预留应急内存可设置为100m的虚拟内存以及100m的物理内存;在其他实施例中,预留应急内存可设置为虚拟内存和物理内存的数量均为150m;等等。

步骤s303记载了在存在风险的情况下,激活预留应急内存和回收已占用内存的过程同步执行的过程。可以理解的是,实际应用中激活和回收的过程也可以择一进行,例如:若预留应急内存大于目标应用程序中的运行模块所申请的内存,则此情况下激活预留应急内存即可满足申请需求,此时可以仅激活预留应急内存。再如:若回收目标应用程序的至少一个运行模块的已占用内存后,目标应用程序的剩余内存达到一定的合理范围,可以满足运行模块的内存申请请求,则此情况下可以仅回收目标应用程序的至少一个运行模块的已占用内存;其中,该合理范围可以根据经验值或者目标应用程序的已使用内存量设置;例如,目标应用程序的已使用内存量为1.5gb,那么可以将三分之一的已使用内存量和三分之二的已使用内存量所构成的范围作为预设范围,即预设范围为[0.5gb,1gb]。目标应用程序的剩余内存在合理范围内,可以保证操作系统能够响应运行模块的内存申请为其分配相应的内存,从而避免目标应用程序的崩溃退出。

本发明实施例中,通过目标应用程序对应的目标进程的内存使用信息预测目标应用程序是否存在内存不足的风险,若存在风险则可激活目标应用程序的预留应用内存,同时回收目标应用程序的至少一个运行模块的已占用内存。通过预测方式能够在目标应用程序实际发生内存不足的情况之前提前捕捉内存不足的风险,有利于针对该风险及时启动应急补救措施,这样的内存管理方式能够在一定程度上避免目标应用程序出现内存不足的情况,进而避免目标应用程序出现崩溃退出等异常现象,保证目标应用程序的正常运行。

请参见图4,是本发明实施例提供的另一种内存管理方法的流程示意图。该内存管理方法可以由上述所提及的终端中的处理器执行。请参见图4,该内存管理方法可包括以下步骤s401-s406:

s401,检测目标应用程序中的指定模块是否被调用。

s402,若指定模块被调用,则识别指定模块的调用场景。

在步骤s401中,指定模块可以提供一个对外调用接口,以供目标应用程序除指定模块之外的其他模块或者目标应用程序之外的其他应用程序发送调用指令至该对外调用接口,从而调用指定模块。若在对外调用接口检测到调用指令,则可以确定指定模块被调用,此时操作系统的内存比较充足,因此目标应用程序可以申请预设数量的虚拟内存以及物理内存作为预留应急内存。还可以在步骤s402中识别指定模块的调用场景,此处的调用场景包括同进程调用场景或跨进程调用场景,所谓的同进程调用场景是指由目标应用程序中除所述指定模块之外的其他模块调用指定模块的场景;所谓的跨进程调用场景是指目标应用程序之外的其他应用程序调用指定模块的场景。

在识别指定模块的调用场景时,可以获取针对指定模块的调用指令,该调用指令携带场景配置信息;根据场景配置信息确定指定模块的调用场景。具体的,该场景配置信息可以携带场景标识,该场景标识明确表示调用场景为同进程调用场景还是跨进程调用场景。例如,同进程调用场景的标识为“1”,跨进程调用场景的标识为“2”,那么若调用指令所携带的场景配置信息中的场景标识为“1”,则可以直接根据该场景标识确定出指定模块的调用场景为同进程调用场景。

s403,获取同进程调用场景下目标进程的第一内存使用信息,或者,获取跨进程调用场景下目标进程的第二内存使用信息。

若指定模块的调用场景为同进程调用场景,则获取同进程调用场景下目标进程的第一内存使用信息;若指定模块的调用场景为跨进程调用场景,则获取跨进程调用场景下目标进程的第二内存使用信息。其中,第一内存使用信息包括:指定模块的内存使用信息及其他模块的内存使用信息;第二内存使用信息包括:指定模块的内存使用信息。由此可见,本发明实施例不仅可以获取其他模块的内存使用信息,还可获取指定模块的内存使用信息,使得获取到的目标进程的内存使用信息较为全面。

本发明实施例中的指定模块可以包括至少一个子模块;目标应用程序设有内存信息捕捉函数,该内存信息捕捉函数用于记录至少一个子模块的内存使用信息。也就是说,指定模块中的各子模块每次申请或使用内存时,内存信息捕捉函数都会记录各子模块的内存使用信息,各子模块的内存使用信息包括内存使用量以及相应的函数调用栈。相应的,获取同进程调用场景下目标进程的第一内存使用信息的具体实施方式可以是:根据内存信息捕捉函数记录的至少一个子模块的内存使用信息确定指定模块的内存使用信息;获取其他模块的函数调用栈,并根据其他模块的函数调用栈确定其他模块的内存使用信息。在一种实施方式中,可以根据虚拟机接口获取其他模块的函数调用栈。同理,获取跨进程调用场景下目标进程的第二内存使用信息的具体实施方式可以是:根据内存信息捕捉函数记录的至少一个子模块的内存使用信息确定指定模块的内存使用信息。

由此可见,本发明实施例所提出的内存管理方法不仅可以应用在同进程调用场景下,还可应用在跨进程调用场景下,其场景更加丰富,从而可以更好地对目标应用程序进行内存管理,满足用户需求。

在一个实施例中,目标应用程序包括浏览器应用程序,目标进程包括浏览进程;相应的,目标应用程序中的指定模块为浏览器内核模块,指定模块包括渲染子模块和动态网页子模块,指定模块的内存使用信息包括:渲染子模块的内存使用信息和/或动态网页子模块的内存使用信息。

s404,检测是否接收到预测内存不足的触发条件。

s405,若接收到触发条件,则根据目标进程的内存使用信息预测目标应用程序是否存在内存不足的风险。

在步骤s404-s405中,处理器可以采取主动方式和/或被动方式预测目标应用程序是否存在内存不足的风险。其中,主动方式可以指:处理器周期性地预测,即以预设时间间隔为周期进行预测;被动方式可以指:若检测到目标应用程序存在内存分配失败事件,则进行预测。因此,处理器可以实时检测是否接收到预测内存不足的触发条件,以此判断是否进行内存不足的预测;此处的触发条件包括:操作系统的当前时间与上一次预测内存不足的预测时间之间的间隔等于预设时间间隔,或者目标应用程序存在内存分配失败事件。若接收到触发条件,则根据目标进程的内存使用信息预测目标应用程序是否存在内存不足的风险;此处的目标进程的内存使用信息包括第一内存使用信息或者第二内存使用信息。

s406,若存在风险,则激活目标应用程序的预留应急内存,并回收所述目标应用程序的至少一个运行模块的已占用内存。

由前述可知,预留应急内存是在目标应用程序开始运行时,向操作系统申请的内存,该预留应急内存处于锁定状态。因此,若检测到存在内存不足的风险,则可以向目标应用程序发送一个激活指令,以使得预留应急内存的状态从锁定状态变为激活状态,使得目标应用程序可以使用激活后的预留应急内存。

在回收目标应用程序的至少一个运行模块的已占用内存时,首先,可以获取目标应用程序的至少一个运行模块的回收优先级。此处的回收优先级可由一个或多个决策因子决定,回收优先级的决策因子包括以下至少一种:时间、影响度及内存占用量。设至少一个运行模块中任一运行模块为第一运行模块,若第一运行模块的启动运行的时间距离操作系统的当前时间越远则回收优先级越高;若第一运行模块对目标进程对应的显示内容影响越小则回收优先级越高;若第一运行模块的内存占用量越大则回收优先级越高。

然后,按照回收优先级由高至低的顺序回收至少一个运行模块的已占用内存;具体的,可以按照回收优先级由高至低的顺序选取第二运行模块,并回收第二运行模块的已占用内存。然后判断回收后的目标应用程序的剩余内存是否达到预设范围;若达到,则停止回收;若未达到,则按照回收优先级由高至低的顺序选取位于第二运行模块之后的下一运行模块,并继续回收下一运行模块的已占用内存。其中,预设范围可以是上述实施例所提及的合理范围。

在一个实施例中,若目标应用程序包括浏览器应用程序,则还可以执行如下操作:若存在风险,则暂停渲染子模块的内存使用,和/或暂停动态网页子模块的内存使用;在浏览器应用程序的用户界面中显示浏览进程对应的当前网页内容,该当前网页内容是在预测到存在风险时用户界面所显示的网页内容。

在其他实施例中,终端的处理器在获取到目标进程的内存使用信息、预测到目标应用程序存在内存不足的风险,或者检测到回收已占用内存后仍然发生内存不足的情况后,还可以将目标进程的内存使用信息发送至开发机,通过开发机中的内存监控展示端展示该目标进程的内存使用信息,以供开发人员查看。可选的,可将目标进程的内存使用信息以视图的形式直观地展示给开发人员,此处的视图可以是树形视图。开发人员可根据该视图进一步分析目标进程的内存使用信息,并根据分析结果修改目标应用程序代码逻辑,从而解决目标应用程序的异常问题。通过将当前进行的内存使用信息以视图的形式直观地展示给开发人员,可在一定程度上提升开发人员分析目标应用程序内存不足的异常问题的效率。

在一个实施例中,若目标应用程序中的指定模块的调用场景为跨进程调用场景,即指定模块被其他应用程序调用的场景,则还可以获取其他应用程序的内存占用信息。由于其他应用程序和目标应用程序属于同一个操作系统,因此若检测到其他应用程序的内存占用信息存在异常情况,则可以将该内存占用信息反馈给其他应用程序的开发人员,以使得其他应用程序的开发人员可以根据该内存占用信息进行异常情况的分析处理。此处的异常情况可以包括:其他应用程序的内存占用信息中的占用内存量大于预设占用量,预设占用量可以根据经验值设置;例如,统计得到其他应用程序在调用指定模块时,其他应用程序的占用内存量通常为1.5g~2.0g;那么可以设置预设占用量为3.0g,若其他应用程序的内存占用信息中的占用内存量为3.5g,则表明此时的其他应用程序的内存占用信息存在异常情况。

其中,获取其他应用程序的内存占用信息的具体实施方式可以是:根据系统进程接口获取调用指定模块的其他应用程序的内存占用总量,根据所述指定模块的内存使用信息和所述内存占用总量确定所述其他应用程序的内存占用信息。例如,调用指定模块的其他应用程序的内存占用总量为2gb,指定模块的内存使用信息包括:第一子模块使用0.2gb内存,第二子模块使用0.3gb内存;那么根据指定模块的内存使用信息和内存占用总量所确定的内存占用信息为:其他应用程序占用内存总共2+0.2+0.3=2.5gb。

本发明实施例中,通过目标应用程序对应的目标进程的内存使用信息预测目标应用程序是否存在内存不足的风险,若存在风险则可激活目标应用程序的预留应用内存,同时回收目标应用程序的至少一个运行模块的已占用内存。通过预测方式能够在目标应用程序实际发生内存不足的情况之前提前捕捉内存不足的风险,有利于针对该风险及时启动应急补救措施,这样的内存管理方式能够在一定程度上避免目标应用程序出现内存不足的情况,进而避免目标应用程序出现崩溃退出等异常现象,保证目标应用程序的正常运行。

为了便于理解图3-图4所示的内存管理方法,本发明实施例以目标应用程序为浏览器应用程序进行阐述,浏览器应用程序设有内存信息捕捉函数;浏览器应用程序包括浏览器客户端模块和浏览器内核模块,其中,浏览器客户端模块的逻辑由java实现,浏览器内核模块的逻辑由c/c++实现;浏览器内核模块可包括渲染子模块和动态网页子模块:渲染子模块中包括渲染引擎,该渲染引擎用于对网页语法进行解释(如html、javascript)并渲染网页;动态网页子模块中包括js引擎,js引擎用于对javascript进行解释、编译和执行,以使网页达到一些动态的效果。请参见图5,针对浏览器应用程序的具体内存管理方法可以如下:

(1)用户点击浏览器客户端,此时浏览器应用程序中的浏览器客户端模块(其他模块)可以调用浏览器内核模块(指定模块)以启动浏览器应用程序开始加载网页。此时可以开始统计内存使用信息,具体的:通过内存信息捕捉函数开始记录浏览器内核模块中的各子模块的内存使用信息,例如渲染子模块的内存使用信息和动态网页子模块的内存使用信息;通过函数调用栈记录浏览器客户端模块的内存使用信息。

(2)在开始浏览网页时,由于操作系统的内存比较充足,因此可以向操作系统申请一个预留应急内存,预留应急内存可以包括100m虚拟内存和100m堆内存,以备浏览器应用程序的内存不足时使用。

(3)获取浏览器应用程序对应的浏览进程的内存使用信息,该内存使用信息包括:浏览器客户端模块的内存使用信息、渲染子模块的内存使用信息以及动态网页子模块的内存使用信息,等等。由此可见,本发明实施例不仅可以获取java层(浏览器客户端模块)的内存使用信息,还可获取c/c++层(渲染子模块以及动态网页子模块)的内存使用信息,浏览进程的内存使用信息较为全面。

在一个实施例中,浏览器客户端还可与开发机相连接,如图6所示。开发机上的内存监控展示端可实时抓取浏览器应用程序的内存使用信息,并实时展示给开发人员。开发人员在观察到内存异常现象时,可以控制内存监控展示端根据内存使用信息进行内存分析,并将浏览器内核模块和浏览器客户端模块的内存使用信息以视图的形式展示给开发人员,由开发人员再进行分析。

(4)根据浏览进程的内存使用信息预测浏览器应用程序是否存在内存不足的风险;若不存在风险,则继续当前的内存分配;若存在风险,则进行内存不足的应急处理,包括:步骤(5)(6)(7):

(5)激活预留应急内存,即激活启动时预留的100m虚拟内存和100m堆内存;进入步骤(8)。

(6)暂停渲染子模块和动态网页子模块的内存使用,进入步骤(9)。

(7)获取浏览器应用程序的至少一个运行模块的回收优先级,并按照回收优先级由高至低的顺序回收至少一个运行模块的已占用内存。例如,浏览器应用程序包括:历史浏览网页模块、标签页切换模块以及资源存储模块等3个运行模块,且回收优先级从高到低依次为:历史浏览网页模块>标签页切换模块>资源存储模块。那么按照回收优先级依次执行如下步骤:①回收历史浏览网页模块的占用内存:按照启动运行时间与操作系统的当前时间之间的距离从远及近的顺序,回收历史浏览网页模块中的各网页资源的占用内存,并在回收每个网页资源的占用内存后判断浏览器应用程序的剩余内存是否达到预设范围;②若未达到,则进一步回收标签页切换模块的占用内存:回收标签页切换模块中用于标签页切换所需资源的占用内存,并在回收后判断浏览器应用程序的剩余内存是否达到预设范围;③若未达到,则进一步回收资源存储模块的占用内存:回收渲染当前网页内容的当前界面以外的占用内存;具体的,可回收渲染当前网页内容的占用内存中,当前显示界面所需的渲染之外的之前渲染资源和/或以后渲染资源的占用内存;进入步骤(8)。

(8)继续尝试当前的内存分配,以保证当前的内存分配成功进行。

(9)在浏览器的用户界面中继续显示当前网页内容;直至浏览结束。此处的浏览结束是指:检测到用户关闭或跳转当前网页内容的指令,或者用户浏览结束当前网页内容。

由此可见,本发明实施例可以详细统计出浏览器内核模块和浏览器客户端模块的内存使用信息,并可根据统计到的内存使用信息预测浏览器应用程序是否存在内存不足的风险。通过预测方式可以在浏览器应用程序实际发生内存不足的情况之前提前捕捉到内存不足的风险;若存在风险,则可及时执行切实有效的补救措施:通过激活预留应急内存,同步释放过度占用的内存资源,并暂停渲染子模块和动态网页子模块的内存使用。通过这样的内存管理方式可以在一定程度上避免浏览器应用程序因内存不足而出现崩溃退出的现象,保证浏览器应用程序的正常运行,从而保证当前网页内容的顺利展示,以使得用户可以持续并完整地在浏览器应用程序的用户界面中浏览当前网页内容。

基于上述内存管理方法实施例的描述,本发明实施例还公开了一种内存管理装置,所述内存管理装置可以是运行于终端中的一个计算机程序(包括程序代码),也可以是包含在终端中的一个实体装置。该内存管理装置可以执行图3和图4所示的方法。请参见图7,所述内存管理装置可以运行如下单元:

获取单元101,用于获取目标应用程序对应的目标进程的内存使用信息,所述内存使用信息包括所述目标应用程序的至少一个运行模块的内存占用信息;

预测单元102,用于根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险;

处理单元103,用于若存在所述风险,则激活所述目标应用程序的预留应急内存,并回收所述目标应用程序的至少一个运行模块的已占用内存。

在一种实施方式中,获取单元101在用于获取目标应用程序对应的目标进程的内存使用信息时,具体用于:

检测所述目标应用程序中的指定模块是否被调用;

若所述指定模块被调用,则识别所述指定模块的调用场景,所述调用场景包括同进程调用场景或跨进程调用场景,所述同进程调用场景是指由所述目标应用程序中除所述指定模块之外的其他模块调用所述指定模块的场景;所述跨进程调用场景是指所述目标应用程序之外的其他应用程序调用所述指定模块的场景;

获取所述同进程调用场景下所述目标进程的第一内存使用信息,或者,获取所述跨进程调用场景下所述目标进程的第二内存使用信息;

其中,所述第一内存使用信息包括:所述指定模块的内存使用信息及所述其他模块的内存使用信息;所述第二内存使用信息包括:所述指定模块的内存使用信息。

再一种实施方式中,获取单元101在用于若所述指定模块被调用,则识别所述指定模块的调用场景时,具体用于:

获取针对所述目标应用程序中的所述指定模块的调用指令,所述调用指令携带场景配置信息;

根据所述场景配置信息确定所述指定模块的调用场景。

再一种实施方式中,所述指定模块包括至少一个子模块;所述目标应用程序设有内存信息捕捉函数,所述内存信息捕捉函数用于记录所述至少一个子模块的内存使用信息;相应的,获取单元101在用于获取所述同进程调用场景下所述目标进程的第一内存使用信息时,具体用于:

根据所述内存信息捕捉函数记录的所述至少一个子模块的内存使用信息确定所述指定模块的内存使用信息;

获取所述其他模块的函数调用栈,并根据所述其他模块的函数调用栈确定所述其他模块的内存使用信息。

再一种实施方式中,预测单元102还可用于:

检测是否接收到预测内存不足的触发条件;

若接收到所述触发条件,则执行根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险的步骤;

其中,所述触发条件包括:操作系统的当前时间与上一次预测内存不足的预测时间之间的间隔等于预设时间间隔,或者所述目标应用程序存在内存分配失败事件。

再一种实施方式中,预测单元102在用于根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险时,具体用于:

获取所述目标应用程序被允许使用的最大内存量,并根据所述目标进程的内存使用信息确定所述目标应用程序的已使用内存量;

若所述已使用内存量和所述最大内存量之间的比值大于预设比值,则确定所述目标应用程序存在内存不足的风险。

再一种实施方式中,处理单元103在用于回收所述目标应用程序的至少一个运行模块的已占用内存时,具体用于:

获取所述目标应用程序的至少一个运行模块的回收优先级;

按照回收优先级由高至低的顺序回收所述至少一个运行模块的已占用内存。

再一种实施方式中,所述回收优先级的决策因子包括以下至少一种:时间、影响度及内存占用量;设所述至少一个运行模块中任一运行模块为第一运行模块,若所述第一运行模块的启动运行的时间距离所述操作系统的当前时间越远则回收优先级越高;若所述第一运行模块对所述目标进程对应的显示内容影响越小则回收优先级越高;若所述第一运行模块的内存占用量越大则回收优先级越高。

再一种实施方式中,处理单元103在用于按照回收优先级由高至低的顺序回收所述至少一个运行模块的已占用内存时,具体用于:

按照回收优先级由高至低的顺序选取第二运行模块,并回收所述第二运行模块的已占用内存;

判断回收后的所述目标应用程序的剩余内存是否达到预设范围;

若达到,则停止回收;若未达到,则按照所述回收优先级由高至低的顺序选取位于所述第二运行模块之后的下一运行模块,并继续回收所述下一运行模块的已占用内存。

再一种实施方式中,所述目标应用程序包括浏览器应用程序,所述目标进程包括浏览进程;所述目标应用程序中的指定模块为浏览器内核模块,所述指定模块包括渲染子模块和动态网页子模块,所述指定模块的内存使用信息包括:所述渲染子模块的内存使用信息和/或所述动态网页子模块的内存使用信息。

再一种实施方式中,处理单元103还可用于:

若存在所述风险,则暂停所述渲染子模块的内存使用,和/或暂停所述动态网页子模块的内存使用;

在所述浏览器应用程序的用户界面中显示所述浏览进程对应的当前网页内容,所述当前网页内容是在预测到存在所述风险时所述用户界面所显示的网页内容。

根据本发明的一个实施例,图3和图4所示的方法所涉及的各个步骤均可以是由图7所示的内存管理装置中的各个单元来执行的。例如,图3中所示的步骤s301-s303可分别由图7中所示的获取单元101、预测单元102以及处理单元103来执行;又如,图4中所示的步骤s401-s403可由图7中所示的获取单元101来执行,步骤s404和s405可由图7中所示的预测单元102来执行,步骤s406可由图7中所示的处理单元103来执行。

根据本发明的另一个实施例,图7所示的内存管理装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本发明的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本发明的其它实施例中,内存管理装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。

根据本发明的另一个实施例,可以通过在包括中央处理单元(cpu)、随机存取存储介质(ram)、只读存储介质(rom)等处理元件和存储元件的例如计算机的通用计算设备上运行能够执行如图3和图4中所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图7中所示的内存管理装置设备,以及来实现本发明实施例的内存管理方法。所述计算机程序可以记载于例如计算机可读记录介质上,并通过计算机可读记录介质装载于上述计算设备中,并在其中运行。

本发明实施例中,通过目标应用程序对应的目标进程的内存使用信息预测目标应用程序是否存在内存不足的风险,若存在风险则可激活目标应用程序的预留应用内存,同时回收目标应用程序的至少一个运行模块的已占用内存。通过预测方式能够在目标应用程序实际发生内存不足的情况之前提前捕捉内存不足的风险,有利于针对该风险及时启动应急补救措施,这样的内存管理方式能够在一定程度上避免目标应用程序出现内存不足的情况,进而避免目标应用程序出现崩溃退出等异常现象,保证目标应用程序的正常运行。

基于上述方法实施例以及装置实施例的描述,本发明实施例还提供一种终端。请参见图8,该终端至少包括处理器201、输入设备202、输出设备203以及计算机存储介质204。其中,终端内的处理器201、输入设备202、输出设备203以及计算机存储介质204可通过总线或其他方式连接。计算机存储介质204可以存储在终端的存储器中,所述计算机存储介质204用于存储计算机程序,所述计算机程序包括程序指令,所述处理器201用于执行所述计算机存储介质204存储的程序指令。

处理器201(或称cpu(centralprocessingunit,中央处理器))是终端的计算核心以及控制核心,其适于实现一条或一条以上指令,具体适于加载并执行一条或一条以上指令从而实现相应方法流程或相应功能;在一个实施例中,本发明实施例所述的处理器201可以用于对目标应用程序进行一系列的内存管理处理,包括:获取目标应用程序对应的目标进程的内存使用信息,所述内存使用信息包括所述目标应用程序的至少一个运行模块的内存占用信息;根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险;若存在所述风险,则激活所述目标应用程序的预留应急内存,并回收所述目标应用程序的至少一个运行模块的已占用内存,等等。

本发明实施例还提供了一种计算机存储介质(memory),所述计算机存储介质是终端中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机存储介质既可以包括终端中的内置存储介质,当然也可以包括终端所支持的扩展存储介质。计算机存储介质提供存储空间,该存储空间存储了终端的操作系统。并且,在该存储空间中还存放了适于被处理器201加载并执行的一条或一条以上的指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机存储介质可以是高速ram存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器;可选的还可以是至少一个位于远离前述处理器的计算机存储介质。

在一个实施例中,可由处理器201加载并执行计算机存储介质中存放的一条或一条以上指令,以实现上述有关内存管理实施例中的方法的相应步骤;具体实现中,计算机存储介质中的一条或一条以上指令由处理器201加载并执行如下步骤:

获取目标应用程序对应的目标进程的内存使用信息,所述内存使用信息包括所述目标应用程序的至少一个运行模块的内存占用信息;

根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险;

若存在所述风险,则激活所述目标应用程序的预留应急内存,并回收所述目标应用程序的至少一个运行模块的已占用内存。

在一种实施方式中,在获取目标应用程序对应的目标进程的内存使用信息时,所述一条或一条以上指令由处理器201加载并具体执行:

检测所述目标应用程序中的指定模块是否被调用;

若所述指定模块被调用,则识别所述指定模块的调用场景,所述调用场景包括同进程调用场景或跨进程调用场景,所述同进程调用场景是指由所述目标应用程序中除所述指定模块之外的其他模块调用所述指定模块的场景;所述跨进程调用场景是指所述目标应用程序之外的其他应用程序调用所述指定模块的场景;

获取所述同进程调用场景下所述目标进程的第一内存使用信息,或者,获取所述跨进程调用场景下所述目标进程的第二内存使用信息;

其中,所述第一内存使用信息包括:所述指定模块的内存使用信息及所述其他模块的内存使用信息;所述第二内存使用信息包括:所述指定模块的内存使用信息。

再一种实施方式中,在若所述指定模块被调用,则识别所述指定模块的调用场景时,所述一条或一条以上指令由处理器201加载并具体执行:

获取针对所述目标应用程序中的所述指定模块的调用指令,所述调用指令携带场景配置信息;

根据所述场景配置信息确定所述指定模块的调用场景。

再一种实施方式中,所述指定模块包括至少一个子模块;所述目标应用程序设有内存信息捕捉函数,所述内存信息捕捉函数用于记录所述至少一个子模块的内存使用信息;相应的,在获取所述同进程调用场景下所述目标进程的第一内存使用信息时,所述一条或一条以上指令由处理器201加载并具体执行:

根据所述内存信息捕捉函数记录的所述至少一个子模块的内存使用信息确定所述指定模块的内存使用信息;

获取所述其他模块的函数调用栈,并根据所述其他模块的函数调用栈确定所述其他模块的内存使用信息。

再一种实施方式中,所述一条或一条以上指令还可由处理器201加载并具体执行:

检测是否接收到预测内存不足的触发条件;

若接收到所述触发条件,则执行根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险的步骤;

其中,所述触发条件包括:操作系统的当前时间与上一次预测内存不足的预测时间之间的间隔等于预设时间间隔,或者所述目标应用程序存在内存分配失败事件。

再一种实施方式中,在根据所述目标进程的内存使用信息预测所述目标应用程序是否存在内存不足的风险时,所述一条或一条以上指令由处理器201加载并具体执行:

获取所述目标应用程序被允许使用的最大内存量,并根据所述目标进程的内存使用信息确定所述目标应用程序的已使用内存量;

若所述已使用内存量和所述最大内存量之间的比值大于预设比值,则确定所述目标应用程序存在内存不足的风险。

再一种实施方式中,在回收所述目标应用程序的至少一个运行模块的已占用内存时,所述一条或一条以上指令由处理器201加载并具体执行:

获取所述目标应用程序的至少一个运行模块的回收优先级;

按照回收优先级由高至低的顺序回收所述至少一个运行模块的已占用内存。

再一种实施方式中,所述回收优先级的决策因子包括以下至少一种:时间、影响度及内存占用量;设所述至少一个运行模块中任一运行模块为第一运行模块,若所述第一运行模块的启动运行的时间距离所述操作系统的当前时间越远则回收优先级越高;若所述第一运行模块对所述目标进程对应的显示内容影响越小则回收优先级越高;若所述第一运行模块的内存占用量越大则回收优先级越高。

再一种实施方式中,在按照回收优先级由高至低的顺序回收所述至少一个运行模块的已占用内存时,所述一条或一条以上指令由处理器201加载并具体执行:

按照回收优先级由高至低的顺序选取第二运行模块,并回收所述第二运行模块的已占用内存;

判断回收后的所述目标应用程序的剩余内存是否达到预设范围;

若达到,则停止回收;若未达到,则按照所述回收优先级由高至低的顺序选取位于所述第二运行模块之后的下一运行模块,并继续回收所述下一运行模块的已占用内存。

再一种实施方式中,所述目标应用程序包括浏览器应用程序,所述目标进程包括浏览进程;所述目标应用程序中的指定模块为浏览器内核模块,所述指定模块包括渲染子模块和动态网页子模块,所述指定模块的内存使用信息包括:所述渲染子模块的内存使用信息和/或所述动态网页子模块的内存使用信息。

再一种实施方式中,所述一条或一条以上指令还可由处理器201加载并具体执行:

若存在所述风险,则暂停所述渲染子模块的内存使用,和/或暂停所述动态网页子模块的内存使用;

在所述浏览器应用程序的用户界面中显示所述浏览进程对应的当前网页内容,所述当前网页内容是在预测到存在所述风险时所述用户界面所显示的网页内容。

本发明实施例中,通过目标应用程序对应的目标进程的内存使用信息预测目标应用程序是否存在内存不足的风险,若存在风险则可激活目标应用程序的预留应用内存,同时回收目标应用程序的至少一个运行模块的已占用内存。通过预测方式能够在目标应用程序实际发生内存不足的情况之前提前捕捉内存不足的风险,有利于针对该风险及时启动应急补救措施,这样的内存管理方式能够在一定程度上避免目标应用程序出现内存不足的情况,进而避免目标应用程序出现崩溃退出等异常现象,保证目标应用程序的正常运行。

以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1