一种终端内存的消耗方法及装置的制造方法

文档序号:10488863阅读:170来源:国知局
一种终端内存的消耗方法及装置的制造方法
【专利摘要】一种终端内存的消耗方法,包括:创建n个进程,所述n个进程中的第i+1进程由第i进程创建,n为不小于2的正整数,i为小于n的正整数;利用所述n个进程共同消耗终端的内存,使所述终端处于低内存状态。还提供相应的装置。该技术方案可以使终端快速达到低内存状态且稳定的处于低内存状态。
【专利说明】
一种终端内存的消耗方法及装置
技术领域
[0001]本发明涉及终端技术领域,具体涉及一种终端内存的消耗方法及装置。
【背景技术】
[0002]目前,手机的发展非常迅捷,随着手机内存越来越大,手机的性能也越来越好。为了保证手机的性能,通常需要对手机做各种测试。其中,有时候,需要使手机处于低内存状态,以便于做相关的低内存测试。
[0003]目前,通常采用在手机中安装和运行大量的app(applicat1n,应用程序),例如在采用安卓(Android)平台的手机中安装和运行大量apk(AndroidPackage,安卓安装包),来消耗Andro id平台的内存,使手机处于低内存状态。
[0004]实践发现,这种方法过程繁琐,耗时较长,且不稳定。

【发明内容】

[0005]本发明实施例提供一种终端内存的消耗方法及装置,以使终端快速达到低内存状态且稳定的处于低内存状态。
[0006]为解决上述技术问题及达到上述有益效果,本发明提供一种终端内存的消耗方法,包括:创建η个进程,所述η个进程中的第i+Ι进程由第i进程创建,η为不小于2的正整数,i为小于η的正整数;利用所述η个进程共同消耗终端的内存,使所述终端处于低内存状态。
[0007]本发明还提供一种装置,包括:进程创建模块,用于创建η个进程,所述η个进程中的第i + Ι进程由第i进程创建,η为不小于2的正整数,i为小于η的正整数;内存管理模块,用于利用所述η个进程共同消耗终端的内存,使所述终端处于低内存状态。
[0008]本发明还提供一种存储一个或多个程序的存储器,当所述一个或多个程序被包括一个或多个处理器的终端执行时,使所述终端执行如上文所述的终端内存的消耗方法。
[0009]本发明还提供一种终端,包括:一个或多个处理器;存储器;收发器;所述处理器与存储器通过总线连接,当所述终端运行时,所述处理器执行所述存储器存储的程序,以使所述终端执行如上文所述的终端内存的消耗方法。
[0010]相对现有技术,本发明一些可行的实施方式中,终端可以创建η个进程,且η个进程中的第i+Ι进程由第i进程创建,即,这η个进程是由第I个创建第2个,第2个创建第3个,直到第η个,也就是说,这η个进程为链式父子进程,这样,一方面,可以使终端快速的达到低内存状态,且方案实现简单;另一方面,可以极大降低一些进程被终端安卓平台的low memorykiller(低内存清理)杀死的风险,可以使终端稳定的处于低内存状态。
【附图说明】
[0011]为了更清楚地说明本发明实施例技术方案,下面将对现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0012]图1是本发明实施例提供的终端内存的消耗方法的流程示意图;
[0013]图2是本发明实施例中终端创建进程的具体流程图;
[0014]图3是本发明实施例的一个测试效果图;
[0015]图4是本发明实施例提供的终端内存的消耗装置的结构示意图;
[0016]图5是本发明实施例提供的终端的结构示意图。
【具体实施方式】
[0017]为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0018]如【背景技术】部分所述,目前,通常采用在手机中安装和运行大量的app,例如在采用Android平台的手机中安装和运行大量apk,来消耗Android平台的内存,使手机处于低内存状态。
[0019]然而,Android有一套内存管理机制,在手机可用内存低于某一阈值时,就会触发low memory killer(低内存清理)机制来清理一些优先级较低的进程,以释放内存。具体来说,Android是一个多任务系统,也就是说可以同时运行多个程序;一般来说,启动运行一个程序是有一定的时间开销的,因此为了加快运行速度,当退出一个程序时,Android并不会立即杀掉它,这样下次再运行该程序时,可以很快的启动;随着系统中保留的程序越来越多,内存肯定会出现不足,low memory killer就是在系统内存低于某一阈值时,清除相关的程序,保障系统保持拥有一定数量的空闲内存。
[°02°] Low memory killer根据两个原则,进程的重要性和释放这个进程可获取的空闲内存数量,来决定释放的进程。每个程序都会有一个oom_adj值,这个值越小,程序越重要,被杀的可能性越低。另外,在相同的oom_ad j下,内存大的进程,优先被杀。
[0021 ]因此,采用现有技术在Android平台中安装和运行大量apk,当消耗内存较多时,不可避免的,其中一些apk进程会被杀死,这些apk的内存会被释放,这就导致,通过运行大量apk使手机处于低内存状态的过程中,会出现进程被杀死再被运行的反复问题,过程比较繁琐,到达低内存状态的耗时较长,且一旦有进程被杀死可能就会退出低内存状态,导致低内存状态不稳定。
[0022]为解决上述问题,本发明实施例提供一种终端内存的消耗方法和相应的装置,以使终端快速达到低内存状态且稳定的处于低内存状态。
[0023]下面通过具体实施例,分别进行详细的说明。
[0024]实施例一、
[0025]请参考图1,本发明实施例提供一种终端内存的消耗方法,该方法尤其适用于采用安卓平台的终端,例如手机或平板电脑等,所述方法可包括:
[0026]110、创建η个进程,所述η个进程中的第i+Ι进程由第i进程创建,η为不小于2的正整数,i为小于η的正整数;
[0027]120、利用所述η个进程共同消耗终端的内存,使所述终端处于低内存状态。
[0028]其中,所述进程用于消耗内存,也可以称为内存消耗进程。
[0029]可选的,一些实施例中,所述η个进程为native程序的进程;其它一些实施例中,所述η个进程也可以是其它程序的进程。
[0030]可选的,所述η个native程序的执行路径可以在具有shell权限的目录,例如采用Android平台的终端的/data/local/tmp目录,该目录为shell权限的目录。
[0031]Android的每个目录都是有相应权限的,比如root(根源,最高)权限、system(系统)权限、shell (壳)权限等等。上面举例的/data/local/tmp目录的权限是she 11权限,shell权限很低,通常任何数据都可以放进去,包括用adb(Android Debug Bridge,安卓调试桥)push(推送)进去,所以选择shell权限的目录,常规的手机等终端都可以实现。
[0032]当然,所述η个native程序的执行路径也可以放到其他目录。如果终端进行了root,获得了更高的root权限,那么,native程序的执行路径也可以在具有root权限的目录,例如system/bin目录。
[0033]或者,native程序的执行路径还可以在具有system权限的目录。
[0034]可选的,可以利用所述η个进程中的每个进程占用终端内存中的pM内存,P的取值越小,进程被low memory ki Iler杀死的风险就越小,但为了提高效率,p的取值又不能太小,优选的,可以取P = 30,S卩,为每个进程分配30M内存,或者,也可以30附近的值例如20或25等。
[0035]可选的,在所述终端处于低内存状态时,即可进行低内存相关的测试。
[0036]由上可见,本发明实施例方法中,采用的技术手段主要包括:
[0037](I)所述进程可以为native程序的进程,也就是说,执行个体是native程序。
[0038]Andro id系统的实现可以分为多个层,包括:Java应用程序,Java框架层,native(本地框架)层,内核层即Linux内核空间等。native层这部分常见一些本地服务和一些链接库等。native的一个特点就是一般通过C和C++语言实现。比如要执行一个复杂运算,如果通过java代码去实现,那么效率会非常低,此时可以选择通过C或C++代码去实现,然后和上层的Java代码通信。又比如终端需要运行,那么必然要和底层的硬件驱动交互,也要通过native 层。
[0039]由于native程序介于内核与java程序之间,因此,native程序具有可控性、独立性和稳定性等特点,有助于快速、稳定的进行内存消耗。当然,本文中并不限制所述进程的程序类型,具体实现中,也可以采用其它类型程序的进程。
[0040](2)native程序的执行路径可以在/data/local/tmp目录,此目录为shell权限,这样就可以在Android user(用户)版本使用。
[0041 ] Android分为user (用户)与eng(工程)至少两种版本。普通用户使用的一般就是Android user版本。由于native程序的执行路径一般在/data/local/tmp目录,而此目录为shell权限。Shell俗称壳,用来区别于核,是指“提供使用者使用界面”的软件(命令解析器)。由于具有shell权限,这样,本发明实施例采用native程序的进程来消耗内存的方案就可以在Android user版本使用了,从而方便对普通的安卓终端进行低内存检测。
[0042](3)多个进程共同耗尽指定内存,分摊被low memory killer杀死的风险。
[0043]本发明实施例中,采用多个进程共同消耗内存,可以分摊被lowmemory killer杀死的风险。
[0044](4)内存消耗进程为链式父子进程,降低被low memory killer杀死的风险。
[0045]本发明实施例中,用于消耗内存的η个进程中,第I进程产生第2进程,第2进程产生第3进程,...第i进程产生第i+Ι进程...,或者说,进程A产生进程B,进程B产生进程C,进程C产生进程D,以此类推,所有的η个进程为链式父子进程,彼此互相关,重要性基本相同,各个进程的oom_adj值基本相同,没有oom_adj值特别低的进程,从而,可以大大降低被low memoryki I Ier杀死的风险。需要说明的是,4]1(11'01(1的每个程序都会有一个001]1_3(1」值,这个值越小,程序越重要,被杀的可能性越低。
[0046](5)每个内存消耗进程通过分配pM内存来占用终端内存,优选p = 30。
[0047]本发明实施例优选方案中,每个进程消耗的内存可以是基本相等的,例如为每个进程分配30M内存,或者说,每个进程占用终端内存中的30M内存,这样,避免部分进程由于内存占用较大而容易被杀死,多个进程可以分摊被low memory killer杀死的风险。
[0048]请参考图2,本发明一些实施例中,终端创建η个进程的具体流程图,包括:
[0049]S1、获取预先设定的阈值desired_size(所需的大小);desired_size表示最终需要的内存大小,也就是说,运行η个进程后的空闲内存的大小。
[0050]可选的,所述阈值默认为low memory killer的阈值。不同的终端中,low memorykiller的阈值可能是不同的。
[0051]S2、判断当前的空闲内存是否大于所述阈值,若是,则进入步骤S3,否则结束;
[0052]本步骤中,判断当前的空闲内存(Free_RAMSize)是否大于阈值desired_size,即,判断Free_RAMSize>desired_size是否成立,如果成立,说明空闲内存过大,尚未到达低内存状态,则需要进入步骤S3创建内存消耗进程。
[0053]反之,如果判断当前的空闲内存不大于所述阈值,说明空闲内存较小,已经到达低内存状态,不需要再消耗内存,因此不必再继续创建内存消耗进程,流程至此即可结束。
[0054]S3、创建进程,包括:在当前没有进程时,创建第I进程;在当前已有第i进程时,利用当前的第i进程创建第i+Ι进程。
[0055]本步骤中,创建内存,容易理解,在当前没有进程时,终端创建第I进程;在当前已经有进程,且当前进程为第i进程时,则利用当前的第i进程创建第i+Ι进程,以实现链式父子进程的创建。其中,每创建一个进程后,例如创建第I进程或第i+Ι进程后,第I进程或第i+I进程可以通过例如mal 1c函数向Android系统申请一定量的内存例如30M内存。
[0056]本步骤完成一个进程的创建后,返回步骤S2,通过判断当前的空闲内存来判断是否已经处于低内存状态,根据判断结果继续流程,整个流程是一个while()循环流程,最终判断终端处于低内存状态时,结束流程。然后,即可开始进行各种低内存相关的测试了。
[0057]需要说明的是,当上述阈值过小时,如果继续创建的进程的内存过大,有可能使整个手机的剩余内存变为0,导致手机死机或卡死。为了避免该情况,可选的,本发明实施例中可以设定一个最小值例如100M,步骤S2中判断当前的空闲内存大于所述阈值时,还进一步判断当前的空闲内存是否大于100M,如果是,才进入步骤S3,否则结束。也就是说,要同时满足以下两个关系式:
[0058]Free_RAMSize>desired_size;
[0059]Free_RAMSize>100M;
[0060]才进入步骤S3,创建内存消耗进程。
[0061 ]这样可以避免整个手机的内存被完全消耗导致死机或卡死。
[0062]需要说明的是,上述设为100M的最小值仅为示例,实际应用中,也可以更改为其它值例如150M,或者120M等等。
[0063]本文中,还示出了对本发明实施例技术方案的验证结果:
[0064]请参考图3所示的测试效果图,在一个应用例中,假设mvg_app为内存消耗进程的名字,则最终达到的效果如图3所示。图3中:第一个虚线框为内存消耗进程的进程id;第二个虚线框为内存消耗进程的父进程id;第三个虚线框为每个内存消耗进程的占用内存的大小,大概为30M。可见,可以轻易的使手机达到且稳定的处于低内存状态。
[0065]可以理解,本发明实施例上述方案例如可以在手机等终端设备具体实施。
[0066]综上,相对现有技术,本发明一些可行的实施方式中,终端创建η个进程,且η个进程中的第i+Ι进程由第i进程创建,即,这η个进程是由第I个创建第2个,第2个创建第3个,直到第η个,也就是说,这η个进程为链式父子进程,这样,一方面,可以使终端快速的达到低内存状态,且方案实现简单;另一方面,可以极大降低一些进程被终端安卓平台的low memorykiller杀死的概率,可以使终端稳定的处于低内存状态;再一方面,所述进程可以是native程序的进程,这样整个方案可应用于Android user版本。
[0067]为了更好的实施本发明实施例的上述方案,下面还提供用于配合实施上述方案的相关装置。
[0068]实施例二、
[0069]请参考图4,本发明实施例提供一种终端内存的消耗装置,可包括:
[0070]进程创建模块410,用于创建η个进程,所述η个进程中的第i + Ι进程由第i进程创建,η为不小于2的正整数,i为小于η的正整数;
[0071]内存管理模块420,用于利用所述η个进程共同消耗终端的内存,使所述终端处于低内存状态。
[0072]在本发明一些实施例中,所述η个进程为native程序的进程。
[0073]在本发明一些实施例中,所述native程序的执行路径在具有shell权限的目录。
[0074]在本发明一些实施例中,所述进程创建模块410包括:
[0075]获取单元,用于获取预先设定的阈值;
[0076]判断单元,用于判断当前的空闲内存是否大于所述阈值,若是,则指示创建单元创建进程,否则结束;
[0077]所述创建单元,用于在所述判断单元判断为是时创建进程,包括:在当前没有进程时,创建第I进程;在当前已有第i进程时,利用当前的第i进程创建第i+Ι进程。
[0078]在本发明一些实施例中,所述判断单元,具体用于判断当前的空闲内存是否大于所述阈值,若是,则进一步判断当前的空闲内存是否大于100M,若是,则指示创建单元创建进程,否则结束,其中,所述阈值为low memory killer的阈值。
[0079]本发明实施例终端内存的消耗装置例如可以是手机等终端设备或者可以是终端设备上运行的功能实体。
[0080]可以理解,本发明实施例的终端内存的消耗装置的各个功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述方法实施例中的相关描述,此处不再赘述。
[0081]由上可见,在本发明的一些可行的实施方式中,终端创建η个进程,且η个进程中的第i+Ι进程由第i进程创建,即,这η个进程是由第I个创建第2个,第2个创建第3个,直到第η个,也就是说,这η个进程为链式父子进程,这样,一方面,可以使终端快速的达到低内存状态,且方案实现简单;另一方面,可以极大降低一些进程被终端安卓平台的low memorykiller杀死的概率,可以使终端稳定的处于低内存状态;再一方面,所述进程可以是native程序的进程,这样整个方案可应用于Android user版本。
[0082]实施例三、
[0083]本发明实施例还提供一种存储一个或多个程序的存储器,所述一个或多个程序包括执行如上述实施例所述的终端内存的消耗的指令,当所述一个或多个程序被包括一个或多个处理器的终端执行时,使所述终端执行如上文实施例所述的终端内存的消耗。
[0084]实施例四、
[0085]请参考图5,本发明实施例还提供一种终端500,该终端500可包括:
[0086]一个或多个处理器501;存储器502 ;总线504 ;收发器505 ;以及一个或多个程序503,其中所述一个或多个程序被存储在所述存储器502中并被配置为被所述一个或多个处理器501执行,所述一个或多个程序503包括用于执行如上文方法实施例所述的终端内存的消耗方法。其中,所述处理器501与存储器502可通过总线504连接。当所述终端500运行时,所述处理器501执行所述存储器502存储的所述程序503,以使所述终端500执行如上文方法实施例所述的终端内存的消耗方法。
[0087]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
[0088]需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
[0089]本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:R0M、RAM、磁盘或光盘等。
[0090]以上对本发明实施例所提供的终端内存的消耗方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【主权项】
1.一种终端内存的消耗方法,其特征在于,包括: 创建η个进程,所述η个进程中的第i + Ι进程由第i进程创建,η为不小于2的正整数,i为小于η的正整数; 利用所述η个进程共同消耗终端的内存,使所述终端处于低内存状态。2.根据权利要求1所述的方法,其特征在于, 所述η个进程为native程序的进程。3.根据权利要求2所述的方法,其特征在于, 所述native程序的执行路径在具有shell权限的目录。4.根据权利要求1所述的方法,其特征在于,所述终端创建η个进程,所述η个进程中的第i+Ι进程由第i进程创建包括: 51、获取预先设定的阈值; 52、判断当前的空闲内存是否大于所述阈值,若是,则进入步骤S3,否则结束; 53、创建进程,包括:在当前没有进程时,创建第I进程;在当前已有第i进程时,利用当前的第i进程创建第i+Ι进程; 返回步骤S2。5.根据权利要求4所述的方法,其特征在于,所述步骤S2具体包括: 判断当前的空闲内存是否大于所述阈值,若是,则进一步判断当前的空闲内存是否大于100M,若是,则进入步骤S3,否则结束; 其中,所述阈值为低内存清理low memory killer的阈值。6.一种终端内存的消耗装置,其特征在于,包括: 进程创建模块,用于创建η个进程,所述η个进程中的第i + Ι进程由第i进程创建,η为不小于2的正整数,i为小于η的正整数; 内存管理模块,用于利用所述η个进程共同消耗终端的内存,使所述终端处于低内存状??τ O7.根据权利要求6所述的装置,其特征在于, 所述η个进程为native程序的进程。8.根据权利要求7所述的装置,其特征在于, 所述native程序的执行路径在具有shell权限的目录。9.根据权利要求6所述的装置,其特征在于,所述进程创建模块包括: 获取单元,用于获取预先设定的阈值; 判断单元,用于判断当前的空闲内存是否大于所述阈值,若是,则指示创建单元创建进程,否则结束; 所述创建单元,用于在所述判断单元判断为是时创建进程,包括:在当前没有进程时,创建第I进程;在当前已有第i进程时,利用当前的第i进程创建第i+Ι进程。10.根据权利要求9所述的装置,其特征在于, 所述判断单元,具体用于判断当前的空闲内存是否大于所述阈值,若是,则进一步判断当前的空闲内存是否大于100M,若是,则指示创建单元创建进程,否则结束,其中,所述阈值为低内存清理low memory killer的阈值。
【文档编号】G06F11/36GK105843735SQ201610158390
【公开日】2016年8月10日
【申请日】2016年3月18日
【发明人】莫斯挺
【申请人】广东欧珀移动通信有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1