一种内存释放方法及系统与流程

文档序号:18028752发布日期:2019-06-28 22:25阅读:174来源:国知局
一种内存释放方法及系统与流程

本发明涉及数据缓存技术领域,更具体的说,涉及一种内存释放方法及系统。



背景技术:

因业务及客户端逻辑架构原因,通常会根据客户端的内容获取速度、网络带宽情况,为每种信号源内容提供若干分辨率的信号获取链路,每个清晰度的视频信号按照时间轴分若干分段,每个分段分若干数据块。在视频播放期间,内存中通常会存在已经播放的分段,未播放的分段,未播放但已下载且未保存的数据块等等。为了不影响视频的正常播放,内存在进行数据块释放时,都需要对上述情况做权衡对比,确定哪个数据块是可以释放的,当前播放位置更适合释放哪个数据块等等。

综上,现有方案中数据块在内存的释放逻辑较为复杂,因此,很容易出现数据块释放错误的情况。



技术实现要素:

有鉴于此,本发明公开一种内存释放方法及系统,以实现简化数据块在内存的释放逻辑,减少内存的数据处理量,有效避免数据块释放错误情况的出现。

一种内存释放方法,包括:

确定内存中每个数据块的多个预设属性中,每个所述预设属性在预设优先级顺序中的位置;

确定每个所述数据块的每个所述预设属性的属性值;

基于每个所述数据块的所有的所述预设属性,每个所述预设属性在所述预设优先级顺序中的所述位置,以及每个所述预设属性的所述属性值,得到每个所述数据块的特征编码值,所述特征编码值表征相对应的数据块的重要等级;

当满足预设释放条件时,选取预设数量的所述数据块作为目标数据块进行释放,每个所述目标数据块的所述特征编码值小于所述内存中除所述目标数据块以外的任何一个所述数据块的所述特征编码值。

可选的,所述预设属性为如下属性中的任意一种:

数据块所在分段为当前播放分段;

数据块所在分段为当前播放视频的分段;

数据块为已播放的数据块;

数据块为已保存的数据块;

数据块所在当前分段索引距当前播放分段索引的距离;

数据块的块编号与当前播放的数据块的块编号的距离;

数据块的添加时间。

可选的,所述确定每个所述数据块的每个所述预设属性的属性值,具体包括:

ept_play:数据块所在分段为当前播放分段,如果是,则ept_play相对应的属性值为:1;如果否,则ept_play相对应的属性值为:0;

ept_vid:数据块所在分段为当前播放视频的分段,如果是,则ept_vid相对应的属性值为:1;如果否,则ept_vid相对应的属性值为:0;

ept_played:数据块为已播放的数据块,如果是,则ept_played相对应的属性值为:1;如果否,则ept_played相对应的属性值为:0;

ept_saved:数据块为已保存的数据块,如果是,则ept_saved相对应的属性值为:1;如果否,则ept_saved相对应的属性值为:0;

ept_fid:数据块所在当前分段索引距当前播放分段索引的距离,当距离为0时,ept_fid相对应的属性值为:0;当距离为非0时,ept_fid的属性值的计算公式如下:

value=min(abs(ucurrentfidindex-uplayfidindex),0x7f);

式中,min为:两者取最小,abs为:取绝对值,ucurrentfidindex为:数据块所在当前分段文件的索引序号,uplayfidindex为:当前播放分段文件的索引序号,0x7f为:十六进制数字;

ept_block:数据块的块编号与当前播放的数据块的块编号的距离,当距离为0时,ept_block相对应的属性值为:0;当距离为非0时,ept_block的属性值的计算公式如下:

value=min(abs(blockno–uplayblockno),0x7f);

式中,min为:两者取最小,abs为:取绝对值,blockno为:分段文件内的块编号,uplayblockno为:当前播放的数据块的块编号,0x7f为:十六进制数字;

ept_time:数据块的添加时间,ept_time的属性值为:时间值;

时间值的计算公式如下:

value=min((数据块的当前时间戳秒数–数据块最后访问时间戳秒数)/100,0xff);

式中,min为:两者取最小,/为取商运算,0xff为:十六进制数字。

可选的,所述基于每个所述数据块的所有的所述预设属性,每个所述预设属性在所述预设优先级顺序中的所述位置,以及每个所述预设属性的所述属性值,得到每个所述数据块的特征编码值,具体包括:

根据如下公式计算得到所述特征编码值key,公式如下:

式中,i为预设属性的编号,编号为各个预设属性所占用的位置,从右往左,从0开始,依次的顺序号,i>0,当i=0时,不进行移位运算,ni为编号为i的所述预设属性的属性名,v(ni)为ni的属性值,m为所述预设属性的总个数,m>0,bj为编号为j的预设属性占用的bit位数,j为预设属性的编号,<<为位运算操作符的向左移位操作,为i位置的属性值向左移动的位数,为每个被移动的属性值在参与计算时移位之后的值。

可选的,还包括:

将释放的所述目标数据块所占用的存储空间回收到所述内存的一个预设位置;

当添加新数据块时,释放所述预设位置,并将所述新数据块放置在所述预设位置。

一种内存释放系统,包括:

第一确定单元,用于确定内存中每个数据块的多个预设属性中,每个所述预设属性在预设优先级顺序中的位置;

第二确定单元,用于确定每个所述数据块的每个所述预设属性的属性值;

特征编码值获取单元,用于基于每个所述数据块的所有的所述预设属性,每个所述预设属性在所述预设优先级顺序中的所述位置,以及每个所述预设属性的所述属性值,得到每个所述数据块的特征编码值,所述特征编码值表征相对应的数据块的重要等级;

释放单元,用于当满足预设释放条件时,选取预设数量的所述数据块作为目标数据块进行释放,每个所述目标数据块的所述特征编码值小于所述内存中除所述目标数据块以外的任何一个所述数据块的所述特征编码值。

可选的,所述预设属性为如下属性中的任意一种:

数据块所在分段为当前播放分段;

数据块所在分段为当前播放视频的分段;

数据块为已播放的数据块;

数据块为已保存的数据块;

数据块所在当前分段索引距当前播放分段索引的距离;

数据块的块编号与当前播放的数据块的块编号的距离;

数据块的添加时间。

可选的,所述第二确定单元具体用于:

ept_play:数据块所在分段为当前播放分段,如果是,则ept_play相对应的属性值为:1;如果否,则ept_play相对应的属性值为:0;

ept_vid:数据块所在分段为当前播放视频的分段,如果是,则ept_vid相对应的属性值为:1;如果否,则ept_vid相对应的属性值为:0;

ept_played:数据块为已播放的数据块,如果是,则ept_played相对应的属性值为:1;如果否,则ept_played相对应的属性值为:0;

ept_saved:数据块为已保存的数据块,如果是,则ept_saved相对应的属性值为:1;如果否,则ept_saved相对应的属性值为:0;

ept_fid:数据块所在当前分段索引距当前播放分段索引的距离,当距离为0时,ept_fid相对应的属性值为:0;当距离为非0时,ept_fid的属性值的计算公式如下:

value=min(abs(ucurrentfidindex-uplayfidindex),0x7f);

式中,min为:两者取最小,abs为:取绝对值,ucurrentfidindex为:数据块所在当前分段文件的索引序号,uplayfidindex为:当前播放分段文件的索引序号,0x7f为:十六进制数字;

ept_block:数据块的块编号与当前播放的数据块的块编号的距离,当距离为0时,ept_block相对应的属性值为:0;当距离为非0时,ept_block的属性值的计算公式如下:

value=min(abs(blockno–uplayblockno),0x7f);

式中,min为:两者取最小,abs为:取绝对值,blockno为:分段文件内的块编号,uplayblockno为:当前播放的数据块的块编号,0x7f为:十六进制数字;

ept_time:数据块的添加时间,ept_time的属性值为:时间值;

时间值的计算公式如下:

value=min((数据块的当前时间戳秒数–数据块最后访问时间戳秒数)/100,0xff);

式中,min为:两者取最小,/为取商运算,0xff为:十六进制数字。

可选的,所述特征编码值获取单元具体用于:

根据如下公式计算得到所述特征编码值key,公式如下:

式中,i为预设属性的编号,编号为各个预设属性所占用的位置,从右往左,从0开始,依次的顺序号,i>0,当i=0时,不进行移位运算,ni为编号为i的所述预设属性的属性名,v(ni)为ni的属性值,m为所述预设属性的总个数,m>0,bj为编号为j的预设属性占用的bit位数,j为预设属性的编号,<<为位运算操作符的向左移位操作,为i位置的属性值向左移动的位数,为每个被移动的属性值在参与计算时移位之后的值。

可选的,还包括:

回收单元,用于将释放的所述目标数据块所占用的存储空间回收到所述内存的一个预设位置;

添加单元,用于当添加新数据块时,释放所述预设位置,并将所述新数据块放置在所述预设位置。

从上述的技术方案可知,本发明公开了一种内存释放方法及系统,基于内存中每个数据块的多个预设属性,每个预设属性在预设优先级顺序中的位置,以及每个预设属性的属性值,得到表征数据块重要等级的特征编码值,选取特征编码值小的数据块作为目标数据块进行释放。由此可以看出,本发明在确定需要释放的数据块时,通过综合每个数据块的多个预设属性、每个预设属性在预设优先级顺序中的位置,以及每个预设属性的属性值,来确定数据块的重要等级,从而基于数据块的重要等级来确定是否释放该数据块,整个过程简单、可靠,因此,本发明大大简化了数据块在内存的释放逻辑,减少了内存的数据处理量,并有效避免了数据块释放错误情况的出现。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据公开的附图获得其他的附图。

图1为现有技术公开的一种视频播放框架图;

图2为本发明实施例公开的一种内存释放方法流程图;

图3为本发明实施例公开的一种数据块的各个预设属性的优先级顺序示意图;

图4为本发明实施例公开的一种内存释放系统的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参见图1,现有技术公开的一种视频播放框架图,网络模块,也即p2p(peertopeer,对等网络)模块,将从网上下载视频的数据碎片发送给内存,内存将接收到的多个连续的数据碎片拼装成块数据,并对该块数据的正确性进行校验,在块数据校验成功后,将校验成功的数据块发送至磁盘缓存进行持久化存储。播放器在播放视频时,首先从内存中获取视频数据,若内存中没有所需的视频数据,则从磁盘缓存中读取;若磁盘缓存中也没有所需的视频数据,则通过网络模块从网络上实时下载所需的视频数据。

在视频播放期间,内存中通常会存在已经播放的分段,未播放的分段,未播放但已下载且未保存的数据块等等。为了不影响视频的正常播放,内存在进行数据块释放时,都需要对上述情况做权衡对比,确定哪个数据块是可以释放的,当前播放位置更适合释放哪个数据块等等。现有方案中数据块在内存的释放逻辑较为复杂,因此,很容易出现数据块释放错误的情况。

基于此,本发明实施例公开了一种内存释放方法及系统,基于内存中每个数据块的多个预设属性,每个预设属性在预设优先级顺序中的位置,以及每个预设属性的属性值,得到表征数据块重要等级的特征编码值,特征编码值越大,相对应的数据块的重要等级越高,特征编码值越小,相对应的数据块的重要等级越低,因此,选取特征编码值小的数据块作为目标数据块进行释放。由此可以看出,本发明在确定需要释放的数据块时,通过综合每个数据块的多个预设属性、每个预设属性在预设优先级顺序中的位置,以及每个预设属性的属性值,来确定数据块的重要等级,从而基于数据块的重要等级来确定是否释放该数据块,整个过程简单、可靠,因此,本发明大大简化了数据块在内存的释放逻辑,减少了内存的数据处理量,并有效避免了数据块释放错误情况的出现。

参见图2,本发明一实施例公开的一种内存释放方法流程图,该方法包括步骤:

步骤s101、确定内存中每个数据块的多个预设属性中,每个所述预设属性在预设优先级顺序中的位置;

其中,所述预设属性可以为如下示出的属性中的任意一种:

(1)ept_play:数据块所在分段为当前播放分段;(2)ept_vid:数据块所在分段为当前播放视频的分段;(3)ept_played:数据块为已播放的数据块;(4)ept_saved:数据块为已保存的数据块;(5)ept_fid:数据块所在当前分段索引距当前播放分段索引的距离;(6)ept_block:数据块的块编号与当前播放的数据块的块编号的距离;(7)ept_time:数据块的添加时间。

需要特别说明的是,预设属性包括但不限于上述示出的七个属性,还可以根据实际需要添加数据块的其他属性,具体依据实际需要而定,本发明在此不做限定。

基于上述每个预设属性对数据块的特征贡献程度不同,本发明预先对上述各个预设属性进行了优先级排序,参见图3,本发明一实施例示出的数据块的各个预设属性的优先级顺序示意图,各个预设属性,从左到右优先级依次降低。

需要说明的是,当属性位置暂时空缺时,该属性空缺位置,此时可以采用如下表示方法:

ept_max:缺省暂未使用,缺省即系统默认状态,意思与“默认”相同,“缺省暂未使用”在此处指的是该属性位置暂时空缺,不参与特征编码值的计算。

其中,ept_max的位置如图3所示。

步骤s102、确定每个所述数据块的每个所述预设属性的属性值;

具体的,每个预设属性的属性值的具体确定过程如下:

(1)ept_play:数据块所在分段为当前播放分段,如果是,则ept_play相对应的属性值为:1;如果否,则ept_play相对应的属性值为:0。

(2)ept_vid:数据块所在分段为当前播放视频的分段,在实际应用中,每个视频会被切分为多个分段,如果是,则ept_vid相对应的属性值为:1;如果否,则ept_vid相对应的属性值为:0。

(3)ept_played:数据块为已播放的数据块,如果是,则ept_played相对应的属性值为:1;如果否,则ept_played相对应的属性值为:0。

(4)ept_saved:数据块为已保存的数据块,如果是,则ept_saved相对应的属性值为:1;如果否,则ept_saved相对应的属性值为:0。

(5)ept_fid:数据块所在当前分段索引距当前播放分段索引的距离,当距离为0时,ept_fid相对应的属性值为:0;当距离为非0时,ept_fid的属性值的计算公式如下:

value=min(abs(ucurrentfidindex-uplayfidindex),0x7f);

式中,min为:两者取最小,abs为:取绝对值,ucurrentfidindex为:数据块所在当前分段文件的索引序号,uplayfidindex为:当前播放分段文件的索引序号,0x7f为:十六进制数字。

需要说明的是,业务上,每个视频会被物理分割成若干个分段文件,这些分段文件从开始到结束依次被编号为:0,1,2.….n,这些编号即为索引序号。

(6)ept_block:数据块的块编号与当前播放的数据块的块编号的距离,当距离为0时,ept_block相对应的属性值为:0;当距离为非0时,ept_block的属性值的计算公式如下:

value=min(abs(blockno–uplayblockno),0x7f);

式中,min为:两者取最小,abs为:取绝对值,blockno为:分段文件内的块编号,uplayblockno为:当前播放的数据块的块编号,0x7f为:十六进制数字。

(7)ept_time:数据块的添加时间,ept_time的属性值为:时间值;

时间值的计算公式如下:

value=min((数据块的当前时间戳秒数–数据块最后访问时间戳秒数)/100,0xff);

式中,min为:两者取最小,/为取商运算,比如,4/3=1,意为4对3取商为1,0xff为:十六进制数字。

步骤s103、基于每个所述数据块的所有的所述预设属性,每个所述预设属性在所述预设优先级顺序中的所述位置,以及每个所述预设属性的所述属性值,得到每个所述数据块的特征编码值;

需要特别说明的是,每个数据块的预设属性在计算特征编码值时的权重由预设属性位于特征编码值的位置决定,右侧位置权重小于左侧位置,位置编号的定义为:自右向左从0开始依次顺序编号。

其中,每个数据块的特征编码值可用于表征该数据块的重要等级,特征编码值越大,相对应的数据块的重要等级越高;反之,特征编码值越小,相对应的数据块的重要等级越低。

因此,可以根据数据块的特征编码值的大小,确定是否需要释放相应的数据块,具体的,优先释放特征编码值小的数据块。

较优的,在实际应用中,数据块的特征编码值可用key值表示,key值的表达式如下:

式中,i为预设属性的编号,编号为各个预设属性所占用的位置,从右往左,从0开始,依次的顺序号,i>0,当i=0时,不进行移位运算,ni为编号为i的所述预设属性的属性名,v(ni)为ni的属性值,m为所述预设属性的总个数,m>0,bj为编号为j的预设属性占用的bit位数,j为预设属性的编号,<<为位运算操作符的向左移位操作,为i位置的属性值向左移动的位数,为每个被移动的属性值在参与计算时移位之后的值。

需要说明的是,每个所述预设属性的优先级从大到小依次为:ept_play、ept_vid、ept_played、ept_saved、ept_fid、ept_block和ept_time。

预设属性ept_play对应的编号为6;

预设属性ept_vid对应的编号为5;

预设属性ept_played对应的编号为4;

预设属性ept_saved对应的编号为3;

预设属性ept_fid对应的编号为2;

预设属性ept_block对应的编号为1;

预设属性ept_time对应的编号为0。

举例说明<<为位运算操作符的原理,如下:

2<<8:表示将值2向左移动8bit,所得值为512;

也可用十六进制表示为:0x0002<<8,表示将值0x0002向左移动8bit,值为0x0200。

假设,特征编码值,也即key值为64bit整数,从图3中可以看出,优先级段为8个,假设每个预设属性占用的bit位数相同,则编号为j的预设属性占用的bit位数为:64bit÷8=8bit,此时,key值的表达式如下:

key=(v(n0)<<(0))+(v(n1)<<(b0))+(v(n2)<<(b0+b1))+

(v(n3)<<(b0+b1+b2))+(v(n4)<<(b0+b1+b2+b3))+

(v(n5)<<(b0+b1+b2+b3+b4))+(v(n6)<<(b0+b1+b2+b3+b4+b5))+

(v(n7)<<(b0+b1+b2+b3+b4+b5+b6))

当bj=8bit时,上述公式如下:

key=(v(n0)<<(0))+(v(n1)<<(8))+(v(n2)<<(16))+(v(n3)<<(24))+

(v(n4)<<(32))+(v(n5)<<(40))+(v(n6)<<(48))+(v(n7)<<(56))

步骤s104、当满足预设释放条件时,选取预设数量的所述数据块作为目标数据块进行释放,每个所述目标数据块的所述特征编码值小于所述内存中除所述目标数据块以外的任何一个所述数据块的所述特征编码值。

其中,预设释放条件可以为:①内存中剩余的空间容量小于或等于空间阈值,其中,空间阈值的取值依据实际需要而定,比如,剩余3个数据块的空间容量。需要说明的是,当空间阈值为0时,若内存中剩余的空间容量等于0,则表明此时内存已满,在这种情况下,就需要释放一部分数据块。

②当需要存入新数据块时,所有的新数据块所占用的空间容量大于内充中剩余的空间容量,在这种情况下,就需要释放内存中的一部分数据块,以便存储新数据块。

需要特别说明的是,预设释放条件包括但不限于上述两种情况,其他需要内存释放的条件均属于本申请所要保护的范围。

具体的,在实际应用中,可以将内存中所有的数据块按照特征编码值的大小,由小到大排序,当需要释放n个数据块时,将排名位于n之前的数据块作为目标数据块进行释放。

其中,预设数量的取值依据实际需要而定,比如,设置内存放置数据块的数值上限max_block,当内存中存储的数据块的数量达到数值上限max_block,而又有新的数据块即将缓存至内存时,此时,可以根据需要缓存的数据块的数量,确定需要释放的数据块的数量。或者,只要当内存中存储的数据块的数量达到数值上限max_block,则释放预设数量的目标数据块,该预设数量提前设定。

综上可知,本发明公开了一种内存释放方法,基于内存中每个数据块的多个预设属性,每个预设属性在预设优先级顺序中的位置,以及每个预设属性的属性值,得到表征数据块重要等级的特征编码值,特征编码值越大,相对应的数据块的重要等级越高,特征编码值越小,相对应的数据块的重要等级越低,因此,选取特征编码值小的数据块作为目标数据块进行释放。由此可以看出,本发明在确定需要释放的数据块时,通过综合每个数据块的多个预设属性、每个预设属性在预设优先级顺序中的位置,以及每个预设属性的属性值,来确定数据块的重要等级,从而基于数据块的重要等级来确定是否释放该数据块,整个过程简单、可靠,因此,本发明大大简化了数据块在内存的释放逻辑,减少了内存的数据处理量,并有效避免了数据块释放错误情况的出现。

为进一步优化上述实施例,在步骤s104之后,还可以包括:

将释放的所述目标数据块所占用的存储空间回收到所述内存的一个预设位置;

当添加新数据块时,释放所述预设位置,并将所述新数据块放置在所述预设位置。

其中,释放的目标数据块会被内存池回收。

综上可知,当释放目标数据块后,本发明中的内存会对目标数据块所占用的存储空间回收到内存的一个预设位置,当需要添加新数据块时,内存会释放该预设位置,使新数据块可以放置在该预设位置,从而有效避免了系统再次向内存分配新的存储空间,以用于放置新数据块,进而有效避免了内存反复的释放存储空间和被分配新的存储空间的情况,因此,提高了内存的稳定性。

与上述方法实施例相对应,本发明还公开了一种内存释放系统。

参见图4,本发明一实施例公开的一种内存释放系统的结构示意图,该系统包括:

第一确定单元201,用于确定内存中每个数据块的多个预设属性中,每个所述预设属性在预设优先级顺序中的位置;

其中,所述预设属性可以为如下示出的属性中的任意一种:

(1)ept_play:数据块所在分段为当前播放分段;(2)ept_vid:数据块所在分段为当前播放视频的分段;(3)ept_played:数据块为已播放的数据块;(4)ept_saved:数据块为已保存的数据块;(5)ept_fid:数据块所在当前分段索引距当前播放分段索引的距离;(6)ept_block:数据块的块编号与当前播放的数据块的块编号的距离;(7)ept_time:数据块的添加时间。

需要特别说明的是,预设属性包括但不限于上述示出的七个属性,还可以根据实际需要添加数据块的其他属性,具体依据实际需要而定,本发明在此不做限定。

基于上述每个预设属性对数据块的特征贡献程度不同,本发明预先对上述各个预设属性进行了优先级排序,具体参见图3以及方法实施例对应部分。

第二确定单元202,用于确定每个所述数据块的每个所述预设属性的属性值;

第二确定单元202具体用于:

(1)ept_play:数据块所在分段为当前播放分段,如果是,则ept_play相对应的属性值为:1;如果否,则ept_play相对应的属性值为:0。

(2)ept_vid:数据块所在分段为当前播放视频的分段,在实际应用中,每个视频会被切分为多个分段,如果是,则ept_vid相对应的属性值为:1;如果否,则ept_vid相对应的属性值为:0。

(3)ept_played:数据块为已播放的数据块,如果是,则ept_played相对应的属性值为:1;如果否,则ept_played相对应的属性值为:0。

(4)ept_saved:数据块为已保存的数据块,如果是,则ept_saved相对应的属性值为:1;如果否,则ept_saved相对应的属性值为:0。

(5)ept_fid:数据块所在当前分段索引距当前播放分段索引的距离,当距离为0时,ept_fid相对应的属性值为:0;当距离为非0时,ept_fid的属性值的计算公式如下:

value=min(abs(ucurrentfidindex-uplayfidindex),0x7f);

式中,min为:两者取最小,abs为:取绝对值,ucurrentfidindex为:数据块所在当前分段文件的索引序号,uplayfidindex为:当前播放分段文件的索引序号,0x7f为:十六进制数字。

需要说明的是,业务上,每个视频会被物理分割成若干个分段文件,这些分段文件从开始到结束依次被编号为:0,1,2.….n,这些编号即为索引序号。

(6)ept_block:数据块的块编号与当前播放的数据块的块编号的距离,当距离为0时,ept_block相对应的属性值为:0;当距离为非0时,ept_block的属性值的计算公式如下:

value=min(abs(blockno–uplayblockno),0x7f);

式中,min为:两者取最小,abs为:取绝对值,blockno为:分段文件内的块编号,uplayblockno为:当前播放的数据块的块编号,0x7f为:十六进制数字。

(7)ept_time:数据块的添加时间,ept_time的属性值为:时间值;

时间值的计算公式如下:

value=min((数据块的当前时间戳秒数–数据块最后访问时间戳秒数)/100,0xff);

式中,min为:两者取最小,/为取商运算,比如,4/3=1,意为4对3取商为1,0xff为:十六进制数字。

特征编码值获取单元203,用于基于每个所述数据块的所有的所述预设属性,每个所述预设属性在所述预设优先级顺序中的所述位置,以及每个所述预设属性的所述属性值,得到每个所述数据块的特征编码值,所述特征编码值表征相对应的数据块的重要等级,所述特征编码值越大,相对应的数据块的重要等级越高,所述特征编码值越小,相对应的数据库的重要等级越低;

特征编码值获取单元203具体用于:

根据如下公式计算得到所述特征编码值key,公式如下:

式中,i为预设属性的编号,编号为各个预设属性所占用的位置,从右往左,从0开始,依次的顺序号,i>0,当i=0时,不进行移位运算,ni为编号为i的所述预设属性的属性名,v(ni)为ni的属性值,m为所述预设属性的总个数,m>0,bj为编号为j的预设属性占用的bit位数,j为预设属性的编号,<<为位运算操作符的向左移位操作,为i位置的属性值向左移动的位数,为每个被移动的属性值在参与计算时移位之后的值。

释放单元204,用于当满足预设释放条件时,选取预设数量的所述数据块作为目标数据块进行释放,每个所述目标数据块的所述特征编码值小于所述内存中除所述目标数据块以外的任何一个所述数据块的所述特征编码值。

其中,预设释放条件可以为:①内存中剩余的空间容量小于或等于空间阈值,其中,空间阈值的取值依据实际需要而定,比如,剩余3个数据块的空间容量。需要说明的是,当空间阈值为0时,若内存中剩余的空间容量等于0,则表明此时内存已满,在这种情况下,就需要释放一部分数据块。

②当需要存入新数据块时,所有的新数据块所占用的空间容量大于内充中剩余的空间容量,在这种情况下,就需要释放内存中的一部分数据块,以便保存新数据块。

需要特别说明的是,预设释放条件包括但不限于上述两种情况,其他需要内存释放的条件均属于本申请所要保护的范围。

具体的,在实际应用中,可以将内存中所有的数据块按照特征编码值的大小,由小到大排序,当需要释放n个数据块时,将排名位于n之前的数据块作为目标数据块进行释放。

其中,预设数量的取值依据实际需要而定,比如,设置内存放置数据块的数值上限max_block,当内存中存储的数据块的数量达到数值上限max_block,而又有新的数据块即将缓存至内存时,此时,可以根据需要缓存的数据块的数量,确定需要释放的数据块的数量。或者,只要当内存中存储的数据块的数量达到数值上限max_block,则释放预设数量的目标数据块,该预设数量提前设定。

综上可知,本发明公开了一种内存释放系统,基于内存中每个数据块的多个预设属性,每个预设属性在预设优先级顺序中的位置,以及每个预设属性的属性值,得到表征数据块重要等级的特征编码值,特征编码值越大,相对应的数据块的重要等级越高,特征编码值越小,相对应的数据块的重要等级越低,因此,选取特征编码值小的数据块作为目标数据块进行释放。由此可以看出,本发明在确定需要释放的数据块时,通过综合每个数据块的多个预设属性、每个预设属性在预设优先级顺序中的位置,以及每个预设属性的属性值,来确定数据块的重要等级,从而基于数据块的重要等级来确定是否释放该数据块,整个过程简单、可靠,因此,本发明大大简化了数据块在内存的释放逻辑,减少了内存的数据处理量,并有效避免了数据块释放错误情况的出现。

为进一步优化上述实施例,内存释放系统还可以包括:

回收单元,用于将释放的所述目标数据块所占用的存储空间回收到所述内存的一个预设位置;

添加单元,用于当添加新数据块时,释放所述预设位置,并将所述新数据块放置在所述预设位置。

综上可知,当释放目标数据块后,本发明中的内存会对目标数据块所占用的存储空间回收到内存的一个预设位置,当需要添加新数据块时,内存会释放该预设位置,使新数据块可以放置在该预设位置,从而有效避免了系统再次向内存分配新的存储空间,以用于放置新数据块,进而有效避免了内存反复的释放存储空间和被分配新的存储空间的情况,因此,提高了内存的稳定性。

需要特别说明的是,系统实施例中各组成部分的具体工作原理,请参见方法实施例对应部分,此处不再赘述。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1