内存处理方法及装置、计算机装置及计算机可读存储介质与流程

文档序号:14777994发布日期:2018-06-26 07:58阅读:162来源:国知局

本发明涉及计算机技术领域,具体涉及一种内存处理方法及装置、计算机装置及计算机可读存储介质。



背景技术:

在系统运行过程中,保证充沛的可用内存空间对于保持系统的高性能具有重要作用,而增加可用内存空间的方式通常包括内存回收和碎片整理。通过内存回收可以回收物理页,产生大量空闲内存,但是,很多情况下,内存中的可用内存总量小于空闲内存总量。这是因为,通常频繁地请求和释放不同大小的一组连续物理页,必然导致在已分配物理页的物理块内分散了许多小块的空闲物理页,由此带来的问题是,即使有足够的空闲物理页,但可能仍然难以分配一个大块的连续物理页,可以理解为此时的可用内存空间仍然较少。通常将一个系统中所有不可用的空闲内存称作内存碎片,空闲内存无法使用的原因通常在于空闲内存以小而不连续方式出现在不同的位置。可见,为了增加内存中的可用内存量,需要对内存进行碎片整理。

现有的碎片整理主要是在决定哪些对象需要移动到哪些地址上,这样,通常就至少需要有待移动对象所占内存大小的存储空间来用于碎片整理,在碎片整理过程中,一般来说,可用内存空间越大,碎片整理的效率越高。由于碎片整理容易对正在运行的上层业务造成较大影响,并且较小的可用内存空间会导致碎片整理的耗时过长,因此应在碎片整理前尽量增加可用内存空间,以提高碎片整理的效率。为此,现有技术通常在进行内存回收后,进行碎片整理。

由于现有的内存回收技术通常是通过杀进程或杀应用的方式来释放内存,虽然能够释放内存,但是会影响用户体验。为了尽量减少这种情况的发生,现有的内存回收通常发生在可用内存空间很小的情况下,在内存回收之后才进行碎片整理,这使得碎片整理难以及时起到增加可用内存空间的作用。



技术实现要素:

本发明实施例提供了一种内存处理方法及装置、计算机装置及计算机可读存储介质,用于解决现有技术难以充分利用碎片整理增加可用内存的问题。

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

对所述终端的内存中的多个物理页进行若干次数的回收尝试;

当所述回收尝试释放的内存量超过释放阈值时,对所述内存进行碎片整理;

对所述物理页进行一次所述回收尝试包括:

判断所述物理页的活跃度是否高于回收标准,所述物理页的活跃度用于标记所述物理页的活动程度,所述物理页的活跃度的值与所述物理页的活动程度正相关;

若是,则降低所述物理页的活跃度;

若否,则回收所述物理页。

结合第一方面,在第一方面的第一种可能的实现方式中,对内存中的多个物理页进行若干次数的回收尝试之前,所述方法还包括:

计算所述内存的当前碎片率;

判断所述当前碎片率是否达到预设碎片率;

若达到,则触发对所述终端的内存中的多个物理页进行若干次数的回收尝试的步骤。

结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述对所述终端的内存中的多个物理页进行若干次数的回收尝试包括:

根据所述当前碎片率确定所述回收尝试的目标次数,所述目标次数与所述当前碎片率正相关;

对所述终端的内存中的多个物理页进行目标次数的回收尝试。

结合第一方面、第一方面的第一种可能的实现方式和第一方面的第二种可能的实现方式中任意一种可能的实现方式,在第一方面的第三种可能的实现方式中,当所述回收尝试释放的内存量超过释放阈值时,在对所述内存进行碎片整理之前,所述方法还包括:

判断所述终端是否处于睡眠状态;

若是,则触发对所述内存进行碎片整理的步骤。

本发明第二方面提供一种内存处理装置,包括:

回收模块,用于对所述终端的内存中的多个物理页进行若干次数的回收尝试;

整理模块,用于当所述回收模块释放的内存量超过释放阈值时,对所述内存进行碎片整理;

所述回收模块包括回收单元,所述回收单元用于对所述物理页进行一次所述回收尝试;

所述回收单元包括:

判断子单元,用于判断所述物理页的活跃度是否高于回收标准,所述物理页的活跃度用于标记所述物理页的活动程度,所述物理页的活跃度的值与所述物理页的活动程度正相关;

降低子单元,用于当所述判断子单元判定所述物理页的活跃度高于回收标准时,降低所述物理页的活跃度;

回收子单元,用于当所述判断子单元判定所述物理页的活跃度不高于回收标准时,回收所述物理页。

结合第二方面,在第二方面的第一种可能的实现方式中,所述内存处理装置还包括:

计算模块,用于计算所述内存的当前碎片率;

第一判断模块,用于判断所述当前碎片率是否达到预设碎片率;

触发模块,用于当所述第一判断模块判定所述当前碎片率达到预设碎片率时,触发对所述终端的内存中的多个物理页进行若干次数的回收尝试的步骤。

结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述回收模块还包括:

确定单元,用于根据所述当前碎片率确定所述回收尝试的目标次数,所述目标次数与所述当前碎片率正相关。

结合第二方面、第二方面的第一种可能的实现方式和第二方面的第二种可能的实现方式中任意一种可能的实现方式,在第二方面的第三种可能的实现方式中,所述内存处理装置还包括:

第二判断模块,用于当所述回收模块释放的内存量超过释放阈值时,判断所述终端是否处于睡眠状态;

第二触发模块,用于当所述第二判断模块判定所述终端处于睡眠状态时,触发对所述内存进行碎片整理的步骤。

本发明实施例的第三方面提供了一种计算机装置,包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现上述第一方面或第一方面的任意一种可能的实现方式。

本发明实施例的第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面或第一方面的任意一种可能的实现方式。

从以上技术方案可以看出,本发明实施例具有以下优点:

本发明可以通过对终端的内存中的多个物理页进行目标次数的回收尝试,来增大终端的可用内存空间,当回收尝试释放的内存量超过释放阈值时,可以对内存进行碎片整理,以提高碎片整理的效率。和现有技术相比,本发明提供的内存回收方法只对活跃度较低的物理页进行回收,而不是采用杀应用或杀进程的方式,因此可以在可用内存空间过低之前进行,为了碎片整理释放大量内存空间,从而实现了在可用内存空间过低之前进行较高效率的碎片整理,使得碎片整理充分发挥增加可用内存空间的作用,有利于维持系统的高性能。

附图说明

图1为本发明内存处理方法一个实施例示意图;

图2为本发明对物理页进行一次回收尝试的方法一个实施例示意图;

图3为本发明内存处理方法另一个实施例示意图;

图4为本发明内存处理方法另一个实施例示意图;

图5为本发明内存处理装置一个实施例示意图;

图6为本发明内存处理装置另一个实施例示意图;

图7为本发明内存回收方法一个实施例示意图;

图8为本发明内存回收方法另一个实施例示意图;

图9为本发明内存回收方法另一个实施例示意图;

图10为本发明内存回收方法另一个实施例示意图;

图11为本发明内存回收装置另一个实施例示意图;

图12为本发明内存回收装置另一个实施例示意图;

图13为本发明计算机装置一个实施例示意图。

具体实施方式

本发明实施例提供了一种内存处理方法及装置、计算机装置及计算机可读存储介质,用于提高碎片整理效率。

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

请参阅图1,本发明内存回收方法一个实施例包括:

101、对终端的内存中的多个物理页进行若干次数的回收尝试;

终端的物理内存,简称为终端的内存,主要作用是在终端运行时为操作系统和各种程序提供临时储存。内存通常被划分为若干份,每一份被记录为一个物理页,而一个应用程序通常占用多个物理页。本发明可以对终端的内存中的多个物理页进行若干次数的回收尝试,比如进行一次、两次或两次以上的回收尝试。

回收尝试区别于强制回收,回收尝试是指优先对价值较低的物理页进行回收,释放相应的内存,以减少内存回收对正在运行的应用或进程的影响。请参阅图2,本发明实施例中,对物理页进行一次回收尝试的方法可以包括:

步骤1、判断物理页的活跃度是否高于回收标准,若是,则执行步骤2,若否,则执行步骤3;

物理页的价值高低通常以物理页的活跃程度高低来评价,物理页的活跃程度越高,系统通常认为该物理页存储数据的价值越高,或者说该物理页的价值越高。为了比较物理页的活跃程度,可以采用物理页的活跃度来标记物理页的活动程度,物理页的活跃度的值与物理页的活动程度正相关。这里采用的物理页的活跃度的可选值通常不少于两个,并且活跃度的值可以为数值,此时可以按照数值大小确定活跃度的值的大小,但是,活跃度的值不仅限为数值,只要根据预设的比较标准能够判定不同值的高低即可,比如用于表示物理页被访问的情况的标志位,物理页被访问时,其标志位代表的活跃度被提高。

获取到物理页之后,可以读取物理页的活跃度,并判断物理页的活跃度是否高于回收标准,若高于,则执行步骤2,若不高于,则执行步骤3。可以理解的是,物理页的活跃度包括至少一个高于回收标准的可选值,同时也包括至少一个不高于回收标准的可选值。

优选的,回收标准可以选用活动状态的物理页的活跃度和非活动状态的物理页的活跃度之间的边界值,也就是说,活跃度高于回收标准的物理页处于活动状态。

步骤2、降低物理页的活跃度;

若判定物理页的活跃度高于回收标准,则可以降低物理页的活跃度。

步骤3、回收物理页。

若判定物理页的活跃度不高于回收标准,则可以回收物理页,释放相应的内存量。

通过步骤1至步骤3,可以优先将终端的内存中活跃度较低的物理页进行回收,保留活跃度较高的物理页,以减小内存回收对正在运行的应用或进程的影响。

102、当回收尝试释放的内存量超过释放阈值时,对内存进行碎片整理。

对终端的内存中的多个物理页进行若干次数的回收尝试的过程中,释放的内存量会不断增加,当回收尝试释放的内存量超过释放阈值时,可以对内存进行碎片整理。或者,可以在对物理页完成若干次数的回收尝试之后,判断释放的内存量是否超过释放阈值,若超过,则对内存进行碎片整理,否则不对内存进行碎片整理。已有很多成熟的碎片整理方法,比如Buddy算法,此处不再对碎片整理的过程进行赘述。

内存回收和碎片整理都可用于增加可用内存,其中,碎片整理通常耗时较长,且对前台运行有较明显的影响,因此需要尽量提高碎片整理的效率。碎片整理的效率一般和内存中的空闲内存量有关,因此在碎片整理前通常会先进行内存回收,以提高碎片整理效率。但是现有的内存回收需要通过杀应用或杀进程的方式来实现,因此内存回收的使用受限,通常在内存中的可用内存极低时才会进行,因此使得碎片整理的使用受限,难以充分发挥作用。本发明的内存回收是优先将活跃度较低的物理页进行回收,保留活跃度较高的物理页,对前后台应用的运行影响很小,因此使用的限制较少,和现有的回收相比,可以更加频繁的进行,通过这种内存回收策略来为碎片整理增加空闲内存,能够在提高碎片整理的效率的同时,减少碎片整理的使用限制,能够更加充分的发挥碎片整理的作用。

在实际使用中,优选的,可以进行精细化的回收尝试,比如只针对后台运行的部分应用对应的物理页进行回收尝试,可以将回收尝试对应的应用称作目标应用,确定目标应用之后,可以获取目标应用对应的目标物理页,之后可以对目标物理页进行若干次数的回收尝试,从而避免影响前台应用的运行。

虽然在后台运行的应用可以有很多,但是不同应用具有不同的回收价值,比如,对于占用内存较少的应用,即使对其进行多次回收尝试,释放的内存量仍然较少,对于缓解系统内存压力作用不大,还会增加系统的运算负担,该类应用的回收价值较低。对不同回收价值的应用可以采用不同的回收强度,在本发明实施例中,主要体现在不同的回收尝试次数上,回收价值越高的应用,其回收尝试的次数越大,回收价值越低的应用,其回收尝试的次数越小。

在更加精细化的回收尝试策略里,可以对目标应用的不同进程进行不同强度的回收尝试。目标应用对应的多个进程一般具有不同的回收价值,比如,对于占用内存较少的进程,即使对其进行多次回收尝试,释放的内存量仍然较少,对于缓解系统内存压力作用不大,还会增加系统的运算负担,该类进程的回收价值较低。因此,对不同回收价值的进程可以采用不同的回收强度。

上面对物理页的选择方法以及回收尝试的次数的确定方法提供了一定建议,下面对回收尝试的触发条件进行说明。在实际使用中,可以设置一些触发条件来触发终端的系统按照图1和图2对应的实施例对物理页进行回收尝试,比如,可以采用内存回收的触发条件来触发终端的系统按照图1和图2对应的实施例对物理页进行回收尝试,内存回收的触发条件主要考虑了空闲内存大小、后台是否存在价值较低的应用或进程等,作为举例,内存回收的触发条件可以包括:空闲内存过少、按照预设时长间隔、应用在后台运行的时长过长等。因此,当终端满足内存回收的触发条件时,可以触发终端的系统按照图1和图2对应的实施例对物理页进行回收尝试,之后,在回收尝试释放的内存量超过释放阈值时,可以对内存进行较高效率的碎片整理,从而进一步增加可用内存。但是内存回收的触发条件仅考虑到空闲内存的大小,随着终端开机运行的时长增加,内存的碎片率通常较高,空闲内存的可用率较低,为此,本发明实施例提供一种内存处理方法,请参阅图3,本发明内存处理方法另一个实施例包括:

301、判断终端是否满足碎片整理的条件,若满足,则执行步骤302,若不满足,则重复执行步骤301;

可以判断终端是否满足碎片整理的条件,若满足,则执行步骤302,若不满足,则重复执行步骤301。碎片整理的条件通常与内存碎片率相关,比如,可以判断终端开机后系统运行时长是否达到预设时长,若达到预设时长,则可以判定终端满足碎片整理的条件,因为内存碎片会随着系统运行时长的增加而增多。很多情况下,当用户认为终端的运行速度较低时,用户希望终端进行碎片整理,因此,也可以判断是否接收到用户下达的碎片整理指令,当接收到用户的碎片整理指令时,可以判定终端满足碎片整理的条件。

302、对终端的内存中的多个物理页进行若干次数的回收尝试;

在判定终端满足碎片整理的条件时,可以对终端的内存中的多个物理页进行若干次数的回收尝试。关于对物理页进行一次回收尝试的过程与图2对应的实施例相同,此处不再赘述。优选的,可以对后台运行的部分应用对应的物理页进行回收。

303、当回收尝试释放的内存量超过释放阈值时,判断终端是否处于睡眠状态,若是,则执行步骤304,若否,则执行步骤305;

对终端的内存中的多个物理页进行若干次数的回收尝试的过程中,释放的内存量会不断增加,当回收尝试释放的内存量超过释放阈值时,可以判断终端是否处于睡眠状态,若是,则执行步骤304,若否,则执行步骤305。或者,可以在对物理页完成若干次数的回收尝试之后,判断释放的内存量是否超过释放阈值,若超过,则判断终端是否处于睡眠状态,否则在本次回收尝试后不进行碎片整理。

304、对内存进行碎片整理;

若判定终端处于睡眠状态,则可以对内存进行碎片整理。若步骤304中采用对终端的内存中的多个物理页进行若干次数的回收尝试的过程中判断回收尝试释放的内存量是否超过释放阈值,那么,可能存在碎片整理与回收尝试并行进行的情况,这样可以在保证较高的碎片整理的效率的前提下尽早开始碎片整理,有利于尽早减少内存的碎片化,增加可用内存。已有很多成熟的碎片整理方法,比如Buddy算法,此处不再对碎片整理的过程进行赘述。

305、执行其他操作。

若判定终端不处于睡眠状态,则可以执行其他操作,比如重新执行步骤303,判断终端是否处于睡眠状态;或者,可以向用户发送是否进行内存整理的选择信息,若接收用户的肯定指令,则执行步骤304,若接收用户端饿否定指令,则重新执行步骤303,直至终端处于睡眠状态为止。

需要说明的是,由于碎片整理的过程容易对正在运行的上层业务造成较大影响,因此,步骤303用于尽量保证用户对终端的使用体验,在实际使用中,也可以不执行此步骤,也就是说,当回收尝试释放的内存量超过释放阈值时,直接步骤304。

本发明提供的实施例能够由与内存的碎片率相关的条件来触发回收尝试,能够弥补现有的仅以内存回收的条件来触发回收尝试时难以及时降低碎片率的缺陷。

碎片率是碎片整理的条件中最为直接条件,能够更加准确的判断当前是否需要进行碎片整理,因此,请参阅图4,本发明内存处理方法另一个实施例包括:

401、计算内存的当前碎片率;

可以计算内存的当前碎片率,定义碎片率的方法有几种,其中最常用的是:碎片率=1-最大的空闲内存块的大小/空闲内存总量,空闲内存块是指连续的可写的物理页组成的内存区域。碎片率是一个介于0和1之间的分数,一个碎片率为1的系统就是指可用内存为0,如果所有空闲内存都在一个内存块中,那么碎片率为0,当所有空闲内存的四分之一在最大的空闲内存块中时,碎片率为75%。

可以实时计算内存的当前碎片率,但是这样频繁的计算会消耗系统资源,因此,可以在预设时刻计算内存的当前碎片率,比如,每天的凌晨3点,或者也可以在终端开机后运行时长超过预设时长时进行计算,或者也可以通过其他方式触发步骤401。

402、判断当前碎片率是否达到预设碎片率,若达到,则执行步骤403,若未达到,则重复执行步骤401;

计算得到当前碎片率之后,可以判断当前碎片率是否达到预设碎片率,若达到,则执行步骤403,若未达到,则重复执行步骤401,需要说明的是,不一定要在判定当前碎片率未达到预设碎片率时便立即重复执行步骤401,比如,可以经过一定时长之后再重复执行步骤401。

403、根据当前碎片率确定进行回收尝试的目标次数;

若判定当前碎片率达到预设碎片率,则说明当前内存的碎片化比较严重,需要进行碎片整理。此时,可以首先根据当前碎片率确定回收尝试的目标次数,目标次数与当前碎片率正相关,也就是说,当前碎片率越高,则回收尝试的目标次数越大,回收强度越高,当前碎片率越低,则回收尝试的目标次数越小,回收强度越低。

404、对终端的内存中的多个物理页进行目标次数的回收尝试;

确定目标次数之后,可以对终端的内存中的多个物理页进行目标次数的回收尝试。目标次数越大,经过目标次数的回收尝试能够产生更多的空闲内存,以满足大量碎片整理对空闲内存的需求。

405、当回收尝试释放的内存量超过释放阈值时,判断终端是否处于睡眠状态,若是,则执行步骤406,若否,则执行步骤407;

对终端的内存中的多个物理页进行目标次数的回收尝试的过程中,释放的内存量会不断增加,当回收尝试释放的内存量超过释放阈值时,可以判断终端是否处于睡眠状态,若是,则执行步骤406,若否,则执行步骤407。或者,可以在对物理页完成目标次数的回收尝试之后,判断释放的内存量是否超过释放阈值,若超过,则判断终端是否处于睡眠状态,否则在本次回收尝试后不进行碎片整理。

406、对内存进行碎片整理;

若判定终端处于睡眠状态,则可以对内存进行碎片整理。若步骤405中采用对终端的内存中的多个物理页进行目标次数的回收尝试的过程中判断回收尝试释放的内存量是否超过释放阈值,那么,可能存在碎片整理与回收尝试并行进行的情况,这样可以在保证较高的碎片整理的效率的前提下尽早开始碎片整理,有利于尽早减少内存的碎片化,增加可用内存。已有很多成熟的碎片整理方法,比如Buddy算法,此处不再对碎片整理的过程进行赘述。

407、执行其他操作。

若判定终端不处于睡眠状态,则可以执行其他操作,比如重新执行步骤405,判断终端是否处于睡眠状态;或者,可以向用户发送是否进行内存整理的选择信息,若接收用户的肯定指令,则执行步骤406,若接收用户端饿否定指令,则重新执行步骤405,直至终端处于睡眠状态为止。

需要说明的是,由于碎片整理的过程容易对正在运行的上层业务造成较大影响,因此,步骤405用于尽量保证用户对终端的使用体验,在实际使用中,也可以不执行此步骤,也就是说,当回收尝试释放的内存量超过释放阈值时,直接步骤406。

上面对本发明实施例中的内存处理方法进行了描述,下面对本发明实施例中的内存处理装置进行描述。

请参阅图5,本发明实施例中内存回收装置5的一个实施例包括:

回收模块51,用于对终端的内存中的多个物理页进行若干次数的回收尝试;

整理模块52,用于当回收模块51释放的内存量超过释放阈值时,对内存进行碎片整理;

回收模块51包括回收单元511,回收单元511用于对物理页进行一次回收尝试;

回收单元511包括:

判断子单元5111,用于判断物理页的活跃度是否高于回收标准,物理页的活跃度用于标记物理页的活动程度,物理页的活跃度的值与物理页的活动程度正相关;

降低子单元5112,用于当判断子单元5111判定物理页的活跃度高于回收标准时,降低物理页的活跃度;

回收子单元5113,用于当判断子单元5111判定物理页的活跃度不高于回收标准时,回收物理页。

请参阅图6,本发明实施例中内存回收装置6的一个实施例包括:

计算模块61,用于计算内存的当前碎片率。

第一判断模块62,用于判断当前碎片率是否达到预设碎片率。

回收模块63,用于当第一判断模块62判定当前碎片率达到预设碎片率时,对终端的内存中的多个物理页进行若干次数的回收尝试,回收模块63包括:

确定单元631,用于根据当前碎片率确定回收尝试的目标次数,目标次数与当前碎片率正相关;

回收单元632,用于对终端的内存中的多个物理页进行一次的回收尝试,回收单元632的具体结构与图5对应的实施例中的回收单元511相同,此处不再赘述。

第二判断模块64,用于当回收模块63释放的内存量超过释放阈值时,判断终端是否处于睡眠状态。

整理模块65,用于当回收模块63释放的内存量超过释放阈值、且第二判断模块64判定终端处于睡眠状态时,对内存进行碎片整理。

从上述实施例中不难发现,本发明的内存回收方法是基于对终端的内存中的多个物理页进行的回收尝试,下面简称为对物理页的回收,下面对几种可能的物理页的回收方法及装置进行详细说明。

由于用户在使用终端应用的过程中,经常会频繁更换应用,比如利用视频播放软件观看视频的过程中,可能需要频繁的将聊天应用切换到前台,为了减少用户的等待时长,操作系统通常会为转入后台的应用进程保留其占用的内存。但是,当后台应用过多,内存被大量占用而得不到释放时,会因为内存分配不足导致操作系统运行出现异常。

物理内存通常被划分成若干份,每一份被记录为一个物理页。一个应用进程通常占用多个物理页,操作系统回收应用进程占用的内存,实际上是对应用进程占用的多个物理页进行回收。关于内存回收,操作系统需要在保证应用的数据不丢失的前提下做回收动作。页面回收的方式一般有页回写、页交换和页丢弃三种方式:1)页回写,如果一个物理页的后备存储器是一个块设备(例如文件映射),则可以将内存直接同步到块设备,腾出的页面可以被重用;2)页交换,如果物理页没有后备存储器(例如匿名映射),则可以将存储的数据交换到特定swap分区(系统通常会在磁盘上开辟一块存储空间作内存的缓存,一般将这一部分存储空间称作swap区域),再次被访问时再交换回内存;3)页丢弃,如果物理页的后备存储器是一个文件,但文件内容在内存不能被修改(例如可执行文件),那么在当前不需要的情况下可直接丢弃。

有了以上的页面回收方式,似乎所有的内存都可以释放,从而可以避免内存分配不足的情况。但是这会增加系统磁盘读写的次数,并且,重新加载会增加用户的等待时长,降低用户体验。因此,操作系统通常会优先对价值较低的物理页存储数据进行回收,释放相应的内存,以保证内存供应的情况下,尽量减少系统磁盘读写的次数以及用户的等待时长。

判断物理页存储数据的价值高低可以有很多角度,现有技术通常以物理页的活跃程度(或称活跃度)高低来评价物理页存储数据的价值高低,物理页的活跃度越高,系统通常认为该物理页存储数据的价值越高。为了比较物理页的活跃度,现有技术引入近期最少使用链表LRU,是按照近期的使用情况排列的,最少使用的存在链表末尾。INACTIVE_ANON、ACTIVE_ANON、INACTIVE_FILE和ACTIVE_FILE这4个链表中的物理页是可以回收的,ANON代表匿名映射,FILE代表文件映射,INACTIVE代表处于非活动状态,ACTIVE代表处于活动状态,ACTIVE链表中的物理页的活跃度高于INACTIVE链表中的物理页,也就是说,处于活动状态的物理页,它的活跃度高于处于非活动状态的物理页。当内存不足时,系统会优先对LRU中的INACTIVE_ANON和INACTIVE_FILE这两个链表中的物理页进行回收,当进程需要使用回收的物理页上的内容时,需要从磁盘中加载相应内容。

但是,前台运行的应用进程或者后台运行的优先级高的应用进程,其占用的物理页也可能处于INACTIVE_ANON和INACTIVE_FILE这两个链表中,对这两个链表中前台进程和后台优先级高的进程对应的物理页进行回收,会更大程度的增加系统磁盘读写的次数,并且,增加用户的等待时长,降低用户体验。

可见,应用进程也应作为评价物理页价值高低的一个权重。为此,现有技术提出针对进程进行内存回收的方法,首先选定作为内存回收对象的目标进程,并获取目标进程的物理页,之后查找未被目标进程使用的目标物理页并回收目标物理页,未被目标进程使用的目标物理页主要指处于非活动状态的物理页。

在实际场景测试中,对于一个退到后台一分钟的进程,对其占用的所有物理页进行回收,其中,该进程在INACTIVE_ANON和INACTIVE_FILE链表中的物理页只占用到所有物理页比例的5%,而大部分物理页是该进程在ACTIVE_ANON和ACTIVE_FILE链表中的物理页。可见,现有的针对进程进行内存回收的方法回收效率很低。

为了提高回收效率,需要对ACTIVE_ANON和ACTIVE_FILE链表中的物理页进行选择性回收,优选的,便是回收其中价值较低的物理页,或者说,活跃度较低的物理页。为此,本发明提供一种内存回收方法,请参阅图9,本发明内存回收方法一个实施例包括:

701、获取目标进程对应的目标物理页;

可以获取目标应用的目标进程,并通过目标进程获取目标应用对应的目标物理页。获取进程对应的物理页的方式一般为,根据进程识别号pid,找到进程的虚拟内存空间VMA,遍历VMA可以找到进程对应的物理页,还可以通过其他方式查找进程对应的物理页,此处不做具体限定。

目标物理页可以为目标进程对应的全部物理页,也可以为目标进程对应的部分物理页。对目标进程的回收可以通过串行方式进行,也就是说每次回收只选择一个物理页作为目标物理页,执行本发明的回收流程,或者也可以通过并行方式进行,也就是说同时选择多个物理页作为目标物理页,对多个物理页同时执行本发明的回收流程。

702、读取目标物理页的活跃度的值;

获取目标进程对应的目标物理页之后,可以读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关,也就是说,物理页的活动程度越高,则其活跃度的值越大。可以理解的是,物理页的活跃度的可选值应不少于两个。

需要说明的是,活跃度的值可以为数值,此时可以按照数值大小确定活跃度的值的大小,但是,活跃度的值不应仅限为数值,只要根据预设的比较标准能够判定不同值的高低即可。

703、若目标物理页的活跃度的值高于回收标准,则降低目标物理页的活跃度,活跃度的值高于回收标准的物理页处于活动状态;

读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,回收标准可以视为是活动状态的物理页的活跃度和非活动状态的物理页的活跃度之间边界值。若判定目标物理页的活跃度的值高于回收标准,则可以降低目标物理页的活跃度,若判定目标物理页的活跃度的值不高于回收标准,则可以执行其他操作,比如回收目标物理页。

704、读取目标物理页的活跃度的值;

在步骤703之后,可以读取目标物理页的活跃度的值。若在步骤704之前,目标物理页被访问,则目标物理页的活跃度的值增加。

705、若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。

再次读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。若目标物理页的活跃度的值不高于回收标准时,表明目标物理页处于非活动状态,现有技术有很多对非活动状态的物理页进行回收的方法,因此本发明实施例不再赘述对非活动状态的物理页的回收方法。

本发明实施例获取目标进程对应的目标物理页之后,若目标物理页的活跃度的值高于回收标准,可以降低目标物理页的活跃度,并在目标物理页的活跃度不高于回收标准时,对目标物理页进行回收。这样,即使目标物理页为活动状态的物理页,本发明也有机会对目标物理页进行回收,和现有技术相比,扩展了内存回收的对象,提高了内存回收效率。

另外,在对活动状态的物理页进行回收尝试的过程中,降低活跃度的值后,下一次读取之前,未被访问的物理页,表明最近时间内不够活跃,其活跃度的值仍然较低;而在降低活跃度的值后,下一次读取之前,被访问的物理页,表明最近时间内该物理页更加活跃,其活跃度的值较高。和被访问的物理页相比,未被访问的物理页因其活跃度的值更有可能因不高于回收标准而更易被回收,从而实现了对处于活动状态的物理页中价值较低的或者说活跃度的值较低的物理页的回收。

若步骤703和步骤704之间的时间间隔极短,极限情况下,可以理解成步骤703降低目标物理页的活跃度之后,直接执行步骤704读取目标物理页的活跃度的值,若活跃度的可选值只有两个,这样,几乎所有目标进程对应的处于活动状态的物理页均被回收,相当于系统自动杀死目标进程,增加用户等待时长。因此,需要在图7对应的实施例中增加反悔机制,比如在步骤703和步骤704之间设定适当的时间间隔,作为反悔时长,在设定的时间间隔内若目标物理页被访问,则其活跃度的值升高,降低被回收的可能性,有利于防止活跃度较高的物理页被回收。基于这种思路,请参阅图8,本发明内存回收方法另一个实施例包括:

801、获取目标进程对应的目标物理页;

802、根据目标进程的优先级设置预设时长,预设时长与目标进程的优先级正相关;

反悔时长,在本发明实施例中,称作预设时长,可以为系统默认的固定时长,但是,优选的,在确定针对目标进程进行回收之后,可以读取目标进程优先级,并根据目标进程的优先级设置预设时长,以使得预设时长与目标进程的优先级正相关,也就是说,优先级越高的进程,为其设置的预设时长越长。

或者,也可以根据内存占用率设置预设时长,预设时长与内存占用率负相关,也就是说,内存占用率越高,则预设时长越短,回收效率越高,以尽快释放更多内存。

803、读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关;

步骤801和步骤803分别与图7对应的实施例中的步骤701和步骤702相同,此处不再赘述。

804、判断目标物理页的活跃度的值是否高于回收标准,若是,则执行步骤805,若否,则执行步骤807;

在读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,若是,则执行步骤805,若否,则执行步骤807。

805、降低目标物理页的活跃度;

若判定目标物理页的活跃度的值高于回收标准,则可以降低目标物理页的活跃度。

806、开启计时器;

降低目标物理页的活跃度之后,可以开启计时器,记录时长。当计时器记录的时长达到预设时长时,重复执行步骤803至步骤804。可以只重复一次,也就是说,若第一次重复执行步骤804时,仍然判定目标物理页的活跃度的值高于回收标准,则不再执行步骤805,而是直接退出对目标物理页的回收流程,也就是说,对活动状态的物理页只进行一次回收尝试。为了提高回收效率,释放更多的内存,优选的,对活动状态的物理页进行两次或两次以上的回收尝试,也就是说,可以对步骤803至步骤804重复执行两次或两次以上。

重复次数可以预设为某个有限数值,实际场景测试结果表明,前三次回收尝试的回收效率更高,第四次及之后的回收尝试回收效率很低,因此重复次数可以设置为三次。另外,也可以根据内存占用率设置重复次数,内存占用率越高,回收次数越多。或者,在实际使用中,也可以根据其他考虑对重复次数进行设置,此处不做限定。

需要说明的是,步骤802在本发明实施例中的时序不是只能如上,由于预设时长用于步骤806,因此,只要在步骤806之前执行即可,具体时序不做限定。

807、回收目标物理页。

若步骤804判定目标物理页的活跃度的值不高于回收标准,则回收目标物理页。

要在图7对应的实施例中增加反悔机制,除了如图8对应的实施例,通过在步骤703和步骤704之间设定适当的时间间隔,作为反悔时长,以尽量防止活跃度较高的物理页被回收,还可以对高于回收标准的活跃度设置两个或两个以上可选的值,这样,活跃度更高的物理页在回收尝试中更不容易被回收,基于这种思路,请参阅图9,本发明内存回收方法另一个实施例包括:

901、设置物理页活跃度的可选值,包括第一值、第二值、第三值和第四值;

设置物理页活跃度的可选值,比如可以包括第一值、第二值、第三值和第四值,其中,第一值不高于回收标准,第二值低于第三值,且高于回收标准,第三值低于第四值。或者可以说,各个可选值代表了物理页的活跃度的级数,值越高,活跃度的级数越高。

作为举例,可以通过设置标志位来评估物理页的活动程度,假设设置两个标志位,每个标志位的可选值为0和1,活跃度的值可以用(第一标志位数值,第二标志位数值)来代表,那么活跃度的可选值包括(0,0)、(0,1)、(1,0)和(1,1),并预设比较标准(0,0)低于(1,0)低于(0,1)低于(1,1),也就是说(0,0)、(1,0)、(0,1)、(1,1)逐级升高。

在实际使用中,也可以设置可选值的范围,而不具体设置各个值。

902、获取目标进程对应的目标物理页;

903、读取目标物理页的活跃度的值;

步骤902和步骤903分别与图7对应的实施例中的步骤701和步骤702相同,此处不再赘述。

904、判断目标物理页的活跃度的值是否高于回收标准,若是,则执行步骤905,若否,则执行步骤907;

在读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,若是,则执行步骤905,若否,则执行步骤907。

905、按照第一幅度降低目标物理页的活跃度;

若判定目标物理页的活跃度的值高于回收标准,则可以按照第一幅度降低目标物理页的活跃度,在本发明实施例中,第一幅度可以为每次降低一级。

906、开启计时器;

可以设置有预设时长,作为反悔时长,关于预设时长的设置,请参阅图10对应的实施例,本发明实施例中不再赘述。

当计时器记录的时长达到预设时长时,重复执行步骤903至步骤904。可以只重复一次,也就是说,若第一次重复执行步骤904时,仍然判定目标物理页的活跃度的值高于回收标准,则不再执行步骤905,而是直接退出对目标物理页的回收流程,也就是说,对活动状态的物理页只进行一次回收尝试。为了提高回收效率,释放更多的内存,优选的,对活动状态的物理页进行两次或两次以上的回收尝试,也就是说,可以对步骤903至步骤904重复执行两次或两次以上。

重复次数可以预设,实际场景测试结果表明,前三次回收尝试的回收效率更高,第四次及之后的回收尝试回收效率很低,因此重复次数可以设置为三次。另外,也可以根据内存占用率设置重复次数,内存占用率越高,回收次数越多。或者,在实际使用中,也可以根据其他考虑对重复次数进行设置,此处不做限定。

907、回收目标物理页。

若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。

下面按照图9对应的实施例提供的方法,以首次读取的活跃度的值的不同情况的进行举例说明,假设步骤903至步骤904的最大重复执行次数设置为3次:

一、假设在回收尝试的过程中,目标物理页未被访问,其活跃度的值未增加,那么:

若首次读取目标物理页的活跃度的值为第四值,那么执行步骤905后,目标物理页的活跃度的值被设置为第三值,之后第一次重复执行步骤903至步骤904,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低一级,设置为第二值,之后第二次重复执行步骤903至步骤904,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低一级,设置为第一值,之后第三次重复执行步骤903至步骤904,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第四值,那么该物理页至少需要三次重复执行步骤903至步骤904方能被回收。

若首次读取目标物理页的活跃度的值为第三值,那么执行步骤905后,目标物理页的活跃度的值被设置为第二值,之后第一次重复执行步骤903至步骤904,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低一级,设置为第一值,之后第二次重复执行步骤903至步骤904,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第三值,那么该物理页至少需要两次重复执行步骤903至步骤904方能被回收。

若首次读取目标物理页的活跃度的值为第二值,那么执行步骤905后,目标物理页的活跃度的值被设置为第一值,之后第一次重复执行步骤903至步骤904,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第二值,那么该物理页至少需要一次重复执行步骤903至步骤904方能被回收。

若首次读取目标物理页的活跃度的值为第一值,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第一值,那么该物理页不需要重复执行步骤903至步骤904就能被回收。

可见,执行本发明的回收步骤之前,活跃度的值越高的物理页,其越不容易被回收,也就是说,本发明能够优先回收活跃度较低的物理页,实现对活动状态的物理页的精细化分类回收。

二、假设在回收尝试的过程中,目标物理页被访问,则其活跃度的值会增加,那么和第一种情况相比,系统需要更多次的回收尝试才能对目标物理页进行回收。在实际应用中,系统通常对物理页进行有限次数的回收尝试,若在有限次数的回收尝试后,目标物理页的活跃度的值仍然高于回收标准,则表明目标物理页的活跃度很高,对于目标进程来说是价值更高的物理页,系统不会回收目标物理页,在进程运行效果与内存资源充足之间取得更加合理的平衡。

进一步的,目标进程需要进行回收尝试的活动物理页包括目标进程在ACTIVE_ANON链表中的物理页(即活动状态的匿名页)和ACTIVE_FILE链表中对应的物理页(即活动状态的文件页)。其中,匿名页的回收方式为页交换,回收耗时长,效率低;而文件页的回收方式为页丢弃或页回写,回收耗时短,效率高。可见,对活动状态的匿名页的回收代价更高,因此,和活动状态的匿名页相比,可以降低对活动状态的文件页的回收难度,提高文件页的回收几率,更多的对文件页进行回收,以提高对活动物理页的整体回收效率。

增加对活动状态的匿名页的回收难度,可以采用多种方法,比如,可以增加匿名页的反悔时长,比如可以减少活跃度的可选值,或者也可以增加对活跃度的降低幅度。这里,我们对第三种方式进行举例说明,若图9对应的实施例用于匿名页的回收,那么请参阅10,提供一种用于文件页回收的方法,包括:

1001、设置物理页活跃度的可选值,包括第一值、第二值、第三值和第四值;

设置物理页活跃度的可选值,比如可以包括第一值、第二值、第三值和第四值,其中,第一值不高于回收标准,第二值低于第三值,且高于回收标准,第三值低于第四值。或者可以说,各个可选值代表了物理页的活跃度的级数,值越高,活跃度的级数越高。

作为举例,可以通过设置标志位来评估物理页的活动程度,假设设置两个标志位,每个标志位的可选值为0和1,活跃度的值可以用(第一标志位数值,第二标志位数值)来代表,那么活跃度的可选值包括(0,0)、(0,1)、(1,0)和(1,1),并预设比较标准(0,0)低于(1,0)低于(0,1)低于(1,1),也就是说(0,0)、(1,0)、(0,1)、(1,1)逐级升高。

1002、获取目标进程对应的目标物理页;

1003、读取目标物理页的活跃度的值;

步骤1002和步骤1003分别与图7对应的实施例中的步骤701和步骤702相同,此处不再赘述。

1004、判断目标物理页的活跃度的值是否高于回收标准,若是,则执行步骤1005,若否,则执行步骤1007;

在读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,若是,则执行步骤1005,若否,则执行步骤1007。

1005、若目标物理页的类型为文件页,则按照第二幅度降低目标物理页的活跃度;

在获取目标进程对应的目标物理页之后,在降低目标物理页的活跃度之前,可以根据目标物理页的类型来设置其活跃度的降低幅度。当目标物理页为匿名页时,按照第一幅度降低目标物理页的活跃度;当目标物理页为文件页时,按照第二幅度降低目标物理页的活跃度,并且第一幅度低于第二幅度。在图9对应的实施例中,第一幅度为降低一级,可以作为当目标物理页为匿名页时的回收流程,此处不再赘述,本发明实施例中主要用于举例说明当目标物理页的类型为文件页时,对目标物理页的回收流程。由于第一幅度低于第二幅度,那么本发明中第二幅度可以为每次降低两级。

1006、开启计时器;

可以设置有预设时长,作为反悔时长,关于预设时长的设置,请参阅图10对应的实施例,本发明实施例中不再赘述。

当计时器记录的时长达到预设时长时,重复执行步骤1003至步骤1004。可以只重复一次,也就是说,若第一次重复执行步骤1004时,仍然判定目标物理页的活跃度的值高于回收标准,则不再执行步骤1005,而是直接退出对目标物理页的回收流程,也就是说,对活动状态的物理页只进行一次回收尝试。为了提高回收效率,释放更多的内存,优选的,对活动状态的物理页进行两次或两次以上的回收尝试,也就是说,可以对步骤1003至步骤1004重复执行两次或两次以上。

重复次数可以预设,实际场景测试结果表明,前三次回收尝试的回收效率更高,第四次及之后的回收尝试回收效率很低,因此重复次数可以设置为三次。另外,也可以根据内存占用率设置重复次数,内存占用率越高,回收次数越多。或者,在实际使用中,也可以根据其他考虑对重复次数进行设置,此处不做限定。

1007、回收目标物理页。

若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。

下面按照图10对应的实施例提供的方法,以首次读取的活跃度的值的不同情况的进行举例说明,假设步骤1003至步骤1004的最大重复执行次数设置为3次:

一、假设在回收尝试的过程中,目标物理页未被访问,其活跃度的值未增加,那么:

若首次读取目标物理页的活跃度的值为第四值,那么执行步骤1005后,目标物理页的活跃度的值被设置为第二值,之后第一次重复执行步骤1003至步骤1004,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低两级,由于最低的级数为第一值,因此设置为第一值,之后第二次重复执行步骤1003至步骤1004,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第四值,那么该物理页至少需要两次重复执行步骤1003至步骤1004方能被回收。

若首次读取目标物理页的活跃度的值为第三值,那么执行步骤1005后,目标物理页的活跃度的值被设置为第一值,之后第一次重复执行步骤1003至步骤1004,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第三值,那么该物理页至少需要一次重复执行步骤1003至步骤1004方能被回收。

若首次读取目标物理页的活跃度的值为第二值,那么执行步骤1005后,目标物理页的活跃度的值被设置为第一值,之后第一次重复执行步骤1003至步骤1004,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第二值,那么该物理页至少需要一次重复执行步骤1003至步骤1004方能被回收。

若首次读取目标物理页的活跃度的值为第一值,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第一值,那么该物理页不需要重复执行步骤1003至步骤1004就能被回收。

可见,执行本发明的回收步骤之前,活跃度的值越高的物理页,其越不容易被回收,也就是说,本发明能够优先回收活跃度较低的物理页,实现对活动状态的物理页的精细化分类回收。

和图9对应的实施例相比,本发明实施例通过增加活跃度的值的降低幅度,有利于减少步骤1003至步骤1004的重复执行次数,提高对活动状态的文件页的回收效率。

二、假设在回收尝试的过程中,目标物理页被访问,则其活跃度的值会增加,那么和第一种情况相比,系统需要更多次的回收尝试才能对目标物理页进行回收。在实际应用中,系统通常对物理页进行有限次数的回收尝试,若在有限次数的回收尝试后,目标物理页的活跃度的值仍然高于回收标准,则表明目标物理页的活跃度很高,对于目标进程来说是价值更高的物理页,系统不会回收目标物理页,在进程运行效果与内存资源充足之间取得更加合理的平衡。

通过图9对应的实施例方法和图10对应的实施例方法可以分别实现对目标进程的处于活动状态的匿名页和文件页的回收,如下表1,为按照图9对应的实施例方法和图10对应的实施例方法进行页面回收的一次实际场景测试。可以理解的是,表1中的测试数据仅为一次测试的结果,再次测试时,由于使用的终端不同、对应用程序的使用情况不同等,均会导致测试数据的变化,因此,表1的数据仅用于定性说明本发明对各应用的回收效果,而不用于定量限定本发明对各应用的回收效率。

表1

分别以豆瓣、QQ、微信、今日头条、QQ浏览器、手机管家、应用中心和新浪微博等应用作为目标应用,即测试对象,以目标应用中的进程作为目标进程,对目标进程进行页面回收,以实现对目标应用的内存回收。以豆瓣为例,在测试过程中,首先对豆瓣的目标进程的匿名页执行一次步骤903至步骤904、或者对其文件页执行一次步骤1003至步骤1004,简称为对豆瓣进行第一次回收,根据回收测试前豆瓣占用的内存大小和第一次回收后豆瓣占用的内存大小,可以计算得到对豆瓣的第一次回收率,为2.64%;之后对豆瓣的目标进程的匿名页第二次执行步骤903至步骤904、或者对其文件页第二次执行步骤1003至步骤1004,简称为对豆瓣进行第二次回收,根据第一次回收后豆瓣占用的内存大小和第二次回收后豆瓣占用的内存大小,可以计算得到对豆瓣的第二次回收率,为8.27%;依此类推,可以得到对豆瓣的第三次回收率为26.73%、对豆瓣的第四次回收率为0.46%、对豆瓣的第五次回收率为0.08%。

观察表1中同一应用不同次回收的回收率,可以看出,各应用在前三次的回收率均远远大于第四次和第五次的回收率,并且,累计进行三次回收的回收率(根据第三次回收后应用占用的内存大小和回收测试前应用占用的内存大小计算得到)和累计进行五次回收的回收率相差不大,说明回收次数过多,回收效率不高,且浪费资源,因此优选的是对应用进行有限次数的页面回收。

另外,现有的针对进程进行回收的方法,只对非活动状态的物理页进行回收,回收率对应于表1中的第一次回收率,通过比较表1中同一应用的第一次回收率和累计进行三次回收的回收率,可以发现,后者是前者的数倍,倍数在2倍至17倍之间,可见,和现有技术相比,本发明实现了更高的回收率,对于缓解系统内存压力具有明显效果。

综上所述,本发明提供了一种针对进程进行内存回收的方法,并且能够对活动状态的物理页进行选择性回收,极大的提高了内存回收的效率。

上面对本发明实施例中的内存回收方法进行了描述,下面对本发明实施例中的内存回收装置进行描述。

请参阅图11,本发明实施例中内存回收装置11的一个实施例包括:

获取模块1101,用于获取目标进程对应的目标物理页;

第一读取模块1102,用于读取所述目标物理页的活跃度的值,所述目标物理页的活跃度用于标记所述目标物理页的活动程度,所述目标物理页的活跃度的值与所述目标物理页的活动程度正相关;

降低模块1103,用于当所述目标物理页的活跃度的值高于回收标准时,降低所述目标物理页的活跃度,活跃度的值高于所述回收标准的物理页处于活动状态;

第二读取模块1104,用于在所述降低模块降低所述目标物理页的活跃度之后,读取所述目标物理页的活跃度的值;

回收模块1105,用于当所述目标物理页的活跃度的值不高于所述回收标准时,回收所述目标物理页。

请参阅图12,本发明实施例中内存回收装置12的另一个实施例包括:

获取模块1201,用于获取目标进程对应的目标物理页;

第一读取模块1202,用于读取所述目标物理页的活跃度的值,所述目标物理页的活跃度用于标记所述目标物理页的活动程度,所述目标物理页的活跃度的值与所述目标物理页的活动程度正相关;

降低模块1203,用于当所述目标物理页的活跃度的值高于回收标准时,降低所述目标物理页的活跃度,活跃度的值高于所述回收标准的物理页处于活动状态;

第二设置模块1204,用于在计时模块1205开启计时器之前,根据所述目标进程的优先级设置预设时长,预设时长与所述目标进程的优先级正相关;

计时模块1205,用于在降低所述目标物理页的活跃度之后,在读取所述目标物理页的活跃度的值之前,开启计时器;

第二读取模块1206,用于在所述降低模块降低所述目标物理页的活跃度之后,读取所述目标物理页的活跃度的值;

回收模块1207,用于当所述目标物理页的活跃度的值不高于所述回收标准时,回收所述目标物理页。

优选的,所述降低模块1203包括:

设置单元12031,用于当所述目标物理页的活跃度为第三值时,将所述目标物理页的活跃度设置为第二值;当所述目标物理页的活跃度为第二值时,将所述目标物理页的活跃度设置为第一值。

优选的,所述降低模块1203还包括:

降低单元12032,用于当所述目标物理页为匿名页时,按照第一幅度降低所述目标物理页的活跃度;当所述目标物理页为文件页时,按照第二幅度降低所述目标物理页的活跃度;所述第一幅度低于所述第二幅度。

在实际使用中,也可以不采用第二设置模块,而是采用第一设置模块,第一设置模块用于在计时模块开启计时器之前,根据内存占用率设置预设时长,预设时长与内存占用率负相关。

本发明实施例还提供了一种计算机装置13,如图13所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该计算机装置13可以为包括手机、平板电脑、个人数字助理(英文全称:Personal Digital Assistant,英文缩写:PDA)等任意终端设备。

参考图13,计算机装置13包括:电源1310、存储器1320、处理器1330以及存储在存储器1320中并可在处理器1330上运行的计算机程序。所述处理器1330执行计算机程序时实现上述各个信息处理方法实施例中的步骤,例如图1所示的步骤101至102。或者,所述处理器1330执行所述计算机程序时实现上述各装置实施例中各模块或单元的功能。

示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器1320中,并由所述处理器1330执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述计算机装置中的执行过程。

本领域技术人员可以理解,图13中示出的结构并不构成对计算机装置13的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,例如所述计算机装置还可以包括输入输出设备、网络接入设备、总线等。

所称处理器1330可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器1330是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。

所述存储器1320可用于存储所述计算机程序和/或模块,所述处理器1330通过运行或执行存储在所述存储器1320内的计算机程序和/或模块,以及调用存储在存储器1320内的数据,实现所述计算机装置的各种功能。所述存储器1320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

所述计算机装置集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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