一种内存回收方法及装置的制造方法_3

文档序号:9921966阅读:来源:国知局
,按 照预设的内存回收时间间隔触发内存回收,实现对内存进行有计划的回收,使终端内可用 空闲内存保持在一个较佳的水平。这里,预设的内存回收时间间隔可以为一个,也可以为多 个,比如,若用户全天使用应用的频率及内存占用量都比较稳定,可以只设置一个内存回收 时间间隔。或者,若用户全天只集中在一个时间段内使用应用,且使用应用的频率比较稳 定,则可以只设置在这一个时间段内的内存回收时间间隔,在其它时间段不进行内存回收。 若用户在一天内的不同时间段使用应用的频率区别较大,则可以在一天内的不同时间段使 用不同的内存回收时间间隔。除此之外,还可以设置系统内空闲内存小于一定阈值时触发 内存回收(即根据终端内安装的应用的内存占用信息触发内存回收)、在监测到有应用被启 动或切换到前台界面时,根据该应用的内存占用信息以及系统内空闲内存大小触发内存回 收(即根据应用被用户操作使用的信息及内存占用信息触发内存回收)、在监测到终端内存 在应用在后台停留的时间长度超过设定时长时触发内存回收(即根据应用被用户操作使用 的信息触发内存回收)等。
[0097] S203:根据所述终端内当前正在运行的应用被用户操作使用的信息及内存占用信 息,从所述终端当前正在运行的应用中确定将被回收内存的应用,并通过调用内核态提供 的内存回收接口执行内存回收。
[0098]这里,S201及S202中的终端内安装的应用包括S203中的终端内当前正在运行的应 用,除S203中的终端内当前正在运行的应用之外,终端内安装的应用还包括当前处于关闭 状态的应用。
[0099] 在具体实施中,在用户态通过内核态提供的内存回收接口,调用内核态的内存回 收程序进行内存回收,该内存回收接口可以基于系统调用、linux procfs文件系统、或 linux sysfs文件系统等来实现。
[0100] 在linux系统中,内核态现有的内存回收管理是基于LRU算法实现的,它将应用占 用的内存分成匿名页(比如通过动态内存分配(malloc)函数分配的内存)和文件页(比如读 写文件时分配的内存)两大类,并根据LRU算法将最近不常使用的内存放到一个链表中,每 次回收时收缩该链表,回收一部分内存页面(主要是页面缓存(page cache))。内核态用于 内存回收的底层函数是1^7_1:0_;^66_口3868〇,本申请将这个函数接口暴露给用户态调用, 在用户态基于本申请提供的内存回收策略,通过调用这个函数接口实现内存回收。
[0101] 实施例二
[0102] 下面,介绍本申请的一种优选的实施方式:通过统计所述终端内安装的应用被用 户操作使用的信息及内存占用信息,确定内存回收时间间隔,基于确定的内存回收时间间 隔进行内存回收。
[0103] 如图3所示,为本申请实施例二提供的内存回收方法流程图,在用户态执行以下步 骤:
[0104] S301:监控终端内安装的应用被用户操作使用的信息及内存占用信息。
[0105] 在具体实施中,通过在用户态实时监测终端系统内各个应用的运行状态,统计用 户对应用的使用频率、使用时间段等应用被用户操作使用的信息,以及应用运行时占用的 内存大小等内存占用信息。
[0106] S302:根据所述终端内安装的应用被用户操作使用的信息及内存占用信息,确定 内存回收时间间隔。
[0107] 这里,可以根据在S301统计得到的各个应用被用户操作使用的信息及内存占用信 息,确定内存回收时间间隔。该内存回收时间间隔可以为一个,也可以为多个,比如,若用户 全天使用应用的频率及内存占用量都比较一致,则可以只设置一个内存回收时间间隔。若 用户在一天内的不同时间段使用应用的频率不同,则可以在一天内的不同时间段使用不同 的内存回收时间间隔,比如可以在应用使用频繁、占用的内存量较大的时间段内加快内存 回收频率,相反,可以在应用使用次数较少,占用的内存量较小的时间段内减少内存回收频 率。
[0108] 在具体实施中,可以依经验,预设几个时间段,确定在每个预设的时间段内,终端 内安装的应用被用户操作使用的信息及内存占用信息;根据在每个预设的时间段内,终端 内安装的应用被用户操作使用的信息及内存占用信息,确定在每个预设的时间段内的内存 回收时间间隔。
[0109] 比如,以一天为粒度,预设9:00-17:00、17:00-23:00、23:00-9:00这几个时间段, 分别统计在这几个时间段内应用被用户操作使用的信息及内存占用信息,比如,在17:00-23:00这个时间段内,用户对应用的使用最为频繁,应用占用的内存大小也最大,可以将该 时间段的内存回收时间间隔设为〇. 5h;在9:00-17:00这个时间段内,用户对应用的使用频 次居中,占用的内存大小也居中,可以将该时间段的内存回收时间间隔设为lh;在23:00-9: 00这个时间段内,用户对应用的使用频次最低,占用的内存大小也最小,可以将该时间段的 内存回收时间间隔设为3h。再比如,还可以考虑在一周时间内的工作日和非工作日对应用 使用情况的不同,分别为工作日和非工作日设置不同的内存回收时间间隔;比如,用户在周 六、日使用应用的频率明显比工作日使用应用的频率频繁,则可以在周一~周五仍使用上 述内存回收时间间隔,在周六、日加快内存回收频率,比如,在周六、日分别将在9:00-17: 00、17:00-23:00、23:00-9:00这几个时间段内的内存回收时间间隔减半,也即,将在17:00-23:00这个时间段内的内存回收时间间隔设为0.25h,将在9:00-17:00这个时间段内的内存 回收时间间隔设为〇. 5h,将在23:00-9:00这个时间段内的内存回收时间间隔设为1.5h。
[0110] S303:若根据所述内存回收时间间隔确定当前需要进行内存回收,则根据所述终 端内当前正在运行的应用被用户操作使用的信息及内存占用信息,从所述终端当前正在运 行的应用中确定将被回收内存的应用。这里,为了保证用户对应用的正常使用,用户当前正 在使用的应用不被考虑进行内存回收,用户正在使用的应用可以包括前台应用,还可以包 括如文件下载等在后台运行的应用。 S304:通过调用内核态提供的内存回收接口执行内存回收。
[0112] 在具体实施中,根据确定的内存回收时间间隔,当达到内存回收时间时,针对终端 内当前正在运行的、用户没在操作使用的应用,若当前时间也不在统计的该应用被用户使 用的概率较大的时间范围内,则可以回收该应用的内存,这样,依次选择应用进行内存回 收,直到满足内存回收的终止条件。
[0113] 作为一种实施方式,在确定当前需要进行内存回收后,可以按照预先保存的被回 收内存的应用的优先级顺序,选择终端内当前正在运行的、用户没有在操作使用的应用,确 定当前时间是否位于选择的应用的高概率使用时间段(也即应用被用户操作使用的概率较 高的时间段),该应用的高概率使用时间段为基于该应用被用户操作使用的信息确定的(比 如用户在连续5天内的每天中午12:00~13:00之间使用该应用,则12:00~13:00即为该应 用的高概率运行时间段);若不是,则确定选择的应用为被回收内存的应用,如此重复,直到 满足内存回收的终止条件。这里,所述内存回收的终止条件可以包括指系统内空闲内存大 小大于第二设定阈值。
[0114] 上述优先级顺序可以是不同应用分组之间的优先级顺序。具体地,可以按照终端 内安装各个应用的使用频率,对各个应用进行分组,其中,同组内的应用具有相同的使用频 率范围;根据每个分组对应的使用频率范围,确定各个分组内的应用被回收内存的优先级 顺序;其中,同组内的应用具有相同的优先级顺序。比如,某些应用可能涉及终端内操作系 统的关键要素,如用户界面(User Interface,UI),可以将这类应用归于组(group) 1,表示 非常重要的应用;对于一些用户经常使用的应用,如微信、相机等,可以将这类应用归于 gr〇up2,表示为一般重要的应用;对于另一些不常使用的应用,如计算器、股票等,可以将这 类应用归于group3,表示不重要的应用;设置group3的内存回收优先级〉group2的内存回收 优先级〉group 1的内存回收优先级,在内存回收时,优先考虑回收group3中的应用的内存, 次要考虑回收group2中的应用的内存,不回收groupl中的应用的内存。
[0115]实施例三
[0116]为了进一步优化内存回收策略,保证内存回收的及时性和合理性,本申请实施例 进一步给出了使用多种内存回收条件执行内存回收的实施方式。
[0117] 如图4所示,为本申请实施例三提供的内存回收方法流程图,在用户态执行:
[0118] S401:监控终端内安装的应用被用户操作使用的信息及内存占用信息。
[0119] S402:根据所述终端内安装的应用被用户操作使用的信息及内存占用信息,确定 内存回收时间间隔。
[0120] S403:当满足以下条件一~四中的任意一个或多个时,触发S404的内存回收流程, 当满足条件五时,触发S405的内存回收流程:
[0121] -、根据所述内存回收时间间隔确定当前需要进行内存回收;
[0122] 在具体实施中,还可以结合系统内空闲内存判断当前是否需要进行内存回收,也 即在当前到达内存回收时间间隔指示的内存回收时间时,若系统内空闲内存小于某一阈值 (该阈值可以是下述第一设定阈值、或第二设定阈值、或其它阈值,比如位于第一设定阈值 和第二设定阈值之间(第一设定阈值小于第二设定阈值)的某一阈值),则可以进行内存回 收。
[0123] 二、监测到系统内空闲内存小于第一设定阈值;
[0124] 三、当监测到有应用被启动或切换到前台界面时,根据该应用的内存占用信息,以 及系统内空闲内存大小,确定当前需要进行内存回收;
[0125] 这里,当新启动或切换到前台界面的应用需要的内存大小大于系统内空闲内存 时,立即触发内存回收。
[0126] 四、在后台运行的应用的个数Μ大于当前设置的允许后台运行应用的个数N;
[0127] 在具体实施中,可以根据当前系统内空闲内存的大小,设置允许后台运行应用的 个数。
[0128] 五、监测到终端内存在应用在后台停留的时间长度超过设定时长。
[0129] 需要说明的是,对于上述条件二~五,本领域技术人员根据实际需要可以只选择 执行其中的部分条件。
[0130] S404:根据终端内当前正在运行的应用被用户操作使用的信息及内存占用信息, 从所述终端当前正在运行的、用户没有在操作使用的应用中确定将被回收内存的应用,并 通过调用内核态提供的内存回收接口执行内存回收。
[0131]在具体实施中,终端系统启动后,首先启动本申请用于内存回收的用户态的守护 进程,然后启动各个应用,并维护一张应用运行数据表,记录终端内应用的内存占用情况, 及统计的高概率运行时间段,如下表一所示。
[0133] 表一
[0134] 若确定当前需要进行内存回收,则可以按照预先保存的被回收内存的应用的优先 级顺序,选择终端内当前正在运行的应用,查看表一,判断当前时间是否位于选择的应用的 高概率使用时间段;若不是,则将选择的该应用选取为被回收内存的应用,并通过调用内核 态提供的用于内存回收的
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1