买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种内存管理方法、装置及终端_腾讯科技(深圳)有限公司_201910188006.9 

申请/专利权人:腾讯科技(深圳)有限公司

申请日:2019-03-13

公开(公告)日:2024-04-12

公开(公告)号:CN110413912B

主分类号:G06F16/957

分类号:G06F16/957

优先权:

专利状态码:有效-授权

法律状态:2024.04.12#授权;2020.12.04#实质审查的生效;2019.11.05#公开

摘要:本发明公开了一种内存管理方法、装置及终端,其中内存管理方法包括:监测滑动列表的滑动事件;当监测到所述滑动事件时,确定滑动列表中离开目标缓存窗口的第一滑动单元,以及进入目标缓存窗口的第二滑动单元;所述目标缓存窗口包括从滑动列表覆盖的可视区域的周侧外缘向所述滑动列表的滑动方向延伸出的区域;回收第一滑动单元对应的第一数据项所占用的目标内存,以及将第二滑动单元对应的第二数据项加载到目标内存。本发明将滑动列表对应的整个数据源在目标内存中的占用量固定为位于目标缓存窗口的滑动单元对应的数据源所占用的内存,减小了整个数据源对目标内存的占用量,降低了应用因内存不足而出现错误的概率。

主权项:1.一种内存管理方法,其特征在于,所述方法包括:监测滑动列表的滑动事件;当监测到所述滑动事件时,获取所述滑动事件的滑动速度,基于滑动速度与滑动单元数量的映射关系,确定与所述滑动事件的滑动速度相匹配的目标滑动单元数量;基于所述目标滑动单元数量与单个滑动单元的高度的乘积,得到目标缓存窗口的延伸长度;根据所述滑动列表的滑动方向,获取所述滑动列表覆盖的可视区域的可视区域长度;计算所述可视区域长度与所述延伸长度的和值,基于所述和值得到所述目标缓存窗口在所述滑动方向上的总长度,以生成所述目标缓存窗口;所述目标缓存窗口包括从所述滑动列表覆盖的可视区域的周侧外缘向所述滑动列表的滑动方向延伸出的两个区域;确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元;回收所述第一滑动单元对应的第一数据项所占用的目标内存,以及将所述第二滑动单元对应的第二数据项加载到所述目标内存。

全文数据:一种内存管理方法、装置及终端技术领域本发明涉及计算机技术领域,特别涉及一种内存管理方法、装置及终端。背景技术随着移动互联网技术的发展,人们越来越多的通过移动终端中安装的各种应用来获得信息以及相互交流,例如,在各种社交应用,用户可以在关注页面获得关注对象最近上传到社交应用中的各种短视频、照片等。在实现本发明的过程中,发明人发现现有技术中至少存在以下缺陷:相关技术中,终端在进行用户关注页面的展示时,需要将关注页面的数据都加载到内存中,并生成对应这部分数据的滑动列表,通过用户对滑动列表的滑动操作,依序显示滑动列表覆盖的可视区域中显示的滑动单元,从而实现滑动单元中的数据项的依序展示。然而,用户的关注页面中的关注对象通常有很多个,每个关注对象对应的数据均包括个人信息数据以及若干个最近上传的信息数据如视频数据等,并且每个上传的信息数据还对应有评论数据、点赞数据等等,从而导致关注页面在展示时会占用大量的内存,增加了应用因内存不足而出现错误的概率。发明内容为了解决现有技术的问题,本发明实施例提供了一种内存管理方法、装置及终端。所述技术方案如下:一方面,提供了一种内存管理方法,所述方法包括:监测滑动列表的滑动事件;当监测到所述滑动事件时,确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元;所述目标缓存窗口包括从所述滑动列表覆盖的可视区域的周侧外缘向所述滑动列表的滑动方向延伸出的区域;回收所述第一滑动单元对应的第一数据项所占用的目标内存,以及将所述第二滑动单元对应的第二数据项加载到所述目标内存。另一方面,提供了一种内存管理装置,所述装置包括:监测模块,用于监测滑动列表的滑动事件;第一确定模块,用于当监测到所述滑动事件时,确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元;所述目标缓存窗口包括从所述滑动列表覆盖的可视区域的周侧外缘向所述滑动列表的滑动方向延伸出的区域;回收模块,用于回收所述第一滑动单元对应的第一数据项所占用的目标内存;第一加载模块,用于将所述第二滑动单元对应的第二数据项加载到所述目标内存。另一方面,提供了一种终端,包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述的内存管理方法。本发明实施例提供的技术方案带来的有益效果是:本发明实施例通过监测滑动列表的滑动事件,当监测到滑动事件时,确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元,回收所述第一滑动单元对应的第一数据项所占用的目标内存,以及将所述第二滑动单元对应的第二数据项加载到所述目标内存,其中的目标缓存窗口包括从滑动列表覆盖的可视区域的周侧外缘向所述滑动列表的滑动方向延伸出的区域,从而将滑动列表对应的整个数据源在目标内存中的占用量固定为位于目标缓存窗口的滑动单元对应的数据源所占用的内存,减小了整个数据源对目标内存的占用量,降低了应用因内存不足而出现错误的概率。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的一种应用场景的示意图;图2是本发明实施例提供的一种内存管理方法的流程示意图;图3是本发明实施例提供的支持纵向滑动的滑动列表的示意图;图4是本发明实施例提供的支持横向滑动的滑动列表的示意图;图5是本发明实施例提供的目标缓存窗口的生成方法的一种流程示意图;图6是本发明实施例提供的另一种内存管理方法的流程示意图;图7是本发明实施例提供的回收所述第一滑动单元对应的第一数据项所占用的目标内存的方法的一种流程示意图;图8是本发明实施例提供的根据所述序列化列表中第一数据项标识的数量,确定对所述第一数据项执行序列化的方法的一种流程示意图;图9是本发明实施例提供的将所述第二滑动单元对应的第二数据项加载到所述目标内存的方法的一种流程示意图;图10是本发明实施例提供的根据所述反序列化列表中第二数据项标识的数量,确定对所述第二数据项对应的序列化数据执行反序列化的方法的一种流程示意图;图11是本发明实施例提供的另一种内存管理方法的流程示意图;图12是本发明实施例提供的一种内存管理装置的结构示意图;图13是本发明实施例提供的另一种内存管理装置的结构示意图;图14是本发明实施例提供的回收模块的一种结构示意图;图15是本发明实施例提供的第一加载模块的一种结构示意图;图16是本发明实施例提供的另一种内存管理装置的结构示意图;图17是本发明实施例提供的另一种内存管理装置的结构示意图;图18是本发明实施例提供的一种终端的结构示意图。具体实施方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。请参阅图1,其所示为本发明实施例提供的一种应用场景示意图,在该应用场景中,终端显示有一个应用中用户的关注页面位于终端可视区域的数据信息,该关注页面中包含的关注对象的数据信息可以包括关注对象的个人信息、关注对象上传的视频信息以及视频信息对应的播放量、评论、点赞等信息。现有技术中,一般将关注页面的数据信息全部加载到内存中,并创建对应的滑动列表,该滑动列表一般包括多个展示数据项的滑动单元,当滑动该滑动列表时,可以依序显示滑动列表覆盖的可视区域中显示的滑动单元,从而实现这部分滑动单元中的数据项的依序展示,如图1中的可视区域中显示的滑动单元。由上述可知,关注页面中每个关注对象就对应一个比较大的数据信息量,当用户的关注对象的数量比较多如数量达到200个以上时,关注页面对应的数据信息量将会非常大。如果在关注页面的展示过程中,将这部分数据全部加载到内存中,则会占用大量的内存空间,增加应用因内存不足而出现错误的概率。鉴于此,本发明实施例提供一种内存管理方法,该方法通过将滑动列表对应的整个数据源在内存中的占用量固定为位于目标缓存窗口的滑动单元对应的数据源所占用的内存,从而减小了整个数据源对内存的占用量,降低了应用因内存不足而出现错误的概率。请参阅图2,其所示为本发明实施例提供的一种内存管理方法的流程示意图,该方法可以应用于图1所示的终端中。该终端可以包括但不限于PCPersonalComputer,个人计算机、PDA平板电脑、智能手机、智能可穿戴设备等等。需要说明的是,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行例如并行处理器或者多线程处理的环境。具体的如图2所示,所述方法包括:S201,监测滑动列表的滑动事件。在本说明书实施例中,滑动列表可以包括支持纵向滑动的滑动列表,也可以包括支持横向滑动的滑动列表。当滑动列表为支持纵向滑动的滑动列表时,所述滑动列表的滑动事件可以包括向上滑动所述滑动列表以及向下滑动所述滑动列表;当滑动列表为支持横向滑动的滑动列表时,所述滑动列表的滑动事件可以包括向左滑动所述滑动列表以及向右滑动所述滑动列表。S203,当监测到所述滑动事件时,确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元。在本说明书实施例中,所述目标缓存窗口包括从所述滑动列表覆盖的可视区域的周侧外缘向所述滑动列表的滑动方向延伸出的区域。具体的,目标缓存窗口可以是可视区域与所述延伸出的区域的组合区域,所述延伸出的区域的位置可以根据滑动列表的滑动事件确定。以滑动列表为支持纵向滑动为例,当滑动事件为向上滑动或者向下滑动时,可以确定滑动列表的滑动方向为上下滑动,此时目标缓存窗口可以包括从可视区域的上边界外缘向上延伸出的区域以及从可视区域的下边界外缘向下延伸出的区域。如图3所示的滑动列表的滑动方向为上下滑动时,目标缓存窗口包括3个部分区域,其中区域1为从可视区域的上边界外缘向上延伸出的区域,区域2为从可视区域的下边界外缘向下延伸出的区域,区域3为可视区域。实际应用中,区域1和区域2的大小可以相同也可以不同,优选的,区域1与区域2的大小相同。以滑动列表为支持横向滑动为例,当滑动事件为向左滑动或者向右滑动时,可以确定滑动列表的滑动方向为左右滑动,此时目标缓存窗口可以包括从可视区域的左边界外缘向左延伸出的区域以及从可视区域的右边界外缘向右延伸出的区域。如图4所示的滑动列表的滑动方向为左右滑动时,目标缓存窗口可以包括3个部分,其中区域1为从可视区域的左边界外缘向左延伸出的区域,区域2为从可视区域的右边界外缘向右延伸出的区域,区域3为可视区域。实际应用中,区域1和区域2的大小可以相同也可以不同,优选的,区域1与区域2的大小相同。实际应用中,目标缓存窗口可以是固定的区域大小,也可以是动态变化的区域大小。由于滑动事件的滑动速度有快有慢,当滑动速度快时,单位时间内可视区域展示的滑动单元数量较多,为了提高终端的响应速度,防止在滑动速度快时,出现页面闪动的现象,在本说明书实施例中,目标缓存窗口优选的为动态变化的区域大小。具体的,如图5所示,在确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元之前,所示方法还可以包括:S501,获取所述滑动事件的滑动速度。具体的,当监测到滑动列表的滑动事件时,可以获取滑动事件的滑动速度,该滑动速度可以是滑动事件的平均速度,也可以是对应滑动事件中的最大速度和最小速度的速度区间。S503,从预设的滑动速度与缓存窗口参数的对应关系中,获取与所述滑动事件的滑动速度相对应的目标缓存窗口参数。在本说明书实施例中,可以预先建立滑动速度与缓存窗口参数的对应关系,该对应关系中的滑动速度可以是具体的速度值,也可以是一个速度范围;该对应关系中的缓存窗口参数可以包括缓存窗口对应的延伸长度。一般滑动速度越大,对应的延伸长度越长;反之,滑动速度越小,对应的延伸长度越小。在一个具体实施例中,可以将缓存窗口对应的延伸长度细化为滑动单元的线性函数,即L延伸长度=A*X滑动单元数,其中,X滑动单元数可以表示与滑动速度相对应的滑动单元数量,该滑动单元数量大于等于1,A表示单个滑动单元的高度,一般为固定数值。如此,可以将建立的滑动速度与缓存窗口参数的对应关系细化为滑动速度与滑动单元数量的映射关系。当获取到滑动事件的滑动速度后,可以基于该滑动事件的滑动速度查找滑动速度与滑动单元数量的映射关系以得到相匹配的目标滑动单元数量,再基于L延伸长度=A*X滑动单元数确定目标缓存窗口参数。S505,获取所述滑动列表覆盖的可视区域的可视区域参数。在本说明书实施例中,滑动列表覆盖的可视区域的可视区域参数可以包括可视区域的纵向长度以及可视区域的横向长度。S507,根据所述目标缓存窗口参数以及所述可视区域参数,生成所述目标缓存窗口。在本说明书实施例中,目标缓存窗口覆盖可视区域且包括从可视区域周侧外缘向滑动列表的滑动方向延伸出的区域。具体的,可以根据滑动列表的滑动方向确定可视区域参数为可视区域的纵向长度或者可视区域的横向长度,然后计算可视区域参数与目标缓存窗口参数的和值,将该和值作为目标缓存窗口在滑动方向上的总长度,以确定目标缓存窗口的大小。当滑动列表为支持纵向滑动的滑动列表时,滑动事件的滑动方向包括上下滑动,则目标缓存窗口在纵向上的长度可以为可视区域的纵向长度与目标缓存窗口参数的和值,目标缓存窗口在横向上的长度可以为可视区域的横向长度;当滑动列表为支持横向滑动的列表时,滑动事件的滑动方向包括左右滑动,则目标缓存窗口在纵向上的长度可以为可视区域的纵向长度,目标缓存窗口在横向上的长度可以为可视区域的横向长度与目标缓存窗口参数的和值。在本说明书实施例中,通过将目标缓存窗口设定为与滑动列表的滑动速度相关联的动态窗口大小,从而在滑动速度快时,可以得到一个比较大的目标缓存窗口,将更多的位于可视区域附近的滑动单元对应的数据项加载到目标内存中,避免了可视区域中显示的滑动单元快速更新时出现的页面闪动的现象;而在滑动速度慢时,维持一个比较小的目标缓存窗口,将少量的位于可视区域附近的滑动单元对应的数据项加载到目标内存中,在避免页面闪动的现象的同时,减少了对目标内存的占用。在本说明书实施例中,可以通过比对滑动事件前后的目标缓存窗口中的滑动单元来确定离开目标缓存窗口的第一滑动单元,以及进入目标缓存窗口的第二滑动单元。具体的,若滑动单元存在于滑动事件前对应的目标缓存窗口中,而不存在于滑动事件后对应的目标缓存窗口中,则可以确定该滑动单元为第一滑动单元;若滑动单元不存在于滑动事件前对应的目标缓存窗口中,而存在于滑动事件后对应的目标缓存窗口中,则可以确定该滑动单元为第二滑动单元。当然,还可以通过其他的方式来确定离开目标缓存窗口的第一滑动单元,以及进入目标缓存窗口的第二滑动单元。例如,可以基于目标缓存窗口建立坐标系,根据滑动列表中滑动单元的坐标的变化来确定第一滑动单元和第二滑动单元。以支持纵向滑动的滑动列表为例,可以以目标缓存窗口的左下角为坐标原点建立直角坐标系,则目标缓存窗口下边界的纵坐标为0,根据目标缓存窗口在滑动方向的宽度可以确定目标缓存窗口上边界的纵坐标为y上=width,则当滑动单元的上边界的纵坐标在滑动事件中由负值变为正值,可以确定该滑动单元为进入目标缓存窗口的第二滑动单元;当滑动单元的下边界的纵坐标由小于y上变为大于或者等于y上,则可以确定该滑动单元为离开目标缓存窗口的第一滑动单元。支持横向滑动的滑动列表也可以采用上述类似的方法进行确定,只不过其基于的是滑动单元的横坐标的变化,在此不再赘述。S205,回收所述第一滑动单元对应的第一数据项所占用的目标内存,以及将所述第二滑动单元对应的第二数据项加载到所述目标内存。在本说明书实施例中,滑动列表中位于目标缓存窗口中的滑动单元对应的数据项均已加载到目标内存中,即位于目标缓存窗口中的滑动单元中加载有对应的数据项,而滑动列表中位于目标缓存窗口之外的滑动单元对应的数据项均未加载到目标内存。实际应用中,如图6所示,可以在步骤S201,监测滑动列表的滑动事件之前,执行步骤S601,确定滑动列表中位于目标缓存窗口的滑动单元,以及步骤S603,将所述位于目标缓存窗口的滑动单元对应的数据项加载到目标内存,所述目标内存用于存储所述目标缓存窗口中的滑动单元对应的数据项。当监测到滑动事件,确定了第一滑动单元和第二滑动单元后,可以将离开目标缓存窗口的第一滑动单元对应的第一数据项所占用的目标内存进行回收,以及将进入目标缓存窗口的第二滑动单元对应的第二数据项加载到所述目标内存中。需要说明的是,第一数据项可以包括加载到目标内存的数据源数据以及基于该数据源数据渲染得到的渲染数据,第二数据项可以包括数据源数据。具体的,回收所述第一滑动单元对应的第一数据项所占用的目标内存可以采用图7所示的方法,该方法可以包括:S701,获取第一滑动单元中加载的第一数据项的第一数据项标识。在本说明书实施例中,在根据数据源建立滑动列表时,可以为滑动列表中的每个滑动单元设置唯一标识该滑动单元的滑动单元标识,以及唯一标识与该滑动单元对应的数据项的数据项标识,该滑动单元标识与数据项标识一一对应。S703,将所述第一数据项标识存储到序列化列表中。在本说明书实施例中,建立有用于存储第一数据项标识的序列化列表。S705,根据所述序列化列表中第一数据项标识的数量,确定对所述第一数据项执行序列化,得到所述第一数据项的序列化数据。具体的,所述根据所述序列化列表中第一数据项标识的数量,确定对所述第一数据项执行序列化可以采用图8所示的方法,该方法可以包括:S801,判断所述序列化列表中第一数据项标识的数量是否到达预设第一数量阈值。所述预设第一数量阈值可以根据对应于执行序列化的子线程的处理能力进行设定,一般对应于执行序列化的子线程的处理能力越强,预设第一数量阈值可以设置的越大;反之,对应于执行序列化的子线程的处理能力较弱时,预设第一数量阈值可以设置的相对较小。具体的,当序列化列表中第一数据项标识的数量达到预设第一数量阈值时,可以执行步骤S803;当序列化列表中第一数据项标识的数量未达到预设第一数量阈值,则可以继续执行步骤S701至步骤S703。S803,从目标内存中获取所述序列化列表中第一数据项标识对应的第一数据项。S805,采用预设序列化算法将所述第一数据项转换为序列化数据。序列化Serialization是将对象以一连串的字节描述的过程,一个对象能够被序列化的前提是实现Serialization接口,Serialization接口类似一个标记,有了这个标记的类Class就能被序列化机制处理。以Java序列化算法为例,Java.io.ObjectOutputStream代表对象输出流,它的WriteObjectObjectobj方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。应理解的,本发明实施例中并不限于上述的示例中的Java序列化算法,还可以采用其它的能够实现序列化的方法。S807,清空所述序列化列表。具体的,当将序列化列表中的第一数据项标识对应的第一数据项均完成序列化时,可以执行清空所述序列化列表。S707,将所述第一数据项的序列化数据存储到预设存储空间中。所述预设存储空间可以是关系型数据库,如mysql、SQLServer、Oracle、Sybase、DB2等等。在本说明书实施例中,通过对第一数据项进行序列化处理,将目标内存中处于内存状态的第一数据项转化为处于持久化状态的序列化数据,进而实现将该持久化数据存储到数据库中。S709,清除目标内存中所述第一滑动单元对应的第一数据项。当将第一数据项的序列化数据存储到预设存储空间中后,可以清楚目标内存中第一滑动单元对应的第一数据项,从而实现对第一数据项所占用的内存的回收。具体的,所述将所述第二滑动单元对应的第二数据项加载到所述目标内存可以采用图9所示的方法,该方法可以包括:S901,获取所述第二滑动单元对应的待加载的第二数据项的第二数据项标识。在本说明书实施例中,可以根据滑动单元标识与数据项标识的一一对应关系,确定与第二滑动单元标识对应的第二数据项标识。S903,将所述第二数据项标识存储到反序列化列表中。在本说明书实施例中,建立有用于存储第二数据项标识的反序列化列表。S905,根据所述反序列化列表中第二数据项标识的数量,确定对所述第二数据项对应的序列化数据执行反序列化,得到所述第二数据项。具体的,所示根据所述反序列化列表中第二数据项标识的数量,确定对所述第二数据项对应的序列化数据执行反序列化可以采用图10所示的方法,该方法可以包括:S1001,判断所述反序列化列表中第二数据项标识的数量是否达到预设第二数量阈值。所述预设第二数量阈值可以根据对应于反执行序列化的子线程的处理能力进行设定,一般对应于执行反序列化的子线程的处理能力越强,预设第二数量阈值可以设置的越大;反之,对应于执行反序列化的子线程的处理能力较弱时,预设第二数量阈值可以设置的相对较小。具体的,当反序列化列表中第二数据项标识的数量达到预设第二数量阈值时,可以执行步骤S1003;当反序列化列表中第二数据项标识的数量未达到预设第二数量阈值,则可以继续执行步骤S901至步骤S903。1003,从预设存储空间中获取所述反序列化列表中第二数据项标识对应的序列化数据。1005,采用预设反序列化算法将所述序列化数据转换为数据源数据,所述数据源数据记为第二数据项。反序列化是将字节序列恢复为对象的过程,在反序列化过程中可以创建一个对象输入流,该对象输入流可以包装一个其他类型的输入流,如文件输入流;通过对象输入流的readObject方法读取对象。以Java反序列化算法为例,java.io.ObjectInputStream代表对象输入流,它的readObject方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。应理解的,本发明实施例中并不限于上述的示例中的Java序列化算法,还可以采用其它的能够实现序列化的方法。1007,清空所述反序列化列表。当将反序列化列表中的第二数据项标识对应的预设存储空间中的序列化数据均转化为数据源数据即得到序列化数据对应的真实数据后,可以清空所述反序列化列表。S907,将所述第二数据项加载到所述第二滑动单元中。在本说明书实施例中,通过对预设存储空间的第二数据项对应的序列化数据进行反序列化处理,将这部分序列化数据转化为数据源数据即真实数据,即完成了对应数据由持久化状态转换为内存状态,该真实数据即为第二滑动单元对应的第二数据项,将该第二数据项加载到对应的第二滑动单元中,即可完成第二数据项在目标内存中的加载。由本发明实施例的以上技术方案可见,本发明实施例将滑动列表对应的整个数据源在目标内存中的占用量固定为位于目标缓存窗口的滑动单元对应的数据源所占用的内存,减小了整个数据源对目标内存的占用量,降低了应用因内存不足而出现错误的概率。此外,由于本发明实施例中的目标缓存窗口包括从滑动列表覆盖的可视区域的周侧外缘向滑动列表的滑动方向延伸出的区域,因此目标内存中加载有位于可视区域附近的滑动单元对应的数据项,当可视区域附近的滑动单元进入可视区域时,可以避免因为等待对应数据项加载到内存导致的画面出现闪动的现象。请参阅图11,其所示为本发明实施例提供的另一种内存管理方法,该方法可以应用于图1所示的终端中,具体的,所述方法可以包括:S1101,监测滑动列表的滑动事件。S1103,当监测到所述滑动事件时,确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元。S1105,将第一滑动单元对应的第一数据项标识存储到序列化列表中,以及将第二滑动单元对应的第二数据项标识存储到反序列化列表中。S1107,判断序列化列表中的数据项标识的数量是否达到预设第一数量阈值,以及判断反序列化列表中的数据项标识的数量是否达到预设第二数量阈值。具体的,当序列化列表中的数据项标识的数量达到预设第一数量阈值时,执行步骤S1109至S1113,当序列化列表中的数据项标识的数量未达到预设第一数量阈值时,执行步骤S1101。当反序列化列表中的数据项标识的数量达到预设第二数量阈值时,执行步骤S1111,当反序列化列表中的数据项标识的数量未达到预设第二数量阈值时,执行步骤S1101。S1109,新建批量序列化任务放入子线程处理队列。S1111,新建批量反序列化任务放入子线程处理队列。S1113,当子线程处理子线程处理队列中的任务时,判断该任务是否是批量序列化任务,在判断的结果为是时,执行步骤S1115-S1125;在判断的结果为否时,执行步骤S1127-S1137。S1115,遍历序列化列表中的第一数据项标识,在遍历过程中执行步骤S1117-S1121;S1117,从目标内存中获取当前第一数据项标识对应的第一数据项,调用实现接口中的对应序列化方法,将第一数据项转换成序列化数据存入序列化数据临时队列中。S1119,将与当前第一数据项标识对应的第一滑动单元中的数据项释放掉,更新目标内存的状态。S1121,判断序列化列表中的第一数据项标识是否遍历完,在判断的结果为是时,执行步骤S1123-S1125;在判断的结果为否时,执行步骤S1115。S1123,将所述序列化数据临时队列存入预设数据库中。S1125,清空序列化列表,当前任务处理结束。S1127,根据反序列化列表中的第二数据项标识,从预设数据库中查找对应的序列化数据,得到序列化数据集合。S1129,遍历序列化数据集合中的序列化数据,在遍历过程中执行步骤S1131-S1137;S1131,调用实现接口中的反序列化方法,将当前序列化数据反序列化为数据源数据即真实数据。S1133,根据当前序列化数据对应的第二数据项标识,确定与该第二数据项标识对应的第二滑动单元。S1135,将反序列化得到的数据源数据加载到第二滑动单元中,更新目标内存的状态。S1137,判断序列化数据集合中的序列化数据是否遍历完,在判断的结果为是时,执行步骤S1139;在判断的结果为否时,执行步骤S1129。S1139,清空反序列化列表,当前任务处理结束。具体的,步骤S1101至步骤S339的详细内容可以参见前述图2至图10所示的方法实施例中的对应部分的内容,在此不再赘述。本发明实施例通过将滑动列表对应的整个数据源在目标内存中的占用量固定为位于目标缓存窗口的滑动单元对应的数据源所占用的内存,减小了整个数据源对目标内存的占用量,降低了应用因内存不足而出现错误的概率。此外,由于本发明实施例中的目标缓存窗口包括从滑动列表覆盖的可视区域的周侧外缘向滑动列表的滑动方向延伸出的区域,因此目标内存中加载有位于可视区域附近的滑动单元对应的数据项,当可视区域附近的滑动单元进入可视区域时,可以避免因为等待对应数据项加载到内存导致的画面出现闪动的现象。与上述几种实施例提供的内存管理方法相对应,本发明实施例还提供一种内存管理装置,由于本发明实施例提供的内存管理装置与上述几种实施例提供的内存管理方法相对应,因此前述内存管理方法的实施方式也适用于本实施例提供的内存管理装置,在本实施例中不再详细描述。请参阅图12,其所示为本发明实施例提供的一种内存管理装置的结构示意图,如图12所示,该装置可以包括:监测模块1210,第一确定模块1220,回收模块1230和加载模块1240,其中,监测模块1210,可以用于监测滑动列表的滑动事件;第一确定模块1220,可以用于当监测到所述滑动事件时,确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元;所述目标缓存窗口包括从所述滑动列表覆盖的可视区域的周侧外缘向所述滑动列表的滑动方向延伸出的区域;回收模块1230,可以用于回收所述第一滑动单元对应的第一数据项所占用的目标内存;第一加载模块1240,可以用于将所述第二滑动单元对应的第二数据项加载到所述目标内存。在另一具体实施方式中,如图13提供的另一种内存管理装置的结构示意图,所述装置还可以包括:第二确定模块1250,可以用于确定所述滑动列表中位于目标缓存窗口的滑动单元;第二加载模块1260,可以用于将所述位于目标缓存窗口的滑动单元对应的数据项加载到所述目标内存;所述目标内存用于存储位于所述目标缓存窗口中的滑动单元对应的数据项。可选的,如图14所示,回收模块1230可以包括:第一获取模块1231,可以用于获取第一滑动单元中加载的第一数据项的第一数据项标识;第一存储模块1232,可以用于将所述第一数据项标识存储到序列化列表中;第二确定模块1233,可以用于根据所述序列化列表中第一数据项标识的数量,确定对所述第一数据项执行序列化,得到所述第一数据项的序列化数据;第二存储模块1234,可以用于将所述第一数据项的序列化数据存储到预设存储空间中;第一清除模块1235,可以用于清除目标内存中所述第一滑动单元对应的第一数据项。可选的,所述第二确定模块1233,具体可以用于:判断所述序列化列表中第一数据项标识的数量是否到达预设第一数量阈值;在判断的结果为是时,从目标内存中获取所述序列化列表中第一数据项标识对应的第一数据项;采用预设序列化算法将所述第一数据项转换为序列化数据;清空所述序列化列表。可选的,如图15所示,第一加载模块1240可以包括:第二获取模块1241,可以用于获取所述第二滑动单元对应的待加载的第二数据项的第二数据项标识;第三存储模块1242,可以用于将所述第二数据项标识存储到反序列化列表中;第三确定模块1243,可以用于根据所述反序列化列表中第二数据项标识的数量,确定对所述第二数据项对应的序列化数据执行反序列化,得到所述第二数据项;第三加载模块1244,可以用于将所述第二数据项加载到所述第二滑动单元中。可选的,所示第三确定模块1243,具体可以用于:判断所述反序列化列表中第二数据项标识的数量是否达到预设第二数量阈值;在判断的结果为是时,从预设存储空间中获取所述反序列化列表中第二数据项标识对应的序列化数据;采用预设反序列化算法将所述序列化数据转换为数据源数据;清空所述反序列化列表。在另一具体实施方式中,如图16提供的另一种内存管理装置的结构示意图,所述装置还可以包括:第三获取模块1270,可以用于获取所述滑动事件的滑动速度;第四获取模块1280,可以用于从预设的滑动速度与缓存窗口参数的对应关系中,获取与所述滑动事件的滑动速度相对应的目标缓存窗口参数;第五获取模块1290,可以用于获取所述滑动列表覆盖的可视区域的可视区域参数;生成模块1200,可以用于根据所述目标缓存窗口参数以及所述可视区域参数,生成所述目标缓存窗口。需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。在一个示例性例子中,如图17所示,终端中可以实现有多个功能模块,例如:缓存管理器、缓存配置器、数据库管理器以及继承缓存管理接口的数据源,通过各个功能模块来实现上述的内存管理方法。其中,缓存管理器负责通信管理其他三个模块,通过缓存配置器初始化缓存策略;通过绑定继承缓存管理接口的数据源实现对数据源的管理,控制数据从内存态切换成持久化,或者从持久化切换回内存态;通过数据库管理器将持久化的数据进行存储管理。缓存配置器负责通过缓存管理器缓存窗口的大小,以及批量持久化或者加载内存的储存数量等。数据库管理器通过数据库存储序列化对象的管理器,能够将序列化对象存储到数据库中,或者从数据中提取序列化对象,提供调用接口供缓存管理器使用。继承缓存管理接口的数据源通过继承管理接口便于缓存管理器统一调度管理。通过实现序列化和反序列化的接口,实现内存数据和持久化数据的切换能力,并提供查询接口,实时反馈当前数据的状态时内存态还是持久化状态。本发明实施例通过将滑动列表对应的整个数据源在目标内存中的占用量固定为位于目标缓存窗口的滑动单元对应的数据源所占用的内存,减小了整个数据源对目标内存的占用量,降低了应用因内存不足而出现错误的概率。此外,由于本发明实施例中的目标缓存窗口包括从滑动列表覆盖的可视区域的周侧外缘向滑动列表的滑动方向延伸出的区域,因此目标内存中加载有位于可视区域附近的滑动单元对应的数据项,当可视区域附近的滑动单元进入可视区域时,可以避免因为等待对应数据项加载到内存导致的画面出现闪动的现象。请参阅图18,其所示为本发明实施例提供的一种终端的结构示意图,该终端用于实施上述实施例中提供的内存管理方法。具体来讲:终端1800可以包括RFRadioFrequency,射频电路1810、包括有一个或一个以上计算机可读存储介质的存储器1820、输入单元1830、显示单元1840、视频传感器1850、音频电路1860、WiFiwirelessfidelity,无线保真模块1870、包括有一个或者一个以上处理核心的处理器1880、以及电源180等部件。本领域技术人员可以理解,图18中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:RF电路1810可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器1880处理;另外,将涉及上行的数据发送给基站。通常,RF电路1810包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块SIM卡、收发信机、耦合器、LNALowNoiseAmplifier,低噪声放大器、双工器等。此外,RF电路1810还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSMGlobalSystemofMobilecommunication,全球移动通讯系统、GPRSGeneralPacketRadioService,通用分组无线服务、CDMACodeDivisionMultipleAccess,码分多址、WCDMAWidebandCodeDivisionMultipleAccess,宽带码分多址、LTELongTermEvolution,长期演进、电子邮件、SMSShortMessagingService,短消息服务等。存储器1820可用于存储软件程序以及模块,处理器1880通过运行存储在存储器1820的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器1820可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序比如声音播放功能、图像播放功能等等;存储数据区可存储根据终端1800的使用所创建的数据比如视频数据、电话本等等。此外,存储器1820可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器1820还可以包括存储器控制器,以提供处理器1880和输入单元1830对存储器1820的访问。输入单元1830可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元1830可包括图像输入设备1831以及其他输入设备1832。图像输入设备1831可以是摄像头,也可以是光电扫描设备。除了图像输入设备1831,输入单元1830还可以包括其他输入设备1832。具体地,其他输入设备1832可以包括但不限于物理键盘、功能键比如音量控制按键、开关按键等、轨迹球、鼠标、操作杆等中的一种或多种。显示单元1840可用于显示由用户输入的信息或提供给用户的信息以及终端1800的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元1840可包括显示面板1841,可选的,可以采用LCDLiquidCrystalDisplay,液晶显示器、OLEDOrganicLight-EmittingDiode,有机发光二极管等形式来配置显示面板1841。终端1800可包括至少一种视频传感器1850,视频传感器用于获取用户的视频信息。终端1800还可以包括其它传感器未示出,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1841的亮度,接近传感器可在终端1800移动到耳边时,关闭显示面板1841和或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上一般为三轴加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用比如横竖屏切换、相关游戏、磁力计姿态校准、振动识别相关功能比如计步器、敲击等;至于终端1800还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。视频电路1860、扬声器1861,传声器1862可提供用户与终端1800之间的视频接口。音频电路1860可将接收到的音频数据转换后的电信号,传输到扬声器1861,由扬声器1861转换为声音信号输出;另一方面,传声器1862将收集的声音信号转换为电信号,由音频电路1860接收后转换为音频数据,再将音频数据输出处理器1880处理后,经RF电路1811以发送给比如另一终端,或者将音频数据输出至存储器1820以便进一步处理。音频电路1860还可能包括耳塞插孔,以提供外设耳机与终端1800的通信。WiFi属于短距离无线传输技术,终端1800通过WiFi模块1870可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图18示出了WiFi模块1870,但是可以理解的是,其并不属于终端1800的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。处理器1880是终端1800的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1820内的软件程序和或模块,以及调用存储在存储器1820内的数据,执行终端1800的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1880可包括一个或多个处理核心;优选的,处理器1880可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1880中。终端1800还包括给各个部件供电的电源180比如电池,优选的,电源可以通过电源管理系统与处理器1880逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源180还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。尽管未示出,终端1800还可以包括蓝牙模块等,在此不再赘述。具体在本实施例中,终端1800还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行。上述一个或者一个以上程序包含用于执行上述方法实施例提供的内存管理方法的指令。本发明的实施例还提供了一种存储介质,所述存储介质可设置于终端之中以保存用于实现方法实施例中的一种内存管理方法相关的至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或指令集由该处理器加载并执行以实现上述方法实施例提供的内存管理方法。可选地,在本实施例中,上述存储介质可以位于计算机网络的多个网络服务器中的至少一个网络服务器。可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器ROM,Read-OnlyMemory、随机存取存储器RAM,RandomAccessMemory、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者装置中还存在另外的相同要素。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

权利要求:1.一种内存管理方法,其特征在于,所述方法包括:监测滑动列表的滑动事件;当监测到所述滑动事件时,确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元;所述目标缓存窗口包括从所述滑动列表覆盖的可视区域的周侧外缘向所述滑动列表的滑动方向延伸出的区域;回收所述第一滑动单元对应的第一数据项所占用的目标内存,以及将所述第二滑动单元对应的第二数据项加载到所述目标内存。2.根据权利要求1所述的内存管理方法,其特征在于,在所述监测滑动列表的滑动事件之前,所述方法还包括:确定所述滑动列表中位于目标缓存窗口的滑动单元;将所述位于目标缓存窗口的滑动单元对应的数据项加载到所述目标内存;所述目标内存用于存储位于所述目标缓存窗口中的滑动单元对应的数据项。3.根据权利要求1所述的内存管理方法,其特征在于,所述回收所述第一滑动单元对应的第一数据项所占用的目标内存包括:获取第一滑动单元中加载的第一数据项的第一数据项标识;将所述第一数据项标识存储到序列化列表中;根据所述序列化列表中第一数据项标识的数量,确定对所述第一数据项执行序列化,得到所述第一数据项的序列化数据;将所述第一数据项的序列化数据存储到预设存储空间中;清除目标内存中所述第一滑动单元对应的第一数据项。4.根据权利要求3所述的内存管理方法,其特征在于,所述根据所述序列化列表中数据项标识的数量,确定对所述第一数据项执行序列化包括:判断所述序列化列表中第一数据项标识的数量是否到达预设第一数量阈值;在判断的结果为是时,从目标内存中获取所述序列化列表中第一数据项标识对应的第一数据项;采用预设序列化算法将所述第一数据项转换为序列化数据;清空所述序列化列表。5.根据权利要求1所述的内存管理方法,其特征在于,所述将所述第二滑动单元对应的第二数据项加载到所述目标内存包括:获取所述第二滑动单元对应的待加载的第二数据项的第二数据项标识;将所述第二数据项标识存储到反序列化列表中;根据所述反序列化列表中第二数据项标识的数量,确定对所述第二数据项对应的序列化数据执行反序列化,得到所述第二数据项;将所述第二数据项加载到所述第二滑动单元中。6.根据权利要求5所述的内存管理方法,其特征在于,所述根据所述反序列化列表中第二数据项标识的数量,确定对所述第二数据项对应的序列化数据执行反序列化包括:判断所述反序列化列表中第二数据项标识的数量是否达到预设第二数量阈值;在判断的结果为是时,从预设存储空间中获取所述反序列化列表中第二数据项标识对应的序列化数据;采用预设反序列化算法将所述序列化数据转换为数据源数据,所述数据源数据记为第二数据项;清空所述反序列化列表。7.根据权利要求1所述的内存管理方法,其特征在于,在确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元之前,所述方法还包括:获取所述滑动事件的滑动速度;从预设的滑动速度与缓存窗口参数的对应关系中,获取与所述滑动事件的滑动速度相对应的目标缓存窗口参数;获取所述滑动列表覆盖的可视区域的可视区域参数;根据所述目标缓存窗口参数以及所述可视区域参数,生成所述目标缓存窗口。8.一种内存管理装置,其特征在于,所述装置包括:监测模块,用于监测滑动列表的滑动事件;第一确定模块,用于当监测到所述滑动事件时,确定所述滑动列表中离开目标缓存窗口的第一滑动单元,以及进入所述目标缓存窗口的第二滑动单元;所述目标缓存窗口包括从所述滑动列表覆盖的可视区域的周侧外缘向所述滑动列表的滑动方向延伸出的区域;回收模块,用于回收所述第一滑动单元对应的第一数据项所占用的目标内存;第一加载模块,用于将所述第二滑动单元对应的第二数据项加载到所述目标内存。9.根据权利要求8所述的内存管理装置,其特征在于,所述装置还包括:第一获取模块,用于获取所述滑动事件的滑动速度;第二获取模块,用于从预设的滑动速度与缓存窗口参数的对应关系中,获取与所述滑动事件的滑动速度相对应的目标缓存窗口参数;第三获取模块,用于获取所述滑动列表覆盖的可视区域的可视区域参数;生成模块,用于根据所述目标缓存窗口参数以及所述可视区域参数,生成所述目标缓存窗口。10.一种终端,其特征在于,包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1-7任一项所述的内存管理方法。

百度查询: 腾讯科技(深圳)有限公司 一种内存管理方法、装置及终端

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。