具体实施方式
本发明实施例提供了一种内存回收方法及装置、计算机装置及计算机可读存储介质,用于减少后台运行的应用转入前台的过程中用户等待的时长。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
由于用户在使用终端应用的过程中,经常会频繁更换应用,比如利用视频播放软件观看视频的过程中,可能需要频繁的将聊天应用切换到前台,为了减少用户的等待时长,操作系统通常会为转入后台的应用进程保留其占用的内存。但是,当后台应用过多,内存被大量占用而得不到释放时,会因为内存分配不足导致操作系统运行出现异常。现有技术通过杀掉后台运行的部分应用来释放其占用的内存,但是当用户需要在前台使用被系统杀掉的应用时,该应用由于需要完全的进行重新加载,会增加用户的等待时长,降低用户体验。为了解决上述问题,本发明提供一种内存回收方法,请参阅图1,本发明内存回收方法一个实施例包括:
101、获取目标应用对应的目标进程;
首先需要选择内存回收的对象,也就是应用程序。作为举例,对于一些重要的系统应用,比如智能中心、联系人、定位、电池、网络等,为了保证终端的基本功能,本发明可以不将其选作内存回收的对象,优选的,可以选择第三方应用作为内存回收的对象。为了方便描述,将选择作为内存回收对象的应用称作目标应用。
一个应用通常包括多个进程,对目标应用进行内存回收可以以进程为单位进行回收,并且可以对目标应用的全部或部分进程进行回收,为了方便描述,将选择作为内存回收对象的目标应用的进程为目标进程,并获取目标应用对应的目标进程。
102、对目标进程的目标物理页进行目标次数的回收尝试。
由于物理内存通常被划分成若干份,每一份被记录为一个物理页,而一个进程通常占用多个物理页,因此为了在不杀掉应用的前提下对应用占用的内存进行回收,本发明实施例采用对目标进程的部分物理页进行回收。为此,在获取目标进程之后,可以获取目标进程占用的物理页,为了方便描述,将目标进程占用的物理页称作目标物理页。在获取到目标物理页之后,可以对目标物理页进行一定次数的回收尝试,为了方便描述,将对目标物理页进行回收尝试的次数称作目标次数。回收尝试区别于强制回收,回收尝试是指优先对价值较低的物理页进行回收,释放相应的内存,以减少内存回收对目标应用的影响。请参阅图2,本发明实施例中,对目标物理页进行一次回收尝试的方法可以包括:
201、判断目标物理页的活跃度是否高于回收标准,若是,则执行步骤202,若否,则执行步骤203;
物理页的价值高低通常以物理页的活跃程度高低来评价,物理页的活跃程度越高,系统通常认为该物理页存储数据的价值越高,或者说该物理页的价值越高。为了比较物理页的活跃程度,可以采用目标物理页的活跃度来标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关。这里采用的物理页的活跃度的可选值通常不少于两个,并且活跃度的值可以为数值,此时可以按照数值大小确定活跃度的值的大小,但是,活跃度的值不仅限为数值,只要根据预设的比较标准能够判定不同值的高低即可,比如用于表示物理页被访问的情况的标志位,物理页被访问时,其标志位代表的活跃度被提高。
获取到目标物理页之后,可以读取目标物理页的活跃度,并判断目标物理页的活跃度是否高于回收标准,若高于,则执行步骤202,若不高于,则执行步骤203。可以理解的是,物理页的活跃度包括至少一个高于回收标准的可选值,同时也包括至少一个不高于回收标准的可选值。
优选的,回收标准可以选用活动状态的物理页的活跃度和非活动状态的物理页的活跃度之间的边界值,也就是说,活跃度高于回收标准的物理页处于活动状态。
202、降低目标物理页的活跃度;
若判定目标物理页的活跃度高于回收标准,则可以降低目标物理页的活跃度。
203、回收目标物理页。
若判定目标物理页的活跃度不高于回收标准,则可以回收目标物理页。
通过步骤201至步骤203,可以优先将目标进程对应的活跃度较低的物理页进行回收,保留目标进程对应的活跃度较高的物理页,以减小内存回收对目标应用的影响。
随着终端上安装的应用越来越多,终端开启不久,通常便有大量应用在其后台运行,占用大量内存。在实际使用中,可以在可用的系统内存过低时启用本发明实施例提供的内存回收方法进行内存回收,也可以每隔固定时长便启用本发明实施例提供的内存回收方法进行内存回收,或者采用其他的内存回收启动策略,此处不做具体限定。
本发明可以获取在后台运行的目标应用对应的目标进程,对目标进程的物理页进行目标次数的回收尝试,对目标进程的物理页进行一次回收尝试包括:判断目标物理页的活跃度是否高于回收标准,若是,则降低目标物理页的活跃度,若否,则回收目标物理页,和现有技术相比,本发明只对目标应用的目标进程的活跃度较低的物理页进行回收,在释放目标应用的部分内存的同时,维持目标应用的运行状态,即使目标应用为在后台运行的应用,当用户需要在前台使用目标应用时,目标应用无需完全的进行重新加载,减少用户的等待时长,提高用户体验。并且,利用本发明提供的内存回收方法,也可以在不杀掉前台运行的应用的前提下对前台运行的应用的物理页进行回收尝试,释放前台运行的应用占用的部分内存,扩宽了内存回收对象的范围。
随着终端安装的应用越来越多,终端的系统在后台为用户保留的应用也越来越多,占用大量内存,因此亟需提出对后台运行的应用进行回收的策略。目标应用对应的多个进程一般具有不同的回收价值,比如,对于占用内存较少的进程,即使对其进行多次回收尝试,释放的内存量仍然较少,对于缓解系统内存压力作用不大,还会增加系统的运算负担,该类进程的回收价值较低。对不同回收价值的进程可以采用不同的回收强度,在本发明实施例中,主要体现在不同的回收尝试次数上,回收价值越高的进程,其回收尝试的次数越大,回收价值越低的进程,其回收尝试的次数越小。
请参阅图3,本发明内存回收方法另一个实施例包括:
301、获取在后台运行的目标应用对应的目标进程;
首先需要选择内存回收的对象,也就是在后台运行的应用程序。作为举例,对于一些重要的系统应用,比如智能中心、联系人、定位、电池、网络等也可能在后台运行,因此为了保证终端的基本功能,本发明可以不将其选作内存回收的对象,优选的,可以选择在后台运行的第三方应用作为内存回收的对象。为了方便描述,将选择作为内存回收对象的应用称作目标应用。
一个应用通常包括多个进程,对目标应用进行内存回收可以以进程为单位进行回收,并且可以对目标应用的全部或部分进程进行回收,为了方便描述,将选择作为内存回收对象的目标应用的进程为目标进程,并获取目标应用对应的目标进程。
302、判断目标进程是否为重度回收对象;
选择目标应用的目标进程作为内存回收对象之后,可以判断目标进程是否为重度回收对象,若是,则执行步骤303,若否,则执行步骤304。
303、将目标次数设置为第一整数;
若判定目标进程为重度回收对象,则将对目标进程的回收尝试次数设置为第一整数,也就是将目标次数设置为第一整数。
304、将目标次数设置为第二整数;
若判定目标进程不是重度回收对象,则将对目标进程的回收尝试次数设置为第二整数,也就是将目标次数设置为第二整数,其中,第一整数大于第二整数,第二整数大于或等于零。
步骤302至步骤304为对目标次数进行设置的过程,在实际使用中,对目标次数进行设置的过程可以在步骤301之前执行,或者也可以与步骤301同时执行,此处不对这二者间的时序做具体限定。
305、对目标进程的目标物理页进行目标次数的回收尝试。
在获取到目标物理页并确定目标次数之后,可以对目标进程的目标物理页进行目标次数的回收尝试。对目标物理页进行一次回收尝试的方法请参阅图2对应的实施例,此处不再赘述。
需要说明的是,当第二整数等于零时,是指不对目标物理页进行回收尝试。当目标次数大于1时,那么对于第一次回收尝试失败的物理页,也就是活跃度高于回收标准的物理页,由于其活跃度在第一次回收尝试的过程中被降低,那么如果在第二次回收尝试之前,该物理页未被访问,那么其活跃度未回升,若活跃度的可选值仅包括两个,那么该物理页在第二次回收尝试时便会被回收;若活跃度的可选值包括三个或三个以上,该物理页在经过第二次回收尝试后其活跃度仍然高于回收标准,那么需要进行更多次数的回收尝试方有可能被回收。可见,物理页越活跃,该物理页被回收的记录越低,回收尝试的次数越多,该物理页被回收的几率越大。
一般情况下,系统或目标应用会为目标应用的各个进程设置优先级,可以根据进程的优先级进行内存回收,请参阅图4,本发明内存回收方法另一个实施例包括:
401、获取在后台运行的目标应用对应的目标进程;
步骤401与图3对应的实施例中步骤301相同,此处不再赘述。
402、判断目标进程的优先级是否高于预设优先级,若是,则执行步骤403,若否,则执行步骤404;
选择目标进程作为内存回收对象之后,可以确定目标进程的优先级,判断目标进程的优先级是否高于预设优先级,若是,则执行步骤403,若否,则执行步骤404。
403、判定目标进程不是重度回收对象,并将目标次数设置为第二整数;
若目标进程的优先级高于预设优先级,那么目标进程的活跃度一般较高,其占用的物理页被访问的几率较高,因此一般需要大量的回收尝试才有可能被回收,回收效率低,并且,即使被回收,回收的物理页数据发生重新回写的几率也很高,因此可以判定目标进程不是重度回收对象,进行较少次数的回收尝试,也就是说,可以将目标次数设置为第二整数,第二整数小于第一整数,并且大于或等于零。
404、判断目标进程对内存的占用量是否超过阈值,若否,则执行步骤403,若是,则执行步骤405;
若目标进程的优先级不高于预设优先级,由于优先级较低的目标进程的活跃度较低,物理页被回收的效率较高,并且回收的物理页数据发生重新回写的几率较低,因此可以判定目标进程为重度回收对象,对优先级较高的目标进程进行更多次数的回收尝试,也就是说,可以将目标次数设置为第一整数,第一整数大于第二整数。
由于占用内存较少的进程,即使对其进行多次回收尝试,释放的内存量仍然较少,对于缓解系统内存压力作用不大,还会增加系统的运算负担,该类进程的回收价值较低。因此,优选的,若目标进程的优先级不高于预设优先级,那么可以进一步判断目标进程对内存的占用量是否超过阈值,若超过,则执行步骤405,若未超过,则可以执行步骤403。
405、判定目标进程是重度回收对象,并将目标次数设置为第一整数;
若判定目标进程是重度回收对象,则将对目标进程的回收尝试次数设置为第一整数,也就是将目标次数设置为第一整数,其中,第一整数大于第二整数。
步骤402至步骤405为对目标次数进行设置的过程,在实际使用中,对目标次数进行设置的过程可以在步骤401之前执行,或者也可以与步骤401同时执行,此处不对这二者间的时序做具体限定。
406、对目标进程的目标物理页进行目标次数的回收尝试。
在获取到目标物理页并确定目标次数之后,可以对目标进程的目标物理页进行目标次数的回收尝试。对目标物理页进行一次回收尝试的方法请参阅图2对应的实施例,此处不再赘述。
需要说明的是,当第二整数等于零时,是指不对目标物理页进行回收尝试。当目标次数大于1时,那么对于第一次回收尝试失败的物理页,也就是活跃度高于回收标准的物理页,由于其活跃度在第一次回收尝试的过程中被降低,那么如果在第二次回收尝试之前,该物理页未被访问,那么其活跃度未回升,若活跃度的可选值仅包括两个,那么该物理页在第二次回收尝试时便会被回收;若活跃度的可选值包括三个或三个以上,该物理页在经过第二次回收尝试后其活跃度仍然高于回收标准,那么需要进行更多次数的回收尝试方有可能被回收。可见,物理页越活跃,该物理页被回收的记录越低,回收尝试的次数越多,该物理页被回收的几率越大。
随着计算机硬件的飞速发展,过去的应用已经不能适应用户的要求,软件产品在激烈的市场竞争中,仅仅有强大的功能是远远不够的,随着技术领域的逐步拓展,产品生产的人性化意识日趋增强,越来越多的企业开始注重应用的UI设计,应用的UI包含的内容越来越多。应用在前台运行的过程中,应用的UI进程(应用的进程中负责更新UI的进程)不断更新通过屏幕显示的页面,并占用大量内存来存储页面资源,尤其是页面消耗型应用在前台运行的过程中,UI进程会占用大量内存,常见的页面消耗型应用包括新闻资讯类应用(如新浪新闻)、购物类应用(如淘宝)和生活服务类应用(如美团外卖)等。由于应用在前台运行时,一般首先就是要启动UI进程,因此UI进程通常也是应用的主进程,也就是应用的第一个进程。但是,当应用转入后台运行时,无需UI进程更新通过屏幕显示的页面,因此,UI进程的优先级通常很低,其占用的内存通常很大,为此,本发明提供一种针对UI进程的内存回收方法,请参阅图5,本发明内存回收方法另一个实施例包括:
501、获取在后台运行的目标应用对应的目标进程;
步骤501与图3对应的实施例中步骤301相同,此处不再赘述。
502、判断目标进程是否为UI进程,若否,则执行步骤503,若是,则执行步骤504;
选择目标进程作为内存回收对象之后,可以判断目标进程是否为UI进程,若否,则执行步骤503,若是,则执行步骤504。
503、判定目标进程不是重度回收对象,并将目标次数设置为第二整数;
若目标进程不是UI进程,那么其占用的内存通常较小,回收效率低,因此可以判定目标进程不是重度回收对象,进行较少次数的回收尝试,也就是说,可以将目标次数设置为第二整数,第二整数小于第一整数,并且大于或等于零。
504、判断目标进程对内存的占用量是否超过阈值,若否,则执行步骤503,若是,则执行步骤505;
若目标进程是UI进程,可以判定目标进程为重度回收对象,对其进行更多次数的回收尝试,也就是说,可以将目标次数设置为第一整数,第一整数大于第二整数。
由于一些应用可能在前台运行较短时长便转入后台,这种情况下,其UI进程占用的内存比较小,即使对其进行多次回收尝试,释放的内存量仍然较少,对于缓解系统内存压力作用不大,还会增加系统的运算负担,该类进程的回收价值较低。因此,优选的,若目标进程是UI进程,可以进一步判断目标进程对内存的占用量是否超过阈值,若超过,则执行步骤505,若未超过,则可以执行步骤503。
505、判定目标进程是重度回收对象,并将目标次数设置为第一整数;
若判定目标进程是重度回收对象,则将对目标进程的回收尝试次数设置为第一整数,也就是将目标次数设置为第一整数,其中,第一整数大于第二整数。
步骤502至步骤505为对目标次数进行设置的过程,在实际使用中,对目标次数进行设置的过程可以在步骤501之前执行,或者也可以与步骤501同时执行,此处不对这二者间的时序做具体限定。
506、对目标进程的目标物理页进行目标次数的回收尝试。
在获取到目标物理页并确定目标次数之后,可以对目标进程的目标物理页进行目标次数的回收尝试。对目标物理页进行一次回收尝试的方法请参阅图2对应的实施例,此处不再赘述。
需要说明的是,当第二整数等于零时,是指不对目标物理页进行回收尝试。当目标次数大于1时,那么对于第一次回收尝试失败的物理页,也就是活跃度高于回收标准的物理页,由于其活跃度在第一次回收尝试的过程中被降低,那么如果在第二次回收尝试之前,该物理页未被访问,那么其活跃度未回升,若活跃度的可选值仅包括两个,那么该物理页在第二次回收尝试时便会被回收;若活跃度的可选值包括三个或三个以上,该物理页在经过第二次回收尝试后其活跃度仍然高于回收标准,那么需要进行更多次数的回收尝试方有可能被回收。可见,物理页越活跃,该物理页被回收的记录越低,回收尝试的次数越多,该物理页被回收的几率越大。
一个应用可以对应于多个进程,而一些情况下,两个或两个以上应用也可以同时对应于一个进程,因此,进程的回收价值不应只考虑该进程对一个应用的价值,若该进程为多个应用共用,那么还应考虑该进程对其他应用的价值,请参阅图6,本发明内存回收方法另一个实施例包括:
601、获取在后台运行的目标应用对应的目标进程;
步骤601与图3对应的实施例中步骤301相同,此处不再赘述。
602、判断目标进程是否为目标应用与被保护应用的共用进程,若是,则执行步骤603,若否,则执行步骤604;
选择目标进程作为内存回收对象之后,可以判断目标进程是否为目标应用与被保护应用的共用进程,若是,则执行步骤603,若否,则执行步骤604。
603、判定目标进程不是重度回收对象,并将目标次数设置为第二整数;
若目标进程为目标应用与被保护应用的共用进程,可以判定目标进程不是重度回收对象,进行较少次数的回收尝试,也就是说,可以将目标次数设置为第二整数,第二整数小于第一整数,并且大于或等于零。
被保护应用可以包括正在前台运行的应用、游戏类应用、在后台运行且处于工作状态的应用中的一种或多种应用。在后台运行且处于工作状态的应用可以为在后台运行且处于下载状态的应用、或者在后台运行且处于导航状态的应用、或者在后台运行且处于音频播放状态的应用。由于终端需要尽量保证在前台运行的应用、以及在后台运行但是处于工作状态的应用运行的流畅性,因此,通常需要对这两类应用占用的内存中的数据进行保护,也就是对这两类应用的进程进行保护,不进行回收尝试或减少回收尝试的次数。而游戏类应用占用的物理页通常为匿名页,而匿名页的回收方式一般为页交换,回收耗时长,效率低,因此对游戏类应用的回收价值较低,因此,游戏类应用也可以被认为是被保护应用。
604、判断目标进程是否为UI进程,若否,则执行步骤603,若是,则执行步骤605;
若目标进程不是目标应用与被保护应用的共用进程,可以进行其他操作,比如判断目标进程是否为UI进程,若否,则执行步骤603,若是,则执行步骤605。
605、判定目标进程是重度回收对象,并将目标次数设置为第一整数;
若判定目标进程是重度回收对象,则将对目标进程的回收尝试次数设置为第一整数,也就是将目标次数设置为第一整数,其中,第一整数大于第二整数。
步骤602至步骤605为对目标次数进行设置的过程,在实际使用中,对目标次数进行设置的过程可以在步骤601之前执行,或者也可以与步骤601同时执行,此处不对这二者间的时序做具体限定。
606、对目标进程的目标物理页进行目标次数的回收尝试。
在获取到目标物理页并确定目标次数之后,可以对目标进程的目标物理页进行目标次数的回收尝试。对目标物理页进行一次回收尝试的方法请参阅图2对应的实施例,此处不再赘述。
需要说明的是,步骤604至步骤605用于判断不是目标应用与被保护应用的共用进程的目标进程是否为重度回收对象的方法,仅作为举例,在实际使用中,还可以利用图4或图5对应的实施例中判断目标进程是否为重度回收对象的方法。在时序上,也可以先利用图4或图5对应的实施例确定目标进程是否为重度回收对象,对于被判定为重度回收对象的目标进程,可以再利用本发明实施例中的步骤602至步骤603,最终确定目标进程是否应被判定为重度回收对象。比如,若利用图4或图5对应的实施例中判断目标进程是重度回收对象,但是若判定目标进程是目标应用与被保护应用的共用进程,那么可以最终判定目标进程为轻度回收对象,若判定目标进程不是目标应用与被保护应用的共用进程,那么可以最终判定目标进程为重度回收对象。
需要说明的是,当第二整数等于零时,是指不对目标物理页进行回收尝试。当目标次数大于1时,那么对于第一次回收尝试失败的物理页,也就是活跃度高于回收标准的物理页,由于其活跃度在第一次回收尝试的过程中被降低,那么如果在第二次回收尝试之前,该物理页未被访问,那么其活跃度未回升,若活跃度的可选值仅包括两个,那么该物理页在第二次回收尝试时便会被回收;若活跃度的可选值包括三个或三个以上,该物理页在经过第二次回收尝试后其活跃度仍然高于回收标准,那么需要进行更多次数的回收尝试方有可能被回收。可见,物理页越活跃,该物理页被回收的记录越低,回收尝试的次数越多,该物理页被回收的几率越大。
综上,本发明提供了一种内存回收的方法,图1和图2对应的实施例能够在不杀掉目标应用的前提下,对目标应用的目标进程占用的内存进行适当回收,减少当用户将目标应用切换到前台运行时需要的等待时长,提高了用户体验。图3至图6对应的实施例能够对目标应用对应的目标进程进行带有区别的回收尝试,对于回收价值高的目标进程,进行更多次数的回收尝试,而对于回收价值低的目标进程,不进行或者进行更少次数的回收尝试,有利于提高回收效率。
上面对本发明实施例中的内存回收方法进行了描述,下面对本发明实施例中的内存回收装置进行描述。
请参阅图7,本发明实施例中内存回收装置7的一个实施例包括:
获取模块71,用于获取在后台运行的目标应用对应的目标进程;
回收模块72,用于对目标进程的物理页进行目标次数的回收尝试;
回收模块72包括回收单元721,回收单元721用于对目标进程的物理页进行一次回收尝试,回收单元721包括:
判断子单元7211,用于判断目标物理页的活跃度是否高于回收标准,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关;
降低子单元7212,用于当判断子单元7211判定目标物理页的活跃度高于回收标准时,降低目标物理页的活跃度;
回收子单元7213,用于当判断子单元7211判定目标物理页的活跃度不高于回收标准时,回收目标物理页。
请参阅图8,本发明实施例中内存回收装置8的另一个实施例包括:
获取模块81,用于获取在后台运行的目标应用对应的目标进程;
回收模块82,用于对目标进程的物理页进行目标次数的回收尝试,回收模块82的具体结构请参阅图7对应的实施例,此处不再赘述;
判断模块83,用于判断目标进程是否为重度回收对象;
第一设置模块84,用于当判断模块83判定目标进程为重度回收对象时,将目标次数设置为第一整数;
第二设置模块85,用于当判断模块83判定目标进程不是重度回收对象时,将目标次数设置为第二整数,第一整数大于第二整数,第二整数大于或等于零。
其中判断模块83包括:
第一判断单元831,用于判断目标进程的优先级是否高于预设优先级;
第一判定单元832,用于当判断单元831判定目标进程的优先级高于预设优先级时,判定目标进程不是重度回收对象;
第二判断单元833,用于当第一判断单元831判定目标进程的优先级不高于预设优先级时,判断目标进程对内存的占用量是否超过阈值;
第二判定单元834,用于当第二判断单元833判定目标进程对内存的占用率超过阈值时,判定目标进程为重度回收对象。
请参阅图9,本发明实施例中内存回收装置9的另一个实施例包括:
获取模块91,用于获取在后台运行的目标应用对应的目标进程;
回收模块92,用于对目标进程的物理页进行目标次数的回收尝试,回收模块92的具体结构请参阅图7对应的实施例,此处不再赘述;
判断模块93,用于判断目标进程是否为重度回收对象;
第一设置模块94,用于当判断模块93判定目标进程为重度回收对象时,将目标次数设置为第一整数;
第二设置模块95,用于当判断模块93判定目标进程不是重度回收对象时,将目标次数设置为第二整数,第一整数大于第二整数,第二整数大于或等于零。
其中判断模块93包括:
第三判断单元931,用于判断目标进程是否为UI进程;
第三判定单元932,用于当第三判断单元931判定目标进程为UI进程时,判定目标进程为重度回收对象。
需要说明的是,上述实施例重点举例说明了目标应用为后台运行的应用的情况,在实际使用中,目标应用也可以为前台运行的应用,对前台运行的目标应用进行回收的方法和装置,此处不再赘述,请参考前述实施例。
从上述实施例中不难发现,本发明对目标应用的回收方法是基于对目标进程的目标物理页的回收尝试,下面简称为对物理页的回收,下面对几种可能的物理页的回收方法及装置进行详细说明。
由于用户在使用终端应用的过程中,经常会频繁更换应用,比如利用视频播放软件观看视频的过程中,可能需要频繁的将聊天应用切换到前台,为了减少用户的等待时长,操作系统通常会为转入后台的应用进程保留其占用的内存。但是,当后台应用过多,内存被大量占用而得不到释放时,会因为内存分配不足导致操作系统运行出现异常。
物理内存通常被划分成若干份,每一份被记录为一个物理页。一个应用进程通常占用多个物理页,操作系统回收应用进程占用的内存,实际上是对应用进程占用的多个物理页进行回收。关于内存回收,操作系统需要在保证应用的数据不丢失的前提下做回收动作。页面回收的方式一般有页回写、页交换和页丢弃三种方式: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链表中的物理页进行选择性回收,优选的,便是回收其中价值较低的物理页,或者说,活跃度较低的物理页。为此,本发明提供一种内存回收方法,请参阅图10,本发明内存回收方法一个实施例包括:
1001、获取目标进程对应的目标物理页;
可以获取目标应用的目标进程,并通过目标进程获取目标应用对应的目标物理页。获取进程对应的物理页的方式一般为,根据进程识别号pid,找到进程的虚拟内存空间VMA,遍历VMA可以找到进程对应的物理页,还可以通过其他方式查找进程对应的物理页,此处不做具体限定。
目标物理页可以为目标进程对应的全部物理页,也可以为目标进程对应的部分物理页。对目标进程的回收可以通过串行方式进行,也就是说每次回收只选择一个物理页作为目标物理页,执行本发明的回收流程,或者也可以通过并行方式进行,也就是说同时选择多个物理页作为目标物理页,对多个物理页同时执行本发明的回收流程。
1002、读取目标物理页的活跃度的值;
获取目标进程对应的目标物理页之后,可以读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关,也就是说,物理页的活动程度越高,则其活跃度的值越大。可以理解的是,物理页的活跃度的可选值应不少于两个。
需要说明的是,活跃度的值可以为数值,此时可以按照数值大小确定活跃度的值的大小,但是,活跃度的值不应仅限为数值,只要根据预设的比较标准能够判定不同值的高低即可。
1003、若目标物理页的活跃度的值高于回收标准,则降低目标物理页的活跃度,活跃度的值高于回收标准的物理页处于活动状态;
读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,回收标准可以视为是活动状态的物理页的活跃度和非活动状态的物理页的活跃度之间边界值。若判定目标物理页的活跃度的值高于回收标准,则可以降低目标物理页的活跃度,若判定目标物理页的活跃度的值不高于回收标准,则可以执行其他操作,比如回收目标物理页。
1004、读取目标物理页的活跃度的值;
在步骤1003之后,可以读取目标物理页的活跃度的值。若在步骤1004之前,目标物理页被访问,则目标物理页的活跃度的值增加。
1005、若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。
再次读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。若目标物理页的活跃度的值不高于回收标准时,表明目标物理页处于非活动状态,现有技术有很多对非活动状态的物理页进行回收的方法,因此本发明实施例不再赘述对非活动状态的物理页的回收方法。
本发明实施例获取目标进程对应的目标物理页之后,若目标物理页的活跃度的值高于回收标准,可以降低目标物理页的活跃度,并在目标物理页的活跃度不高于回收标准时,对目标物理页进行回收。这样,即使目标物理页为活动状态的物理页,本发明也有机会对目标物理页进行回收,和现有技术相比,扩展了内存回收的对象,提高了内存回收效率。
另外,在对活动状态的物理页进行回收尝试的过程中,降低活跃度的值后,下一次读取之前,未被访问的物理页,表明最近时间内不够活跃,其活跃度的值仍然较低;而在降低活跃度的值后,下一次读取之前,被访问的物理页,表明最近时间内该物理页更加活跃,其活跃度的值较高。和被访问的物理页相比,未被访问的物理页因其活跃度的值更有可能因不高于回收标准而更易被回收,从而实现了对处于活动状态的物理页中价值较低的或者说活跃度的值较低的物理页的回收。
若步骤1003和步骤1004之间的时间间隔极短,极限情况下,可以理解成步骤1003降低目标物理页的活跃度之后,直接执行步骤1004读取目标物理页的活跃度的值,若活跃度的可选值只有两个,这样,几乎所有目标进程对应的处于活动状态的物理页均被回收,相当于系统自动杀死目标进程,增加用户等待时长。因此,需要在图10对应的实施例中增加反悔机制,比如在步骤1003和步骤1004之间设定适当的时间间隔,作为反悔时长,在设定的时间间隔内若目标物理页被访问,则其活跃度的值升高,降低被回收的可能性,有利于防止活跃度较高的物理页被回收。基于这种思路,请参阅图11,本发明内存回收方法另一个实施例包括:
1101、获取目标进程对应的目标物理页;
1102、根据目标进程的优先级设置预设时长,预设时长与目标进程的优先级正相关;
反悔时长,在本发明实施例中,称作预设时长,可以为系统默认的固定时长,但是,优选的,在确定针对目标进程进行回收之后,可以读取目标进程优先级,并根据目标进程的优先级设置预设时长,以使得预设时长与目标进程的优先级正相关,也就是说,优先级越高的进程,为其设置的预设时长越长。
或者,也可以根据内存占用率设置预设时长,预设时长与内存占用率负相关,也就是说,内存占用率越高,则预设时长越短,回收效率越高,以尽快释放更多内存。
1103、读取目标物理页的活跃度的值,目标物理页的活跃度用于标记目标物理页的活动程度,目标物理页的活跃度的值与目标物理页的活动程度正相关;
步骤1101和步骤1103分别与图10对应的实施例中的步骤1001和步骤1002相同,此处不再赘述。
1104、判断目标物理页的活跃度的值是否高于回收标准,若是,则执行步骤1105,若否,则执行步骤1107;
在读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,若是,则执行步骤1105,若否,则执行步骤1107。
1105、降低目标物理页的活跃度;
若判定目标物理页的活跃度的值高于回收标准,则可以降低目标物理页的活跃度。
1106、开启计时器;
降低目标物理页的活跃度之后,可以开启计时器,记录时长。当计时器记录的时长达到预设时长时,重复执行步骤1103至步骤1104。可以只重复一次,也就是说,若第一次重复执行步骤1104时,仍然判定目标物理页的活跃度的值高于回收标准,则不再执行步骤1105,而是直接退出对目标物理页的回收流程,也就是说,对活动状态的物理页只进行一次回收尝试。为了提高回收效率,释放更多的内存,优选的,对活动状态的物理页进行两次或两次以上的回收尝试,也就是说,可以对步骤1103至步骤1104重复执行两次或两次以上。
重复次数可以预设为某个有限数值,实际场景测试结果表明,前三次回收尝试的回收效率更高,第四次及之后的回收尝试回收效率很低,因此重复次数可以设置为三次。另外,也可以根据内存占用率设置重复次数,内存占用率越高,回收次数越多。或者,在实际使用中,也可以根据其他考虑对重复次数进行设置,此处不做限定。
需要说明的是,步骤1102在本发明实施例中的时序不是只能如上,由于预设时长用于步骤1106,因此,只要在步骤1106之前执行即可,具体时序不做限定。
1107、回收目标物理页。
若步骤1104判定目标物理页的活跃度的值不高于回收标准,则回收目标物理页。
要在图10对应的实施例中增加反悔机制,除了如图11对应的实施例,通过在步骤1003和步骤1004之间设定适当的时间间隔,作为反悔时长,以尽量防止活跃度较高的物理页被回收,还可以对高于回收标准的活跃度设置两个或两个以上可选的值,这样,活跃度更高的物理页在回收尝试中更不容易被回收,基于这种思路,请参阅图12,本发明内存回收方法另一个实施例包括:
1201、设置物理页活跃度的可选值,包括第一值、第二值、第三值和第四值;
设置物理页活跃度的可选值,比如可以包括第一值、第二值、第三值和第四值,其中,第一值不高于回收标准,第二值低于第三值,且高于回收标准,第三值低于第四值。或者可以说,各个可选值代表了物理页的活跃度的级数,值越高,活跃度的级数越高。
作为举例,可以通过设置标志位来评估物理页的活动程度,假设设置两个标志位,每个标志位的可选值为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)逐级升高。
在实际使用中,也可以设置可选值的范围,而不具体设置各个值。
1202、获取目标进程对应的目标物理页;
1203、读取目标物理页的活跃度的值;
步骤1202和步骤1203分别与图10对应的实施例中的步骤1001和步骤1002相同,此处不再赘述。
1204、判断目标物理页的活跃度的值是否高于回收标准,若是,则执行步骤1205,若否,则执行步骤1207;
在读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,若是,则执行步骤1205,若否,则执行步骤1207。
1205、按照第一幅度降低目标物理页的活跃度;
若判定目标物理页的活跃度的值高于回收标准,则可以按照第一幅度降低目标物理页的活跃度,在本发明实施例中,第一幅度可以为每次降低一级。
1206、开启计时器;
可以设置有预设时长,作为反悔时长,关于预设时长的设置,请参阅图10对应的实施例,本发明实施例中不再赘述。
当计时器记录的时长达到预设时长时,重复执行步骤1203至步骤1204。可以只重复一次,也就是说,若第一次重复执行步骤1204时,仍然判定目标物理页的活跃度的值高于回收标准,则不再执行步骤1205,而是直接退出对目标物理页的回收流程,也就是说,对活动状态的物理页只进行一次回收尝试。为了提高回收效率,释放更多的内存,优选的,对活动状态的物理页进行两次或两次以上的回收尝试,也就是说,可以对步骤1203至步骤1204重复执行两次或两次以上。
重复次数可以预设,实际场景测试结果表明,前三次回收尝试的回收效率更高,第四次及之后的回收尝试回收效率很低,因此重复次数可以设置为三次。另外,也可以根据内存占用率设置重复次数,内存占用率越高,回收次数越多。或者,在实际使用中,也可以根据其他考虑对重复次数进行设置,此处不做限定。
1207、回收目标物理页。
若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。
下面按照图12对应的实施例提供的方法,以首次读取的活跃度的值的不同情况的进行举例说明,假设步骤1203至步骤1204的最大重复执行次数设置为3次:
一、假设在回收尝试的过程中,目标物理页未被访问,其活跃度的值未增加,那么:
若首次读取目标物理页的活跃度的值为第四值,那么执行步骤1205后,目标物理页的活跃度的值被设置为第三值,之后第一次重复执行步骤1203至步骤1204,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低一级,设置为第二值,之后第二次重复执行步骤1203至步骤1204,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低一级,设置为第一值,之后第三次重复执行步骤1203至步骤1204,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第四值,那么该物理页至少需要三次重复执行步骤1203至步骤1204方能被回收。
若首次读取目标物理页的活跃度的值为第三值,那么执行步骤1205后,目标物理页的活跃度的值被设置为第二值,之后第一次重复执行步骤1203至步骤1204,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低一级,设置为第一值,之后第二次重复执行步骤1203至步骤1204,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第三值,那么该物理页至少需要两次重复执行步骤1203至步骤1204方能被回收。
若首次读取目标物理页的活跃度的值为第二值,那么执行步骤1205后,目标物理页的活跃度的值被设置为第一值,之后第一次重复执行步骤1203至步骤1204,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第二值,那么该物理页至少需要一次重复执行步骤1203至步骤1204方能被回收。
若首次读取目标物理页的活跃度的值为第一值,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第一值,那么该物理页不需要重复执行步骤1203至步骤1204就能被回收。
可见,执行本发明的回收步骤之前,活跃度的值越高的物理页,其越不容易被回收,也就是说,本发明能够优先回收活跃度较低的物理页,实现对活动状态的物理页的精细化分类回收。
二、假设在回收尝试的过程中,目标物理页被访问,则其活跃度的值会增加,那么和第一种情况相比,系统需要更多次的回收尝试才能对目标物理页进行回收。在实际应用中,系统通常对物理页进行有限次数的回收尝试,若在有限次数的回收尝试后,目标物理页的活跃度的值仍然高于回收标准,则表明目标物理页的活跃度很高,对于目标进程来说是价值更高的物理页,系统不会回收目标物理页,在进程运行效果与内存资源充足之间取得更加合理的平衡。
进一步的,目标进程需要进行回收尝试的活动物理页包括目标进程在ACTIVE_ANON链表中的物理页(即活动状态的匿名页)和ACTIVE_FILE链表中对应的物理页(即活动状态的文件页)。其中,匿名页的回收方式为页交换,回收耗时长,效率低;而文件页的回收方式为页丢弃或页回写,回收耗时短,效率高。可见,对活动状态的匿名页的回收代价更高,因此,和活动状态的匿名页相比,可以降低对活动状态的文件页的回收难度,提高文件页的回收几率,更多的对文件页进行回收,以提高对活动物理页的整体回收效率。
增加对活动状态的匿名页的回收难度,可以采用多种方法,比如,可以增加匿名页的反悔时长,比如可以减少活跃度的可选值,或者也可以增加对活跃度的降低幅度。这里,我们对第三种方式进行举例说明,若图12对应的实施例用于匿名页的回收,那么请参阅13,提供一种用于文件页回收的方法,包括:
1301、设置物理页活跃度的可选值,包括第一值、第二值、第三值和第四值;
设置物理页活跃度的可选值,比如可以包括第一值、第二值、第三值和第四值,其中,第一值不高于回收标准,第二值低于第三值,且高于回收标准,第三值低于第四值。或者可以说,各个可选值代表了物理页的活跃度的级数,值越高,活跃度的级数越高。
作为举例,可以通过设置标志位来评估物理页的活动程度,假设设置两个标志位,每个标志位的可选值为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)逐级升高。
1302、获取目标进程对应的目标物理页;
1303、读取目标物理页的活跃度的值;
步骤1302和步骤1303分别与图10对应的实施例中的步骤1001和步骤1002相同,此处不再赘述。
1304、判断目标物理页的活跃度的值是否高于回收标准,若是,则执行步骤1305,若否,则执行步骤1307;
在读取目标物理页的活跃度的值之后,可以判断目标物理页的活跃度的值是否高于回收标准,活跃度的值高于回收标准的物理页处于活动状态,若是,则执行步骤1305,若否,则执行步骤1307。
1305、若目标物理页的类型为文件页,则按照第二幅度降低目标物理页的活跃度;
在获取目标进程对应的目标物理页之后,在降低目标物理页的活跃度之前,可以根据目标物理页的类型来设置其活跃度的降低幅度。当目标物理页为匿名页时,按照第一幅度降低目标物理页的活跃度;当目标物理页为文件页时,按照第二幅度降低目标物理页的活跃度,并且第一幅度低于第二幅度。在图12对应的实施例中,第一幅度为降低一级,可以作为当目标物理页为匿名页时的回收流程,此处不再赘述,本发明实施例中主要用于举例说明当目标物理页的类型为文件页时,对目标物理页的回收流程。由于第一幅度低于第二幅度,那么本发明中第二幅度可以为每次降低两级。
1306、开启计时器;
可以设置有预设时长,作为反悔时长,关于预设时长的设置,请参阅图10对应的实施例,本发明实施例中不再赘述。
当计时器记录的时长达到预设时长时,重复执行步骤1303至步骤1304。可以只重复一次,也就是说,若第一次重复执行步骤1304时,仍然判定目标物理页的活跃度的值高于回收标准,则不再执行步骤1305,而是直接退出对目标物理页的回收流程,也就是说,对活动状态的物理页只进行一次回收尝试。为了提高回收效率,释放更多的内存,优选的,对活动状态的物理页进行两次或两次以上的回收尝试,也就是说,可以对步骤1303至步骤1304重复执行两次或两次以上。
重复次数可以预设,实际场景测试结果表明,前三次回收尝试的回收效率更高,第四次及之后的回收尝试回收效率很低,因此重复次数可以设置为三次。另外,也可以根据内存占用率设置重复次数,内存占用率越高,回收次数越多。或者,在实际使用中,也可以根据其他考虑对重复次数进行设置,此处不做限定。
1307、回收目标物理页。
若目标物理页的活跃度的值不高于回收标准,则回收目标物理页。
下面按照图13对应的实施例提供的方法,以首次读取的活跃度的值的不同情况的进行举例说明,假设步骤1303至步骤1304的最大重复执行次数设置为3次:
一、假设在回收尝试的过程中,目标物理页未被访问,其活跃度的值未增加,那么:
若首次读取目标物理页的活跃度的值为第四值,那么执行步骤1305后,目标物理页的活跃度的值被设置为第二值,之后第一次重复执行步骤1303至步骤1304,由于活跃度的值仍然高于回收标准,继续对活跃度的值降低两级,由于最低的级数为第一值,因此设置为第一值,之后第二次重复执行步骤1303至步骤1304,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第四值,那么该物理页至少需要两次重复执行步骤1303至步骤1304方能被回收。
若首次读取目标物理页的活跃度的值为第三值,那么执行步骤1305后,目标物理页的活跃度的值被设置为第一值,之后第一次重复执行步骤1303至步骤1304,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第三值,那么该物理页至少需要一次重复执行步骤1303至步骤1304方能被回收。
若首次读取目标物理页的活跃度的值为第二值,那么执行步骤1305后,目标物理页的活跃度的值被设置为第一值,之后第一次重复执行步骤1303至步骤1304,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第二值,那么该物理页至少需要一次重复执行步骤1303至步骤1304方能被回收。
若首次读取目标物理页的活跃度的值为第一值,由于活跃度的值不高于回收标准,对目标物理页进行回收。若首次读取目标物理页的活跃度的值为第一值,那么该物理页不需要重复执行步骤1303至步骤1304就能被回收。
可见,执行本发明的回收步骤之前,活跃度的值越高的物理页,其越不容易被回收,也就是说,本发明能够优先回收活跃度较低的物理页,实现对活动状态的物理页的精细化分类回收。
和图12对应的实施例相比,本发明实施例通过增加活跃度的值的降低幅度,有利于减少步骤1303至步骤1304的重复执行次数,提高对活动状态的文件页的回收效率。
二、假设在回收尝试的过程中,目标物理页被访问,则其活跃度的值会增加,那么和第一种情况相比,系统需要更多次的回收尝试才能对目标物理页进行回收。在实际应用中,系统通常对物理页进行有限次数的回收尝试,若在有限次数的回收尝试后,目标物理页的活跃度的值仍然高于回收标准,则表明目标物理页的活跃度很高,对于目标进程来说是价值更高的物理页,系统不会回收目标物理页,在进程运行效果与内存资源充足之间取得更加合理的平衡。
通过图12对应的实施例方法和图13对应的实施例方法可以分别实现对目标进程的处于活动状态的匿名页和文件页的回收,如下表1,为按照图12对应的实施例方法和图13对应的实施例方法进行页面回收的一次实际场景测试。可以理解的是,表1中的测试数据仅为一次测试的结果,再次测试时,由于使用的终端不同、对应用的使用情况不同等,均会导致测试数据的变化,因此,表1的数据仅用于定性说明本发明对各应用的回收效果,而不用于定量限定本发明对各应用的回收效率。
表1
分别以豆瓣、QQ、微信、今日头条、QQ浏览器、手机管家、应用中心和新浪微博等应用作为目标应用,即测试对象,以目标应用中的进程作为目标进程,对目标进程进行页面回收,以实现对目标应用的内存回收。以豆瓣为例,在测试过程中,首先对豆瓣的目标进程的匿名页执行一次步骤1203至步骤1204、或者对其文件页执行一次步骤1303至步骤1304,简称为对豆瓣进行第一次回收,根据回收测试前豆瓣占用的内存大小和第一次回收后豆瓣占用的内存大小,可以计算得到对豆瓣的第一次回收率,为2.64%;之后对豆瓣的目标进程的匿名页第二次执行步骤1203至步骤1204、或者对其文件页第二次执行步骤1303至步骤1304,简称为对豆瓣进行第二次回收,根据第一次回收后豆瓣占用的内存大小和第二次回收后豆瓣占用的内存大小,可以计算得到对豆瓣的第二次回收率,为8.27%;依此类推,可以得到对豆瓣的第三次回收率为26.73%、对豆瓣的第四次回收率为0.46%、对豆瓣的第五次回收率为0.08%。
观察表1中同一应用不同次回收的回收率,可以看出,各应用在前三次的回收率均远远大于第四次和第五次的回收率,并且,累计进行三次回收的回收率(根据第三次回收后应用占用的内存大小和回收测试前应用占用的内存大小计算得到)和累计进行五次回收的回收率相差不大,说明回收次数过多,回收效率不高,且浪费资源,因此优选的是对应用进行有限次数的页面回收。
另外,现有的针对进程进行回收的方法,只对非活动状态的物理页进行回收,回收率对应于表1中的第一次回收率,通过比较表1中同一应用的第一次回收率和累计进行三次回收的回收率,可以发现,后者是前者的数倍,倍数在2倍至17倍之间,可见,和现有技术相比,本发明实现了更高的回收率,对于缓解系统内存压力具有明显效果。
综上所述,本发明提供了一种针对进程进行内存回收的方法,并且能够对活动状态的物理页进行选择性回收,极大的提高了内存回收的效率。
上面对本发明实施例中的内存回收方法进行了描述,下面对本发明实施例中的内存回收装置进行描述。
请参阅图14,本发明实施例中内存回收装置14的一个实施例包括:
获取模块1401,用于获取目标进程对应的目标物理页;
第一读取模块1402,用于读取所述目标物理页的活跃度的值,所述目标物理页的活跃度用于标记所述目标物理页的活动程度,所述目标物理页的活跃度的值与所述目标物理页的活动程度正相关;
降低模块1403,用于当所述目标物理页的活跃度的值高于回收标准时,降低所述目标物理页的活跃度,活跃度的值高于所述回收标准的物理页处于活动状态;
第二读取模块1404,用于在所述降低模块降低所述目标物理页的活跃度之后,读取所述目标物理页的活跃度的值;
回收模块1405,用于当所述目标物理页的活跃度的值不高于所述回收标准时,回收所述目标物理页。
请参阅图15,本发明实施例中内存回收装置15的另一个实施例包括:
获取模块1501,用于获取目标进程对应的目标物理页;
第一读取模块1502,用于读取所述目标物理页的活跃度的值,所述目标物理页的活跃度用于标记所述目标物理页的活动程度,所述目标物理页的活跃度的值与所述目标物理页的活动程度正相关;
降低模块1503,用于当所述目标物理页的活跃度的值高于回收标准时,降低所述目标物理页的活跃度,活跃度的值高于所述回收标准的物理页处于活动状态;
第二设置模块1504,用于在计时模块1505开启计时器之前,根据所述目标进程的优先级设置预设时长,预设时长与所述目标进程的优先级正相关;
计时模块1505,用于在降低所述目标物理页的活跃度之后,在读取所述目标物理页的活跃度的值之前,开启计时器;
第二读取模块1506,用于在所述降低模块降低所述目标物理页的活跃度之后,读取所述目标物理页的活跃度的值;
回收模块1507,用于当所述目标物理页的活跃度的值不高于所述回收标准时,回收所述目标物理页。
优选的,所述降低模块1503包括:
设置单元15031,用于当所述目标物理页的活跃度为第三值时,将所述目标物理页的活跃度设置为第二值;当所述目标物理页的活跃度为第二值时,将所述目标物理页的活跃度设置为第一值。
优选的,所述降低模块1503还包括:
降低单元15032,用于当所述目标物理页为匿名页时,按照第一幅度降低所述目标物理页的活跃度;当所述目标物理页为文件页时,按照第二幅度降低所述目标物理页的活跃度;所述第一幅度低于所述第二幅度。
在实际使用中,也可以不采用第二设置模块,而是采用第一设置模块,第一设置模块用于在计时模块开启计时器之前,根据内存占用率设置预设时长,预设时长与内存占用率负相关。
本发明实施例还提供了一种计算机装置16,如图16所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该计算机装置16可以为包括手机、平板电脑、个人数字助理(英文全称:PersonalDigitalAssistant,英文缩写:PDA)等任意终端设备。
参考图16,计算机装置16包括:电源1610、存储器1620、处理器1630以及存储在存储器1620中并可在处理器1630上运行的计算机程序。所述处理器1630执行计算机程序时实现上述各个信息处理方法实施例中的步骤,例如图1所示的步骤101至102。或者,所述处理器1630执行所述计算机程序时实现上述各装置实施例中各模块或单元的功能。
示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器1620中,并由所述处理器1630执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述计算机装置中的执行过程。
本领域技术人员可以理解,图16中示出的结构并不构成对计算机装置16的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,例如所述计算机装置还可以包括输入输出设备、网络接入设备、总线等。
所称处理器1630可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器1630是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
所述存储器1620可用于存储所述计算机程序和/或模块,所述处理器1630通过运行或执行存储在所述存储器1620内的计算机程序和/或模块,以及调用存储在存储器1620内的数据,实现所述计算机装置的各种功能。所述存储器1620可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1620可以包括高速随机存取存储器1620,还可以包括非易失性存储器1620,例如硬盘、内存、插接式硬盘,智能存储卡(SmartMediaCard,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所述计算机装置集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。