内存处理方法和装置、电子设备、计算机可读存储介质与流程

文档序号:18188490发布日期:2019-07-17 05:28阅读:140来源:国知局
内存处理方法和装置、电子设备、计算机可读存储介质与流程

本申请涉及数据处理领域,特别是涉及一种内存处理方法和装置、电子设备、计算机可读存储介质。



背景技术:

电子设备上安装的应用在运行时,需要占用一定的内存。内存是一个应用在运行过程中数据的主要存储介质。由于电子设备上的内存容量有限,当后台应用占据的内存过多时,会影响前台应用的运行效率。因而需要对内存进行回收,以提高前台应用的运行效率。

传统对内存处理方法是将处于后台运行的单个应用占据的内存全部回收。然而,将单个应用使用的内存完全回收后将导致该应用下次启动和执行过程中需要将几乎所有被回收的内存重新加载回来,导致被回收内存的应用的运行速度显著降低。



技术实现要素:

本申请实施例提供一种内存处理方法和装置、电子设备、计算机可读存储介质,可以在提高前台应用的运行效率的同时,降低对被回收内存的应用的运行的影响。

一种内存处理方法,包括:获取待处理应用所占用的可回收内存页;获取所述待处理应用被前台应用依赖的依赖比例;根据所述可回收内存页和所述依赖比例确定对所述可回收内存页的回收数量;从所述可回收内存页中选取所述回收数量的内存页进行回收。

一种内存处理装置,所述装置包括:内存页获取模块,用于获取待处理应用所占用的可回收内存页;依赖确定模块,用于获取所述待处理应用被前台应用依赖的依赖比例;内存回收模块,用于根据所述可回收内存页和所述依赖比例确定对所述可回收内存页的回收数量;从所述可回收内存页中选取所述回收数量的内存页进行回收。

一种电子设备,包括存储器及处理器,所述存储器中储存有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行本申请各实施例中所述的内存处理方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本申请各实施例中所述的内存处理方法的步骤。

本申请实施例提供的内存处理方法和装置、电子设备、计算机可读存储介质,通过获取待处理应用所占用的可回收内存页以及待处理应用被前台应用依赖的依赖比例,进而根据该依赖比例和可回收内存页确定回收数量,并从可回收内存页中选取回收数量的内存页进行回收,由于回收的对象是可回收内存页,且并非一定是对所有可回收内存页均进行回收,回收数量是根据待处理应用被前台应用依赖的依赖比例而确定,进一步降低了对待处理应用的运行影响,且回收的内存页可释放出来供其它应用使用,又提高了系统的综合处理效率,保证在整个系统内存变大的情况下,对每个应用的负面影响最小,保持了对待处理应用内存的回收与运行之间的平衡性。

附图说明

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

图1为一个实施例中电子设备的内部结构示意图;

图2为一个实施例中电子设备中的系统的部分框架示意图;

图3为一个实施例中内存处理方法的流程图;

图4a为一个实施例中无关类应用的回收比例曲线示意图;

图4b为一个实施例中线性类应用的回收比例曲线示意图;

图4c为一个实施例中非线性类应用的回收比例曲线示意图;

图5为另一个实施例中内存处理方法的流程图;

图6为一个实施例中内存处理装置的结构框图;

图7为一个实施例中手机的部分结构的框图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

在一个实施例中,如图1所示,提供了一种电子设备的内部结构示意图。该电子设备包括通过系统总线连接的处理器、存储器和显示屏。其中,该处理器用于提供计算和控制能力,支撑整个电子设备的运行。存储器用于存储数据、程序、和/或指令代码等,存储器上存储至少一个计算机程序,该计算机程序可被处理器执行,以实现本申请实施例中提供的适用于电子设备的内存处理方法。存储器可包括磁碟、光盘、只读存储记忆体(read-onlymemory,rom)等非易失性存储介质,或随机存储记忆体(random-access-memory,ram)等。例如,在一个实施例中,存储器包括非易失性存储介质及内存储器。非易失性存储介质存储有操作系统、数据库和计算机程序。该数据库中存储有用于实现以上各个实施例所提供的一种内存处理方法相关的数据,比如可存储有每个应用的名称以及为每个应用分配的内存页等信息。该计算机程序可被处理器所执行,以用于实现本申请各个实施例所提供的一种内存处理方法。内存储器为非易失性存储介质中的操作系统、数据库和计算机程序提供高速缓存的运行环境。显示屏可以是触摸屏,比如为电容屏或电子屏,用于显示前台应用的界面展示信息,还可以被用于检测作用于该显示屏的触摸操作,生成相应的指令,比如进行前后台应用的切换指令等。

本领域技术人员可以理解,图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。如该电子设备还包括通过系统总线连接的网络接口,网络接口可以是以太网卡或无线网卡等,用于与外部的电子设备进行通信,比如可用于同服务器进行通信。再比如该电子设备上并不存在通过系统总线连接的显示器,或者可连接外部显示设备。

在一个实施例中,如图2所示,提供了一种电子设备的部分架构图。其中,该电子设备的架构系统中包括java空间层210、本地框架层220以及内核(kernel)空间层230。java空间层210上可包含冻结管理应用212,电子设备可通过该冻结管理应用212来实现对各个应用的冻结策略,对后台耗电的相关应用做冻结和解冻等管理操作。本地框架层220中包含资源优先级和限制管理模块222和平台冻结管理模块224。电子设备可通过资源优先级和限制管理模块222实时维护不同的应用处于不同优先级和不同资源的组织中,并根据上层的需求来调整应用程序的资源组别从而达到优化性能,节省功耗的作用。电子设备可通过平台冻结管理模块224将后台可以冻结的任务按照进入冻结时间的长短,分配到对应预设的不同层次的冻结层,可选地,该冻结层可包括三个,分别是:cpu限制睡眠模式、cpu冻结睡眠模式、进程深度冻结模式。其中,cpu限制睡眠模式是指对相关进程所占用的cpu资源进行限制,使相关进程占用较少的cpu资源,将空余的cpu资源向其它未被冻结的进程倾斜,限制了对cpu资源的占用,也相应限制了进程对网络资源以及i/o接口资源的占用;cpu冻结睡眠模式是指禁止相关进程使用cpu,而保留对内存的占用,当禁止使用cpu资源时,相应的网络资源以及i/o接口资源也被禁止使用;进程深度冻结模式是指除禁止使用cpu资源之外,进一步对相关进程所占用的内存资源进行回收,回收的内存可供其它进程使用。内核空间层230中包括uid管理模块231、cgroup模块232、binder管控模块233、进程内存回收模块234以及冻结超时退出模块235。其中,uid管理模块231用于实现基于应用的用户身份标识(useridentifier,uid)来管理第三方应用的资源或进行冻结。相比较于基于进程身份标识(processidentifier,pid)来进行进程管控,通过uid更便于统一管理一个用户的应用的资源。cgroup模块232用于提供一套完善的中央处理器(centralprocessingunit,cpu)、cpuset、内存(memory)、输入/输出(input/output,i/o)和net相关的资源限制机制。binder管控模块233用于实现后台binder通信的优先级的控制。其中,本地框架层220的接口模块包含开发给上层的binder接口,上层的框架或者应用通过提供的binder接口来发送资源限制或者冻结的指令给资源优先级和限制管理模块222和平台冻结管理模块224。进程内存回收模块234用于实现进程深度冻结模式,这样能当某个第三方应用长期处于冻结状态的时候,会主要释放掉进程的文件区,从而达到节省内存的模块,也加快该应用在下次启动时的速度。冻结超时退出模块235用于解决出现冻结超时场景产生的异常。通过上述的架构,可实现本申请各个实施例中的内存处理方法。

在一个实施例中,如图3所示,提供了一种内存处理方法,本实施例以该方法应用于如图1所示的电子设备为例进行说明。该方法包括:

步骤302,获取待处理应用所占用的可回收内存页。

待处理应用表示需要进行对占用内存进行回收的应用。该内存(又称随机存取存储器,randomaccessmemory,ram)表示运行程序时使用的内存(即运行内存),只能临时存储数据,用于与cpu交换高速缓存数据,但是内存本身不能用于长期存储数据。通常的,待处理应用为后台应用。后台应用为处于后台运行的应用;对应地,处于前台运行的应用即为前台应用。一个应用(application,简称app)的运行通常是由相关的多个进程的运行而体现的。进程(process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。前台应用运行时涉及的进程即为前台进程,后台应用运行时涉及的进程即为后台进程。

应用在运行的状态下需要占用内存空间来存储运行过程中的数据。不同的应用在不同的运行状态占用的内存空间大小不一定相同。内存页是操作系统对内存进行管理的单位,不同的电子设备设置的内存页占据的单位内存大小不一定相同。比如电子设备内的内存空间被划分为100000个内存页,待处理应用占用的内存页为内存页100至内存页200,而其中的内存页130至内存页200为可回收内存页。

在一个实施例中,电子设备可预先记录待处理应用在运行所占用的所有内存页,并从该所有内存页中获取可收回内存页。可回收内存页表示可进行回收,且回收后对待处理应用以及其它应用的运行不造成影响或者造成的影响较小的内存页。

在一个实施例中,电子设备可记录该所有内存页中,哪些内存页为可回收内存页,哪些内存页为不可回收内存页,并根据该记录信息来获取待处理应用占用的可回收内存页。

步骤304,获取待处理应用被前台应用依赖的依赖比例。

其中,依赖表示表示一个应用需要利用于另一个或多个应用的数据才能顺利实现对该一个应用的执行的关系。存在依赖关系的两个应用,分别为被依赖的应用和依赖的应用。由于应用的运行通常是由相关的多个进程的运行而体现的,应用之间的依赖也表现为进程之间的依赖。比如应用a中的某一进程a依赖于应用b中的某一进程b,即该进程b被进程a依赖,进程a需要利用进程b的数据才能实现对该进程a的执行,也说明了应用a依赖于应用b,或应用b被应用a依赖,应用a需要利用应用b的数据才能实现对该应用a的执行,此时,应用a即为被依赖的应用。可以理解地,依赖的应用还可能为第一应用,第二应用可能为后台应用。电子设备可从后台应用集合中进行检测,以查询出是否存在被前台应用依赖的后台应用。

依赖比例反映了被依赖应用被其所依赖的应用的依赖程度,依赖程度越大,则依赖比例也相应越大。在一个实施例中,电子设备可记录每个应用对其它应用的依赖比例,并读取所记录的众多依赖比例之中,待处理应用被前台应用的依赖比例。

在一个实施例中,当待处理应用不被前台应用依赖时,则依赖比例为0。

步骤306,根据可回收内存页和依赖比例确定对可回收内存页的回收数量。

回收数量为对内存页的回收数量,该数量为整数。不同的依赖比例以及不同的可回收内存页的总数对应的回收数量不同。该总数表示所有可回收内存页的总数量。电子设备可预设不同的总数在不同的依赖比例下,与回收数量之间的对应关系,根据该对应关系,可确定相应的回收数量。其中,回收数量与可回收内存页的总数呈正相关,与依赖比例呈负相关,可回收内存页的总数越大,和/或依赖比例越小,则对应确定的回收数量越大。

在一个实施例中,可根据该依赖比例确定对可回收内存页的回收比例,进而根据该回收比例以及可回收内存页的总数确定对可回收内存页的回收数量。其中,回收比例表示对待回收的内存的进行回收的比例,回收比例用于指导对可回收内存的回收的多少。比如回收比例为50%,表示可回收50%的占用内存。回收比例与依赖比例之间呈负相关,依赖比例越大,则回收比例越小。可建立该应用在不同的依赖比例下,与不同的回收比例之间的对应关系,根据该对应关系获取对应的回收比例。

回收数量可为可回收内存页的总数与确定的回收比例之间的乘积。当该乘积不为整数时,可选取与该乘积近似的一个整数,比如可按照四舍五入的方式确定最接近的一个整数作为回收数量,或者还可按照截尾法或进位法等方式确定相应的整数作为回收数量。

以按照四舍五入的方式确定可回收数量为例说明。比如,当可回收内存页有100页时,当依赖比例为20%时,若根据该依赖比例确定的护手比例为30.5%,则得到的乘积为30.5,确定回收数量为31,若对应的回收比例为21.2%时,则确定回收数量为21。

步骤308,从可回收内存页中选取回收数量的内存页进行回收。

电子设备可按照所确定的回收数量,从该待处理应用占用的可回收内存页中,选取该回收数量的内存页进行回收,以释放出该回收数量的可回收内存页,供前台应用或其它应用所使用,提高系统的综合处理效率。其中,选取的可回收内存页,为存储的数据未被前台应用依赖的内存页。可选地,电子设备可通过上述的进程内存回收模块234,按照该回收比例从可回收内存页中进行内存页的回收,使得回收内存页之后,对该待处理应用造成的影响也较小。

举例来说,回收比例可为30%,可回收内存页有100页,则从该100页的可回收内存页中回收30页的内存页,即释放出30页的可回收内存页,使得电子设备的空闲的内存页增加了30页,供给前台应用或其它的后台应用所使用。

上述的内存处理方法,通过获取待处理应用所占用的可回收内存页以及待处理应用被前台应用依赖的依赖比例,进而根据该依赖比例和可回收内存页确定回收数量,并从可回收内存页中选取回收数量的内存页进行回收,由于回收的对象是可回收内存页,且并非一定是对所有可回收内存页均进行回收,回收数量是根据待处理应用被前台应用依赖的依赖比例而确定,在降低回收了待处理应用占据的内存对前台应用的影响的同时,也降低了对待处理应用的运行影响,且回收的内存页可释放出来供其它应用使用,又提高了系统的综合处理效率,通过从可回收内存页中选取所确定的回收数量的内存页进行回收,保证在整个系统内存变大的情况下,对每个应用的负面影响最小,保持了对待处理应用内存的回收与运行之间的平衡性。

在一个实施例中,步骤304包括:检测每个可回收内存页中存储的数据是否被前台应用依赖;根据检测结果确定待处理应用被前台应用依赖的依赖比例。

检测结果包括内存页未被前台应用依赖或被前台应用依赖。电子设备可针对为待处理应用所分配的每个可回收内存页,检测相应内存页中存储的数据在预设时间段内是否被前台应用所使用到,若是,则判定该内存页被该前台应用所依赖。或者可针对该前台应用,检测其在预设时间段内,是否有使用到为待处理应用所分配的可回收内存页中存储的数据,并判定所使用到的内存页被前台应用所依赖。其中,该预设时间段可为在当前时刻为止的预设时长的时间段,也即最近时间段,该最近时间段的时长为预设时长,该预设时长可为按照经验值设置的任意合适的时长,比如为10分钟,或者半小时等。或者该预设时间段还可为前台应用当前保持在前台运行的时间段。比如,前台应用在10点35分20秒至当前时刻,均保持在前台运行,则当前时间段即为10点35分20秒至当前时刻的时间段。

可选地,该依赖比例可为被前台应用所依赖的可回收内存页的依赖总数与客户收内存页的总数之比。通过检测每个可回收内存页中存储的数据是否被前台应用依赖;进而根据检测结果确定待处理应用被前台应用依赖的依赖比例,可提高所确定的依赖比例的准确性。

在一个实施例中,步骤308包括:从可回收内存页中选取回收数量的、未被前台应用依赖的内存页进行回收。

电子设备可进一步剔除被前台应用依赖的内存页,从未被前台应用依赖的可回收内存页中选取该回收数量的内存页,并对选取的内存页进行回收。其中,该回收数量可不超过未被前台应用依赖的内存页的数量。通过从未被前台应用依赖的内存页中选取该回收数量的内存页进行回收,可防止被前台应用依赖的内存页被回收而对前台应用造成影响。

在一个实施例中,在步骤306之前,还包括:获取与待处理应用对应的回收比例与二次启动时长之间的对应关系;步骤306包括:根据可回收内存页、依赖比例和回收比例与二次启动时长之间的对应关系确定内存页的回收数量。

其中,二次启动时长是指待处理应用占用的可回收内存页被回收对应的回收比例后,再次启动时所花费的时长。电子设备可针对每个应用,设置相应的回收比例与二次启动时长之间的对应关系。该对应关系表示该应用所占内存中,回收不同比例的可回收内存后,对应的二次启动时长。可选地,该对应关系可为相应的回收比例与二次启动时长之间的对照表,或者回收比例曲线。该曲线为不同的回收比例下对应的二次启动时长。根据该对应关系,参照不同的二次启动时长来选取合适的回收比例,作为对该应用占用的可回收内存页的回收比例。

可选地,电子设备可设置对应的启动时长阈值,将二次启动时长达到该启动时长阈值时,对应的比例作为对可回收内存页的参考比例。启动时长阈值可为预设的经验数值,不同应用对应的启动时长阈值可不一定相同,比如可根据对应应用的正常启动时长来确定对应的启动时长阈值,将正常启动时长的1.5倍或2倍的时长作为该启动时长阈值。参考比例表示对内存页回收比例的参考。根据确定的参考比例,再结合依赖比例以及可回收内存页的总数,确定对可回收内存页的回收数量。

在一个实施例中,不同的应用类型的应用,其回收比例与二次启动时长之间的对应关系也不一定相同。该应用类型为根据对内存回收后,对待处理应用的运行影响而设置的类型。应用类型包括无关类、线性类以及非线性类。无关类表示对待处理应用的可回收内存回收后,无论回收多少,均对对应的应用并无显著影响。线性类表示随着对可回收内存的回收比例的增多,对应的应用的二次启动时长也随之增加,其中该二次启动时长与回收比例之间呈线性或接近线性增长的关系。非线性类表示既非无关类也非线性类的其它类型。其中,无显著影响表示不同回收比例对应的二次启动时长相比正常启动时长的超出比例均小于预设的比例范围。接近线性表示不同回收比例按照对应接近的斜率拟合出的二次启动时长,与对应回收比例下的二次启动时长之间的误差不超过预设范围内的误差。

举例来说,如图4a、4b至4c所示,分别为一个实施例中无关类、线性类和非线性类的应用的回收比例曲线。其中,该回收比例曲线中的横坐标表示回收比例,纵坐标表示处于对应回收比例下的二次启动时长。其中,无关类的回收比例曲线反映出了对应应用在可回收内存页在按不同的回收比例进行回收后,对应的二次启动时长没有变化或者变化很小。线性类的回收比例曲线在不同的回收比例下,对应的斜率没有变化或者变化很小,而非线性类的回收比例曲线则有的地方斜率较大,有的地方斜率相对较小。针对非线性类的应用,可选取最小斜率对应的回收比例,作为对可回收内存页的回收比例。

电子设备针对不同的应用,按照不同的回收比例回收内存后对应的二次启动时长,设置了该应用所属的应用类型,并设置与该应用类型对应的参考比例。根据该可回收内存页、依赖比例和参考比例确定对应的回收数量。进一步地,可根据该参考比例和依赖比例,确定对待处理应用占用的可回收内存页的回收比例,进而可将确定的回收比例与可回收内存页的总数相乘,计算的乘积作为回收数量。

通过按照该二次启动时长来确定回收数量,进一步保持了对待处理应用内存的回收与运行之间的平衡性。

在一个实施例中,步骤308包括:从可回收内存页中按照内存页序号等间隔选取回收数量的内存页进行回收。

可选地,电子设备可按照该回收数量,从可回收内存页中随机进行回收,或者从可回收内存页中按照内存页序号等间隔选取回收数量的内存页进行回收。其中,内存页序号为电子设备对内存页所设置的编号,可按照1、2、3等进行顺序编号。举例来说,当回收比例为33%时,所确定的均匀的回收间隔为每间隔2个内存页进行回收,比如可回收内存页为内存页1至内存页100,则可依次回收内存页1、内存页4、内存页7、内存页10…内存页97、内存页100,实现对33%的可回收内存页的回收。通过按照均匀间隔来进行回收,从而保证每一段连续的内存都不会被全部回收,使得应用重新打开时更稳定。

在一个实施例中,步骤302包括:查询待处理应用所占用的内存的所有内存页;从所有内存页中获取可回收内存页。

可选地,电子设备可实时记录不同的应用所占用内存的内存页,并针对该每个被占用的内存页,进一步实时记录其是否可被回收。比如,当存在某一内存页中的数据正在被其它应用或者该待处理应用所使用时,则判定该内存页为不可回收的内存页,当记录到被占用的内存页中的数据处于无应用使用状态,或者处于该无应用使用状态的持续时长超过预设时长时,则判定该内存页为可回收内存页。

针对待处理应用,可从预先记录的信息中查询其所占用所有的内存页,并根据所记录的每个内存页的使用状态,判定其是否为可回收内存页,然后获取所有的可回收内存页。

在一个实施例中,查询待处理应用所占用的内存的所有内存页,包括:遍历待处理应用的内存映射文件;通过内存映射文件查询待处理应用占用的所有内存页。

内存映射文件(memory-mappedfiles)是由一个文件到一块内存的映射。电子设备针对该待处理应用建立了对应的内存映射文件,该内存映射文件中设置了对应的应用所占用的内存页,通过遍历该待处理应用对应的内存映射文件,并从每个遍历到的内存映射文件中读取该待处理应用占用的内存页,从而可获取到该待处理应用所占用的所有的内存页,提高了对待处理应用占用的内存页的查询效率和查询的全面性。

在一个实施例中,从所有内存页中获取可回收内存页,包括:从所有内存页中剔除携带占用标记的内存页;从剔除后的内存页中获取可回收内存页。

其中,针对查询出的被待处理应用所占用的所有的内存页,电子设备可检测每个查询出的内存页是否携带有占用标记,或者是否被多个应用所占用。其中,占用标记表示对应的内存页中存储的数据正处于对待处理应用所使用,或者是其中的数据是待处理应用在保持正常运行的过程中,不可缺少的数据,当该数据被删除后,待处理应用要么无法正常运行,或者需要反复占用新的内存页来存放对应的数据,针对检测出的这类数据,电子设备可对存储该类数据的内存页而设置占用标记,以表示对应的内存页不能回收。

被待处理应用占用的内存页中,其中存储的数据还可能被其它应用所使用,即有多个应用均在使用该内存页中的数据,针对该类内存页,也可将其设置占用标记,使电子设备同样将其剔除,以表示不从该类内存页中进行回收。

针对剔除后的内存页,保留下来的内存页即为可回收内存页,电子设备可从该内存页中进行内存回收。

在一个实施例中,电子设备可调用如图2中所示的资源优先级和限制管理模块222来遍历待处理应用的内存映射文件;通过内存映射文件查询待处理应用占用的所有内存页,并通过该资源优先级和限制管理模块222检测每个内存页是否为可回收内存页,对于不可回收内存页设置对应的占用标记,同时记录每个内存页是否还多个应用所占用,从查询出的所有内存页中剔除携带占用标记和/或被多个应用占用的内存页;从剔除后的内存页中获取可回收内存页。

在一个实施例中,上述方法还包括:当待处理应用与前台应用之间存在通信机制或同步机制时,判定待处理应用被前台应用依赖。

在一个实施例中,当待处理应用与前台应用之间存在socket通信、binder通信、内存共享或锁等待时,判定后台进程与前台应用之间存在通信机制。

可通过以下任意一种或几种方式检测是否存在与前台应用具有通信机制的后台进程:

(1)检测是否存在与前台应用具有socket和/或binder通信的后台进程;

(2)检测是否存在与前台应用之间进行内存共享的后台进程;

(3)检测是否存在前台应用等待在锁资源上的后台进程。

电子设备可在binder驱动中设置对前台应用和后台进程之间是否存在binder通信的检测机制,并调用在binder驱动中设置的检测机制,以检测出与前台应用存在binder通信的后台进程,将检测出的后台进程判定为被前台应用依赖的后台进程。

在一个实施例中,电子设备可检测各个锁资源,锁资源包括线程锁,文件句柄,信号等。针对每个锁资源,可检测是否发生锁等待,即锁资源等待。当检测到产生锁等待时,可进一步检测该发生等待的行为是否发生在前台应用上。若是,则遍历等待在该锁资源上面的所有后台进程,将检测到的等待在该锁资源上的后台进程均判定为被前台应用依赖的后台进程。

在一个实施例中,电子设备可在操作系统的内核空间中设置锁资源监控模块和优先级调整模块,将锁资源监控模块内嵌到内核原生的等待接口当中。通过该锁资源监控模块,检测线程锁,文件句柄,信号等锁各种锁资源,是否发生等待,发生等待的行为是否是发生在前台应用上面,如果是发生在前台任务上面,则将检测到的消息发送至优先级调整模块。通过该优先级调整遍历等待在该锁资源上面的所有后台线程,将这些后台进程判定为被前台应用依赖的后台进程。

在一个实施例中,当后台进程与前台应用之间存在同步机制时,判定具有同步机制的待处理应用为被前台应用依赖的后台进程。

电子设备还可通过调用futex系统调用检测后台进程集合中,是否存在与前台应用具有同步机制的后台进程,将具有同步机制的后台进程判定为被前台应用依赖的后台进程。

并发程序设计中,各进程对公共变量的访问必须加以制约,这种制约称为同步。在操作系统中,用户态(usermode)的同步机制可通过调用futex系统调用实现。其中,用户态指非特权状态。同步机制包括信号量、互斥锁等。当通过futex系统调用检测到与前台应用存在任意一种同步机制的后台进程时,可将检测到的后台进程判定为被前台应用依赖的后台进程。

通过对前台应用和后台进程之间的通信机制和/或同步机制的检测,将检测出的与前台应用具有通信机制和/或同步机制的后台进程判定为被前台应用依赖的后台进程,可提高对被前台应用依赖的待处理应用的检测的效率。

在一个实施例中,如图5所示,提供了另一种内存处理方法,该方法包括:

步骤502,遍历待处理应用的内存映射文件;通过内存映射文件查询待处理应用占用的所有内存页。

在一个实施例中,电子设备可在检测到系统的内存使用率超过预设比例时,或者接收到用户操作而触发的内存回收指令时,触发对内存回收机制,并从所有运行中的应用中确定需要进行内存回收的应用,所确定的应用即为该待处理应用。

在一个实施例中,电子设备可在检测到某一应用从前台切换到后台后,且通过平台冻结管理模块224将该应用设置成进程深度冻结模式后,触发对该应用的内存回收机制。

电子设备可通过上述的资源优先级和限制管理模块222来遍历该待处理应用的内存映射文件,从遍历到的每个内存映射文件中查询被待处理应用占用的内存页,从而可查询出该待处理应用占用的所有内存页。

步骤504,从所有内存页中剔除携带占用标记的内存页;从剔除后的内存页中获取可回收内存页。

针对每个查询出的内存页,可进行二次遍历,二次遍历用于检测每个查询出的内存页是否为可回收内存页,当检测出携带有占用标记的内存页,则判定该内存页为不可回收内存页,并将该内存页进行剔除,经二次遍历后得到的内存页即为可回收内存页,电子设备可从该所有可回收内存页中选取内存页进行回收。通过二次遍历,可提高对可回收内存页检测的全面性。

步骤506,检测每个可回收内存页中存储的数据是否被前台应用依赖;根据检测结果确定待处理应用被前台应用依赖的依赖比例。

其中,当待处理应用与前台应用之间存在通信机制或同步机制时,判定待处理应用被前台应用依赖,并检测该前台应用具体依赖的是哪些可回收内存页中存储的数据,根据该检测结果确定依赖比例。检测结果包括内存页未被前台应用依赖或被前台应用依赖。依赖比例可为被前台应用所依赖的可回收内存页的依赖总数与客户收内存页的总数之比。当待处理应用不被前台应用依赖时,则该依赖比例为0。

针对检测出的被应用依赖的内存页,可为该内存页设置对应的依赖标识,使得根据该依赖标识可获知对应内存页被哪些具体的应用所依赖。进而根据每个可回收内存页是否被设置对应的依赖标识,以及该依赖标识是否是表示被前台应用所依赖,从而可计算出待处理应用被前台应用依赖的依赖比例。在一个实施例中,可根据该预设时间段来确定对应依赖标识的有效性,当处于对应预设时间段之内时,保持所设置的依赖标识有效,处于预设时间段之外时,可取消所设置的依赖标识。通过设置依赖标识,使得可提高计算出依赖比例的效率。

步骤508,获取与待处理应用对应的回收比例与二次启动时长之间的对应关系。

二次启动时长是指待处理应用占用的可回收内存页被回收对应的回收比例后,再次启动时所花费的时长。对应关系可为相应的回收比例与二次启动时长之间的对照表,或者回收比例曲线。该曲线为不同的回收比例下对应的二次启动时长,该曲线可为如图4a至4c中所示的曲线。该对应关系可根据超过预设次数的检测下,记录到的不同回收比例下,对应的二次启动时长而确定的。比如,可通过100次检测,每次可检测不同回收比例下,相应的二次启动时长,将相同比例下的二次启动时长的平均值,作为该对应关系中的回收比例所对应的二次启动时长。

步骤510,根据可回收内存页、依赖比例和回收比例与二次启动时长之间的对应关系确定内存页的回收数量。

电子设备可根据回收比例与二次启动时长之间的对应关系,选取一个合适的比例作为对应的参考比例,进而根据参考比例与该依赖比例确定对可回收内存页的回收比例,进而将确定的回收比例与可回收内存页总数的乘积作为回收数量。

在一个实施例中,根据该参考比例和依赖比例确定对可回收内存页的回收比例的可有多种,比如,记参考比例为a,依赖比例为b,对可回收内存页的回收比例为c。当a与b之和不大于1时,可直接取c=a;当a与b之和不大于1时,可直接取c=1-b。既提高了对回收比例计算的效率,有使得在保持后续回收的内存页均为不被前台应用依赖的内存页,且对待处理应用的影响较小的同时,回收尽量较多的内存页。

步骤512,从可回收内存页中选取回收数量的、未被前台应用依赖的内存页进行回收。

在一个实施例中,可从未被前台应用依赖的内存页中按照内存页序号等间隔选取回收数量的内存页进行回收。

通过从未被前台应用依赖的内存页进行回收,可进一步降低对前台应用的影响。

应该理解的是,虽然图3和图5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3和图5中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图6所示,提供了一种内存处理装置,该装置包括:内存页获取模块602、依赖确定模块604和内存回收模块606。其中,内存页获取模块602用于获取待处理应用所占用的可回收内存页;依赖确定模块604用于获取待处理应用被前台应用依赖的依赖比例;内存回收模块606用于根据可回收内存页和依赖比例确定对可回收内存页的回收数量;从可回收内存页中选取回收数量的内存页进行回收。

在一个实施例中,内存页获取模块602还用于查询待处理应用所占用的内存的所有内存页;从所有内存页中剔除携带占用标记的内存页;从剔除后的内存页中获取可回收内存页。

在一个实施例中,内存页获取模块602还用于遍历待处理应用的内存映射文件;通过内存映射文件查询待处理应用占用的所有内存页。

在一个实施例中,依赖确定模块604还用于检测每个可回收内存页中存储的数据是否被前台应用依赖;根据检测结果确定待处理应用被前台应用依赖的依赖比例;检测结果包括内存页未被前台应用依赖或被前台应用依赖。

内存回收模块606还用于从可回收内存页中选取回收数量的、未被前台应用依赖的内存页进行回收。

在一个实施例中,内存回收模块606还用于获取与待处理应用对应的回收比例与二次启动时长之间的对应关系;二次启动时长是指待处理应用占用的可回收内存页被回收对应的回收比例后,再次启动时所花费的时长;根据可回收内存页、依赖比例和回收比例与二次启动时长之间的对应关系确定内存页的回收数量。

在一个实施例中,内存回收模块606还用于从所述可回收内存页中按照内存页序号等间隔选取所述回收数量的内存页进行回收。

在一个实施例中,依赖确定模块604还用于当待处理应用与前台应用之间存在通信机制或同步机制时,判定待处理应用被前台应用依赖。

上述的内存处理装置,通过获取待处理应用所占用的可回收内存页以及待处理应用被前台应用依赖的依赖比例,进而根据该依赖比例和可回收内存页确定回收数量,并从可回收内存页中选取回收数量的内存页进行回收,由于回收的对象是可回收内存页,且并非一定是对所有可回收内存页均进行回收,回收数量是根据待处理应用被前台应用依赖的依赖比例而确定,在降低回收了待处理应用占据的内存对前台应用的影响的同时,也降低了对待处理应用的运行影响,且回收的内存页可释放出来供其它应用使用,又提高了系统的综合处理效率,通过从可回收内存页中选取所确定的回收数量的内存页进行回收,保证在整个系统内存变大的情况下,对每个应用的负面影响最小,保持了对待处理应用内存的回收与运行之间的平衡性。

上述内存处理装置中各个模块的划分仅用于举例说明,在其他实施例中,可将内存处理装置按照需要划分为不同的模块,以完成上述内存处理装置的全部或部分功能。

关于内存处理装置的具体限定可以参见上文中对于内存处理方法的限定,在此不再赘述。上述内存处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于电子设备中的处理器中,也可以以软件形式存储于电子设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

本申请实施例中提供的内存处理装置中的各个模块的实现可为计算机程序的形式。该计算机程序可在终端或服务器等电子设备上运行。该计算机程序构成的程序模块可存储在电子设备的存储器上。该计算机程序被处理器执行时,实现本申请实施例中所描述的内存处理方法的步骤。

在一个实施例中,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各实施例所提供的内存处理方法的步骤。

在一个实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序对处理器执行时,实现本申请各实施例中所描述的内存处理方法的步骤。

在一个实施例中,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行本申请各实施例中所描述的内存处理方法。

本申请实施例还提供了一种计算机设备。如图7所示,为了便于说明,仅示出了与本申请实施例相关的部分,具体技术细节未揭示的,请参照本申请实施例方法部分。该计算机设备可以为包括手机、平板电脑、pda(personaldigitalassistant,个人数字助理)、pos(pointofsales,销售终端)、车载电脑、穿戴式设备等任意终端设备,以计算机设备为手机为例:

图7为与本申请实施例提供的计算机设备相关的手机的部分结构的框图。参考图7,手机包括:射频(radiofrequency,rf)电路710、存储器720、输入单元730、显示单元740、传感器750、音频电路760、无线保真(wirelessfidelity,wifi)模块770、处理器780、以及电源790等部件。本领域技术人员可以理解,图7所示的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

其中,rf电路710可用于收发信息或通话过程中,信号的接收和发送,可将基站的下行信息接收后,给处理器780处理;也可以将上行的数据发送给基站。通常,rf电路包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(lownoiseamplifier,lna)、双工器等。此外,rf电路710还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(globalsystemofmobilecommunication,gsm)、通用分组无线服务(generalpacketradioservice,gprs)、码分多址(codedivisionmultipleaccess,cdma)、宽带码分多址(widebandcodedivisionmultipleaccess,wcdma)、长期演进(longtermevolution,lte))、电子邮件、短消息服务(shortmessagingservice,sms)等。

存储器720可用于存储软件程序以及模块,处理器780通过运行存储在存储器720的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器720可主要包括程序存储区和数据存储区,其中,程序存储区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能的应用程序、图像播放功能的应用程序等)等;数据存储区可存储根据手机的使用所创建的数据(比如音频数据、通讯录等)等。此外,存储器720可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

输入单元730可用于接收输入的数字或字符信息,以及产生与手机700的用户设置以及功能控制有关的键信号输入。具体地,输入单元730可包括触控面板731以及其他输入设备732。触控面板731,也可称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板731上或在触控面板731附近的操作),并根据预先设定的程式驱动相应的连接装置。在一个实施例中,触控面板731可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器780,并能接收处理器780发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板731。除了触控面板731,输入单元730还可以包括其他输入设备732。具体地,其他输入设备732可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)等中的一种或多种。

显示单元740可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元740可包括显示面板741。在一个实施例中,可以采用液晶显示器(liquidcrystaldisplay,lcd)、有机发光二极管(organiclight-emittingdiode,oled)等形式来配置显示面板741。在一个实施例中,触控面板731可覆盖显示面板741,当触控面板731检测到在其上或附近的触摸操作后,传送给处理器780以确定触摸事件的类型,随后处理器780根据触摸事件的类型在显示面板741上提供相应的视觉输出。虽然在图7中,触控面板731与显示面板741是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板731与显示面板741集成而实现手机的输入和输出功能。

手机700还可包括至少一种传感器750,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板741的亮度,接近传感器可在手机移动到耳边时,关闭显示面板741和/或背光。运动传感器可包括加速度传感器,通过加速度传感器可检测各个方向上加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换)、振动识别相关功能(比如计步器、敲击)等;此外,手机还可配置陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器等。

音频电路760、扬声器761和传声器762可提供用户与手机之间的音频接口。音频电路760可将接收到的音频数据转换后的电信号,传输到扬声器761,由扬声器761转换为声音信号输出;另一方面,传声器762将收集的声音信号转换为电信号,由音频电路760接收后转换为音频数据,再将音频数据输出处理器780处理后,经rf电路710可以发送给另一手机,或者将音频数据输出至存储器720以便后续处理。

wifi属于短距离无线传输技术,手机通过wifi模块770可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图7示出了wifi模块770,但是可以理解的是,其并不属于手机700的必须构成,可以根据需要而省略。

处理器780是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器720内的软件程序和/或模块,以及调用存储在存储器720内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。在一个实施例中,处理器780可包括一个或多个处理单元。在一个实施例中,处理器780可集成应用处理器和调制解调器,其中,应用处理器主要处理操作系统、用户界面和应用程序等;调制解调器主要处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器780中。比如,该处理器780可集成应用处理器和基带处理器,基带处理器与和其它外围芯片等可组成调制解调器。手机700还包括给各个部件供电的电源790(比如电池),优选的,电源可以通过电源管理系统与处理器780逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。

在一个实施例中,手机700还可以包括摄像头、蓝牙模块等。

在本申请实施例中,该手机所包括的处理器执行存储在存储器上的计算机程序时实现上述所描述的内存处理方法。

本申请所使用的对存储器、存储、数据库或其它介质的任何引用可包括非易失性和/或易失性存储器。合适的非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram),它用作外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)。

以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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