一种内存管理方法

文档序号:8543746阅读:439来源:国知局
一种内存管理方法
【技术领域】
[0001]本发明涉及内存管理领域,尤其涉及一种内存管理方法。
【背景技术】
[0002]垃圾回收机制(Garbage Collect1n,GC)有两个重要使命:一个是内存回收,对内存中的每个对象进行计数管理,当一个对象不再被程序引用即计数为O时,它所占用的堆空间就可以回收,以便分配给新对象使用;另外一个就是堆碎块管理,应用程序在运行过程中可能会进一步要求生成新的内存对象,经过长时间的内存生成、清理后,内存中会存在很多的堆碎块。
[0003]现有技术中一般通过压缩收集或拷贝收集的方式来进行堆碎块管理,从而实现将散乱的堆碎块收集到一个连续的内存区域,增加内存空间的利用效率。
[0004]但是,无论是压缩收集还是拷贝收集,由于所收集的都是正在被引用的活动对象,即其被正在运行的应用程序所引用,相应的应用程序会被停止运行才能完成其引用位置的转移。活动对象转移完成后才将应用程序恢复,如果应用程序停止运行的时间较长则会明显降低用户体验。

【发明内容】

[0005]本发明实施例提供了一种内存管理方法,可实现在清理预设内存的过程中,减小对正在运行在所述预设内存中的用户交互程度高的程序的影响。
[0006]本发明实施例公开了一种内存管理方法,该方法包括:
[0007]接收清理指令,所述清理指令用于触发清理预设内存;
[0008]响应所述清理指令,在所述预设内存中,分析出第一类程序引用的活动对象和第二类程序引用的活动对象;所述第一类程序的用户交互度低于或等于预设交互度阈值;所述第二类程序的用户交互度高于所述预设交互度阈值;
[0009]从所述预设内存中选取出目标区域;
[0010]将所述第一类程序引用的活动对象移动至所述目标区域,并将所述第一类程序引用的活动对象在移动之前所占内存释放。
[0011]实施本发明实施例,在清理预设内存的过程中,通过分析出运行在所述预设内存中的第一类程序和第二类程序,并将第一类程序引用的活动对象移动至目标区域,之后释放所述第一类程序引用的活动对象在移动之前所占用的内存,可实现在对预设内存进行碎片整理时,降低对运行在所述预设内存中的用户交互程度高的程序的影响,提高了用户体验。
【附图说明】
[0012]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0013]图1是本发明实施例提供的内存管理方法的第一实施例的流程图;
[0014]图2是本发明实施例提供的内存管理方法的第二实施例的流程图;
[0015]图2A是本发明实施例提供的遍历预设内存的示意图;
[0016]图3是本发明实施例提供的内存管理方法的第三实施例的流程图;
[0017]图4是本发明实施例提供的终端的第一实施例的结构示意图;
[0018]图5是本发明实施例提供的终端的第二实施例的结构示意图;
[0019]图6是本发明实施例提供的终端的第三实施例的结构示意图;
[0020]图7是本发明实施例提供的终端的第四实施例的结构示意图;
[0021]图8是本发明实施例提供的终端的第五实施例的结构示意图。
【具体实施方式】
[0022]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0023]参见图1,是本发明实施例提供的内存管理方法的第一实施例的流程图,该方法包括:
[0024]步骤SlOl:接收清理指令。
[0025]具体的,所述清理指令用于触发清理预设内存。
[0026]本发明实施例中,所述清理指令可以是用户触发终端系统提供的内存清理按钮产生的指令,例如,系统通知栏的下拉菜单中的清理按钮、桌面中的清理按钮、设置页面中的清理按钮。本发明实施例中,所述清理指令也可以是触发第三方应用提供的内存清理按钮产生的指令。本发明实施例中,所述清理指令还可以是系统在空闲时段(如锁屏、无前台应用运行等时刻)自动触发的内存清理指令。本发明实施例中,所述清理指令还可以是系统在用户设定时间触发的内存清理指令。实际应用中,系统执行内存清理的触发条件还可以是其他形式的条件,不应构成限定。
[0027]步骤S103:响应所述清理指令,在所述预设内存中,分析出第一类程序引用的活动对象和第二类程序引用的活动对象。
[0028]具体的,所述第一类程序的用户交互度可以低于或等于预设交互度阈值;所述第二类程序的用户交互度可以高于所述预设交互度阈值。
[0029]可理解的,用户交互度高的程序需要频繁地接收用户输入的数据或者向用户输出数据,或者运行在前台。例如,键盘输入事件处理程序。又例如,终端屏幕刷新程序。再例如,流媒体播放程序。示例仅仅是本发明实施例的一种实现方式,实际使用中可以不同,不应构成限定。
[0030]需要说明的,本发明实施例涉及的所述预设交互度阈值可以指程序在单位时间内占用终端的输入输出端口的次数阈值。本发明实施例涉及的所述预设交互度阈值也可以指程序占用终端的输入输出端口的时间长度阈值。本发明实施例涉及的所述预设交互度阈值还可以指程序运行在前台的时间长度阈值。对于程序的用户交互程度的计量方式,本发明实施例不作限制。
[0031]具体实现中,终端可以根据所述预设内存中的活动对象对应的程序的运行状态或输入输出端口的占用情况,分析出所述预设内存中的所述第一类程序引用的活动对象和所述第二类程序引用的活动对象。例如,所述预设交互度阈值是单位时间内占用终端的输入输出端口的次数为10次的次数阈值。那么,在单位时间内占用终端的输入输出端口的次数少于10次的程序所引用的活动对象可分析为所述第一类程序引用的活动对象。
[0032]优选的,所述第一类程序可以是当前没有占用输入输出端口的程序,所述第一类程序也可以是运行在后台的程序。需要说明的,所述第二类程序可以是预设实时通信的数据服务程序,例如,通话业务的数据同步程序。
[0033]步骤S105:从预设内存中选取出目标区域。
[0034]具体的,所述目标区域用于存放移动后的活动对象。所述目标区域的容量可以大于或等于所述预设内存中的全部活动对象所占容量。所述预设内存可以是终端的整个内存,也可以是终端的部分内存,这里不作限制。
[0035]可理解的,运行在所述预设内存中的应用程序所引用的活动对象零散的分布在所述预设内存中,因此,所述预设内存中剩下的可分配内存也是零散的内存片段。
[0036]具体实现中,所述目标区域可以是所述预设内存的任意一段内存区域,用以存放所述目标区域外的待移动的活动对象,使得被移动的活动对象在移动之前占用的空间在释放之后形成较为连续的可分配内存片段。例如,所述目标区域可以是所述预设内存的高地址端的存储区域。又例如,所述目标区域可以是所述预设内存的低地址端的存储区域。示例仅仅是本发明实施例的一种实现方式,实际使用中可以不同,不应构成限定。
[0037]优选的,所述目标区域可以是所述预设内存中使得所述目标区域外的活动对象移动到其中的移动时间最少的一段存储区域。
[0038]优选的,所述目标区域可以是所述预设内存中的一段空白的存储区域,以使所述目标区域能被移动后的活动对象填满。
[0039]优选的,所述目标区域可以是所述预设内存中包含所述第二类程序引用的活动对象最多的一段存储区域,以实现所述目标区域外的所述第一类程序引用的活动对象都被移动至所述目标区域之后,所述目标区域外的存储空间能形成比较连续的内存片段。
[0040]步
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1