CN109284188B - 一种缓冲数组维护方法、装置、终端及可读介质 - Google Patents
一种缓冲数组维护方法、装置、终端及可读介质 Download PDFInfo
- Publication number
- CN109284188B CN109284188B CN201811022452.4A CN201811022452A CN109284188B CN 109284188 B CN109284188 B CN 109284188B CN 201811022452 A CN201811022452 A CN 201811022452A CN 109284188 B CN109284188 B CN 109284188B
- Authority
- CN
- China
- Prior art keywords
- occupancy rate
- buffer array
- low
- state
- occupancy
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012423 maintenance Methods 0.000 title claims abstract description 72
- 238000000034 method Methods 0.000 title claims abstract description 45
- 238000004590 computer program Methods 0.000 claims description 4
- 239000002699 waste material Substances 0.000 abstract description 9
- 238000009825 accumulation Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000003491 array Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例公开了一种缓冲数组维护方法、装置、终端及可读介质,其中该方法包括:当循环定时器超时时,对缓冲数组的起始位置至终止位置依次进行扫描,当扫描结果不为空时更新占用数值;根据扫描结束后的占用数值及缓冲数组长度确定缓冲数组的占用率,根据占用率的数值大小确定占用率的状态,根据占用率的状态以及前一次循环定时器超时时占用率的状态,更新高占用率次数及低占用率次数;根据高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据维护策略对缓冲数组进行维护。本发明实施例提供的一种缓冲数组维护方法、装置、终端及可读介质,实现了缓冲数组的动态维护,在保证缓冲数组大小满足需求的同时避免了***内存资源的浪费。
Description
技术领域
本发明实施例涉及计算机技术,尤其涉及一种缓冲数组维护方法、装置、终端及可读介质。
背景技术
在Android终端中常需要开辟数据流的缓冲区域(例如缓冲数组),用以对数据流进行缓冲。目前,研发人员常将缓冲数组设置为一固定内存大小的区域。此时,若数据流的流量变化较大,则会因缓冲数组内存大小相对较大而出现***内存资源浪费的问题,或因缓冲数组内存大小相对较小而出现缓冲数组溢出的问题,导致数据流缓冲异常。
发明内容
有鉴于此,本发明实施例提供了一种缓冲数组维护方法、装置、终端及可读介质,实现了缓冲数组的动态维护,在保证缓冲数组大小满足需求的同时避免了***内存资源的浪费。
第一方面,本发明实施例提供了一种缓冲数组维护方法,包括:
当循环定时器超时时,对缓冲数组的起始位置至终止位置依次进行扫描,当扫描结果不为空时更新占用数值;
根据扫描结束后的占用数值以及缓冲数组长度确定缓冲数组的占用率,根据所述占用率的数值大小确定占用率的状态,根据所述占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新;
根据所述高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据所述维护策略对所述缓冲数组进行维护。
可选的,所述对缓冲数组的起始位置至终止位置依次进行扫描,包括:
对缓冲数组的索引序号为0的位置至索引序号为缓冲数组长度减1的位置依次进行扫描。
可选的,所述根据所述占用率的数值大小确定占用率的状态,包括:
将所述占用率的数值大小与预定义的第一阈值和第二阈值进行比较;
若占用率的数值大于等于第一阈值,则判断所述占用率的状态为高占用率;
若占用率的数值小于等于第二阈值,则判断所述占用率的状态为低占用率;
相应的,根据所述占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新,包括:
当所述占用率的状态为高占用率时,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数加1,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数清零,并将高占用率次数设置为1;
当所述占用率的状态为低占用率时,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数加1,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数清零,并将低占用率次数设置为1。
可选的,所述根据所述高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据所述维护策略对所述缓冲数组进行维护,包括:
当高占用率次数大于零时,根据高占用率次数计算高占用率时长;
若高占用率时长大于等于第一时长,则确定缓冲数组的维护策略为扩充策略,根据所述扩充策略对所述缓冲数组进行内存扩充;
或者,
当低占用率次数大于零时,根据低占用率次数计算低占用率时长;
若低占用率时长大于等于第二时长,则确定缓冲数组的维护策略为释放策略,根据所述释放策略对所述缓冲数组进行内存释放。
可选的,所述根据所述扩充策略对所述缓冲数组进行内存扩充,包括:
根据所述扩充策略确定平均占用率对应的数组扩充比例,根据所述数组扩充比例对缓冲数组进行内存扩充。
可选的,所述根据所述释放策略对所述缓冲数组进行内存释放,包括:
根据所述释放策略确定平均占用率对应的数组释放比例,根据所述释放比例对缓冲数组进行内存释放。
可选的,所述缓冲数组应用于清晰度切换过程中,具体应用于:
当监听到清晰度切换事件时,开辟缓冲子线程,在所述缓冲子线程中获取切换清晰度后的码流信息,并将获取的切换清晰度后的码流信息存储至缓冲数组中,以使播放器对象播放缓冲数组中存储的切换清晰度后的码流信息。
第二方面,本发明实施例提供了一种缓冲数组维护装置,包括:
占用数值更新模块,用于当循环定时器超时时,对缓冲数组的起始位置至终止位置依次进行扫描,当扫描结果不为空时更新占用数值;
次数更新模块,用于根据扫描结束后的占用数值以及缓冲数组长度确定缓冲数组的占用率,根据所述占用率的数值大小确定占用率的状态,根据所述占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新;
数组维护模块,用于根据所述高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据所述维护策略对所述缓冲数组进行维护。
第三方面,本发明实施例提供了一种终端,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任一实施例所述的缓冲数组维护方法。
第四方面,本发明实施例提供了一种可读介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任一实施例所述的缓冲数组维护方法。
本发明实施例提供的一种缓冲数组维护方法、装置、终端及可读介质,循环定时器每次超时,都对缓冲数组进行扫描,根据扫描结果更新占用数值;根据扫描结束后的占用数值及缓冲数组长度确定缓冲数组的占用率,根据占用率的数值大小确定占用率的状态,根据占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新;根据高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据维护策略对缓冲数组进行维护。从而实现了缓冲数组的动态维护,在保证缓冲数组大小满足需求的同时避免了***内存资源的浪费。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的一种缓冲数组维护方法流程图;
图2是本发明实施例二提供的一种缓冲数组维护装置结构示意图;
图3是本发明实施例三提供的一种终端的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,以下将参照本发明实施例中的附图,通过实施方式清楚、完整地描述本发明的技术方案,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
图1是本发明实施例一提供的一种缓冲数组维护方法流程图,本实施例可适用于缓冲数组维护的情况,该方法可以由终端实现,具体可通过终端中的软件和/或硬件来实施。参见图1,该缓冲数组维护方法包括如下步骤:
S110、当循环定时器超时时,对缓冲数组的起始位置至终止位置依次进行扫描,当扫描结果不为空时更新占用数值。
其中,具体可以调用Timer mTimer=new Timer()函数构建循环定时器;其中,mTimer为循环定时器名称,可以表示循环定时器,且循环定时器名称不限于mTimer;其中,可以通过new函数新建一个Timer类型的循环定时器。其中,研发人员可根据经验值设定循环定时器的周期T,在本发明实施例中具体可以根据遍历缓冲数组需要的时间设定循环定时器的周期T。
其中,在确定好循环定时器的周期T后,具体可以利用mTimer.schedule(task,t,T)的函数设置循环定时器的定时周期;其中,在循环定时器超时后,可以执行task任务,本发明实施例中例如可以是对缓冲数组的起始位置至终止位置依次进行扫描;其中,t单位为ms,表示延迟t ms后第一次执行循环定时器;其中,T单位为ms,表示循环定时器的定时周期,即每隔T ms定时器超时一次;其中,t的大小可以与T相同,也可以与T不同。其中,可以通过调用Timer中的start方法来启动循环定时器。
其中,在循环定时器超时时,开始对缓冲数组进行扫描;其中,扫描结果不为空可以理解为扫描位置存在数据;当扫描位置存在数据时,可以将预先定义的占用数值加1,已达到为存在数据的扫描位置计数的目的,直到缓冲数组扫描完毕,则扫描结束后的占用数值即为缓冲数组内存在数据的扫描位置的总数。
可选的,所述对缓冲数组的起始位置至终止位置依次进行扫描,包括:
对缓冲数组的索引序号为0的位置至索引序号为缓冲数组长度减1的位置依次进行扫描。
其中,缓冲数组第1、2、3...n个位置的索引序号分别为0、1、2...n-1,因此从缓冲数组的起始位置至终止位置的索引序号依次是0、1、2...byte.length()-1;其中,byte为缓冲数组名称,可以表示缓冲数组,且缓冲数组的名称不限于byte;其中,通过byte.length方法可以确定缓冲数组的长度。通过依次取出缓冲数组索引序号index=0至索引序号index=byte.legth()-1的数据,并判断数据是否为空,可以更新占用数值,以确定缓冲数组内存在数据的扫描位置的总数。
S120、根据扫描结束后的占用数值以及缓冲数组长度确定缓冲数组的占用率,根据占用率的数值大小确定占用率的状态,根据占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新。
其中,可以将扫描结束后的占用数值除以缓冲数组长度确定缓冲数组的占用率,具体可以是R=count/byte.length(),其中R表示冲数组的占用率,count表示占用数值,byte.length()表示缓冲数组长度。
可选的,根据占用率的数值大小确定占用率的状态,包括:
将占用率的数值大小与预定义的第一阈值和第二阈值进行比较;若占用率的数值大于等于第一阈值,则判断占用率的状态为高占用率;若占用率的数值小于等于第二阈值,则判断占用率的状态为低占用率;
相应的,根据占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新,包括:
当占用率的状态为高占用率时,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数加1,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数清零,并将高占用率次数设置为1;
当占用率的状态为低占用率时,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数加1,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数清零,并将低占用率次数设置为1。
其中,第二阈值小于第一阈值,且第一阈值和第二阈值可以根据实际需求进行设置,例如可以设置第一阈值为85%、92%或97%等,可以设置第二阈值为4%、11%或16%等,具体数值并不做限定。当占用率R大于等于第一阈值high时,可以将占用率R的状态标记为高占用率Rh,当占用率R小于等于第一阈值low时,可以将占用率R的状态标记为低占用率Rl。
其中,当本次循环定时器超时时占用率的状态为高占用率时,若前一次循环定时器超时时占用率的状态也为高占用率,则证明占用率的状态持续为高占用率,则将高占用率次数HighTime在原数据基础上加1,具体可以是HighTime=HighTime+1;若前一次循环定时器超时时占用率的状态为低占用率状态,则可确认前一次的HighTime被清零,且占用率的状态没有持续为低占用率,则本次将低占用率次数LowTime清零,以使低占用率次数重新开始累积,清零操作具体可以是LowTime=0,并且将高占用率次数设置为1,以开始高占用率次数的累积,具体可以是HighTime=1或HighTime=HighTime+1;若前一次循环定时器超时时占用率的状态既不为高占用率也不为低占用率,则认为前一次缓冲数组的占用率为正常状态,且可确认前一次的HighTime以及LowTime都被清零,则本次只需将高占用率次数设置为1,以开始高占用率次数的累积,具体可以是HighTime=1或HighTime=HighTime+1。
同理,当本次循环定时器超时时占用率的状态为低占用率时,若前一次循环定时器超时时占用率的状态也为低占用率,则证明占用率的状态持续为低占用率,则将低占用率次数LowTime在原数据基础上加1,具体可以是LowTime=LowTime+1;若前一次循环定时器超时时占用率的状态为高占用率状态,则可确认前一次的LowTime被清零,且占用率的状态没有持续为高占用率,则本次将高占用率次数HighTime清零,以使高占用率次数重新开始累积,清零操作具体可以是HighTime=0,并且将低占用率次数设置为1,以开始低占用率次数的累积,具体可以是LowTime=1或LowTime=LowTime+1;若前一次循环定时器超时时占用率的状态既不为高占用率也不为低占用率,则认为前一次缓冲数组的占用率为正常状态,且可确认前一次的HighTime以及LowTime都被清零,则本次只需将低占用率次数设置为1,以开始低占用率次数的累积,具体可以是LowTime=1或LowTime=LowTime+1。
综上,可以理解为当本次循环定时器超时时占用率的状态为高/低占用率,若前一次循环定时器超时时占用率的状态为高/低占用率,则累计的高/低占用率次数加1;若前一次循环定时器超时时占用率的状态为低/高占用率,则将低/高占用率次数清零,并将本次高/低占用率次数设置为1;若前一次循环定时器超时时占用率的状态为正常状态,则将本次高/低占用率次数设置为1。从而实现了只对连续状态的高/低占用率进行累计计数。
S130、根据高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据维护策略对缓冲数组进行维护。
其中,高占用率次数与低占用率次数会处于两者都为0,或其中一者为0而一者不为零的情况;其中,若不为0的一者为高占用率次数则证明缓冲数组连续高占用率,若不为0的一者为低占用率次数则证明缓冲数组连续低占用率;其中若出现连续高占用率或连续低占用率的情况则需要对缓冲数组进行相应的维护;其中,针对连续高占用率的情况可以对缓冲数组进行内存扩容,以防止缓冲数组可能出现的溢出情况,针对连续低占用率的情况可以对缓冲数组进行内存释放,以避免浪费***内存资源。
可选的,根据高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据维护策略对缓冲数组进行维护,包括:
当高占用率次数大于零时,根据高占用率次数计算高占用率时长;若高占用率时长大于等于第一时长,则确定缓冲数组的维护策略为扩充策略,根据扩充策略对缓冲数组进行内存扩充;
或者,当低占用率次数大于零时,根据低占用率次数计算低占用率时长;若低占用率时长大于等于第二时长,则确定缓冲数组的维护策略为释放策略,根据释放策略对缓冲数组进行内存释放。
其中,可以通过LongHigh=HighTime×T实现根据高占用率次数计算高占用率时长,其中LongHigh表示高占用率时长(可以理解为持续高占用率状态的时长),HighTime表示高占用率次数,T表示循环定时器周期;同理,可以通过LongLow=LowTime×T实现根据低占用率次数计算低占用率时长,其中LongLow表示低占用率时长(可以理解为持续低占用率状态的时长),LowTime表示低占用率次数,T表示循环定时器周期。
其中,第一时长为高占用率时长的参考时间,第二时长为低占用率时长的参考时间;其中,第一时长可以与第二时长的数值相同,也可以不相同。例如,若数据溢出的危害程度大于内存资源浪费的危害程度,则可以将第一时长设置较短,第二时间设置较长,以对高占用率时长进行更为灵敏的反馈;若数据溢出的危害程度小于内存资源浪费的危害程度,则可以将第一时长设置较长,第二时间设置较短,以对低占用率时长进行更为灵敏的反馈。
进一步的,根据扩充策略对缓冲数组进行内存扩充,包括:
根据扩充策略确定平均占用率对应的数组扩充比例,根据数组扩充比例对缓冲数组进行内存扩充。
进一步的,根据释放策略对缓冲数组进行内存释放,包括:
根据释放策略确定平均占用率对应的数组释放比例,根据释放比例对缓冲数组进行内存释放。
其中,可以将连续高/低占用率状态下的缓冲数组的占用率求取平均值,将求取的平均值作为平均占用率;其中,扩充策略中包含有平均占用率、扩充比例以及平均占用率与扩充比例间的对应关系;其中,释放策略中包含有平均占用率、释放比例以及平均占用率与释放比例间的对应关系。示例性的,扩充策略可以是,平均占用率为80%对应扩充比例为0.2,平均占用率为85%对应扩充比例为0.3,平均占用率90%对应扩充比例为0.5;示例性的,释放策略可以是,平均占用率为15%对应释放比例为0.5,平均占用率为10%对应释放比例为0.6,平均占用率5%对应扩充比例为0.7。值得注意的是,上述扩充策略以及释放策略仅为示例性举例,并不作为限定扩充策略以及释放策略的条件。
其中,根据数组扩充比例对缓冲数组进行内存扩充,具体可以是byte.length()=byte.length()+byte.length()×Re,其中byte.length()表示缓冲数组长度,Re表示扩充比例;同理,根据释放比例对缓冲数组进行内存释放,具体可以是byte.length()=byte.length()+byte.length()×Rr其中byte.length()表示缓冲数组长度,Rr表示释放比例。
通过高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据维护策略对缓冲数组进行维护,从而实现了缓冲数组的动态维护过程,在保证缓冲数组大小满足需求的同时避免了***内存资源的浪费。
可选的,缓冲数组应用于清晰度切换过程中,具体应用于:
当监听到清晰度切换事件时,开辟缓冲子线程,在缓冲子线程中获取切换清晰度后的码流信息,并将获取的切换清晰度后的码流信息存储至缓冲数组中,以使播放器对象播放缓冲数组中存储的切换清晰度后的码流信息。
其中,缓冲数组维护方法中的缓冲数组可以应用于清晰度切换过程中,现有的清晰度切换方法为播放器在准备阶段通过HTTP请求获取切换后清晰度的码流地址,并通过访问该码流地址获取相应的码流信息。现有的获取码流信息过程中,播放器呈现的视图通常为黑屏页面或加载页面(又为loading页面),使用户明显感觉到播放切换前码流信息与播放切换后码流信息之间存在一个断开时间,用户的清晰度切换体验较差。而通过设置缓冲数组,可以在缓冲数组中存储比准备阶段所获取的码流信息更小的一段码流信息。从而在切换清晰度时,当缓冲数组获取到一小段码流信息后便可首先播放该一小段码流信息,从而缩短了清晰度切换时间。其中,在缓冲数组存储码流信息过程中,可以采用本实施例提供的缓冲数组维护方法以实现缓冲数组的维护,在满足码流信息不溢出的情况下,避免了***内存资源的浪费,从而优化了清晰度切换过程。
本实施例提供的一种缓冲数组维护方法,循环定时器每次超时,都对缓冲数组进行扫描,根据扫描结果更新占用数值;根据扫描结束后的占用数值及缓冲数组长度确定缓冲数组的占用率,根据占用率的数值大小确定占用率的状态,根据占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新;根据高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据维护策略对缓冲数组进行维护。从而实现了缓冲数组的动态维护,在保证缓冲数组大小满足需求的同时避免了***内存资源的浪费。
实施例二
图2是本发明实施例二提供的一种缓冲数组维护装置结构示意图,本实施例可适用于缓冲数组维护的情况。
参见图2,本实施例中缓冲数组维护装置,包括:
占用数值更新模块210,用于当循环定时器超时时,对缓冲数组的起始位置至终止位置依次进行扫描,当扫描结果不为空时更新占用数值;
次数更新模块220,用于根据扫描结束后的占用数值以及缓冲数组长度确定缓冲数组的占用率,根据占用率的数值大小确定占用率的状态,根据占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新;
数组维护模块230,用于根据高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据维护策略对缓冲数组进行维护。
可选的,占用数值更新模块210,包括:
扫描子模块,用于对缓冲数组的索引序号为0的位置至索引序号为缓冲数组长度减1的位置依次进行扫描。
可选的,次数更新模块220,包括:
状态确定子模块,用于将占用率的数值大小与预定义的第一阈值和第二阈值进行比较;若占用率的数值大于等于第一阈值,则判断占用率的状态为高占用率;若占用率的数值小于等于第二阈值,则判断占用率的状态为低占用率;
次数更新子模块,用于当占用率的状态为高占用率时,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数加1,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数清零,并将高占用率次数设置为1;
当占用率的状态为低占用率时,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数加1,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数清零,并将低占用率次数设置为1。
可选的,数组维护模块230,具体用于:
当高占用率次数大于零时,根据高占用率次数计算高占用率时长;若高占用率时长大于等于第一时长,则确定缓冲数组的维护策略为扩充策略,根据扩充策略对缓冲数组进行内存扩充;
或者,当低占用率次数大于零时,根据低占用率次数计算低占用率时长;若低占用率时长大于等于第二时长,则确定缓冲数组的维护策略为释放策略,根据释放策略对缓冲数组进行内存释放。
可选的,数组维护模块230,包括:
内存扩充子模块,用于根据扩充策略确定平均占用率对应的数组扩充比例,根据数组扩充比例对缓冲数组进行内存扩充。
可选的,数组维护模块230,还包括:
内存释放子模块,用于根据释放策略确定平均占用率对应的数组释放比例,根据释放比例对缓冲数组进行内存释放。
可选的,缓冲数组应用于清晰度切换过程中,具体应用于:
当监听到清晰度切换事件时,开辟缓冲子线程,在缓冲子线程中获取切换清晰度后的码流信息,并将获取的切换清晰度后的码流信息存储至缓冲数组中,以使播放器对象播放缓冲数组中存储的切换清晰度后的码流信息。
本实施例提供的缓冲数组维护装置,与实施例一提出的缓冲数组维护方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见实施例一,并且本实施例与实施例一具有相同的有益效果。
实施例三
本实施例提供了一种终端,可以用于缓冲数组维护的情况。图3是本发明实施例三提供的一种终端的结构示意图。参见图3,该终端包括:
一个或多个处理器310;
存储器320,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器310执行,使得所述一个或多个处理器310实现如实施例一提出的缓冲数组维护方法。
图3中以一个处理器310为例;处理器310和存储器320可以通过总线或其他方式连接,图3中以通过总线连接为例。
存储器320作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的缓冲数组维护方法对应的程序指令/模块。处理器310通过运行存储在存储器320中的软件程序、指令以及模块,从而执行终端的各种功能应用以及数据处理,即实现上述的缓冲数组维护方法。
存储器320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器320可进一步包括相对于处理器310远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本实施例提出的终端与实施例一提出的缓冲数组维护方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见实施例一,并且本实施例与实施例一具有相同的有益效果。
实施例四
本实施例提供一种可读介质,其上存储有计算机程序,该程序被处理器执行时实现如实施例一提出的缓冲数组维护方法。
本实施例提出的可读介质与实施例一提出的缓冲数组维护方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见实施例一,并且本实施例与实施例一具有相同的有益效果。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (8)
1.一种缓冲数组维护方法,其特征在于,包括:
当循环定时器超时时,对缓冲数组的起始位置至终止位置依次进行扫描,当扫描结果不为空时更新占用数值;
根据扫描结束后的占用数值以及缓冲数组长度确定缓冲数组的占用率,根据所述占用率的数值大小确定占用率的状态,根据所述占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新;
根据所述高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据所述维护策略对所述缓冲数组进行维护;
其中,所述根据所述占用率的数值大小确定占用率的状态,包括:
将所述占用率的数值大小与预定义的第一阈值和第二阈值进行比较;
若占用率的数值大于等于第一阈值,则判断所述占用率的状态为高占用率;
若占用率的数值小于等于第二阈值,则判断所述占用率的状态为低占用率;
相应的,根据所述占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新,包括:
当所述占用率的状态为高占用率时,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数加1,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数清零,并将高占用率次数设置为1;
当所述占用率的状态为低占用率时,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数加1,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数清零,并将低占用率次数设置为1。
2.根据权利要求1所述的方法,其特征在于,所述对缓冲数组的起始位置至终止位置依次进行扫描,包括:
对缓冲数组的索引序号为0的位置至索引序号为缓冲数组长度减1的位置依次进行扫描。
3.根据权利要求1所述的方法,其特征在于,所述根据所述高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据所述维护策略对所述缓冲数组进行维护,包括:
当高占用率次数大于零时,根据高占用率次数计算高占用率时长;
若高占用率时长大于等于第一时长,则确定缓冲数组的维护策略为扩充策略,根据所述扩充策略对所述缓冲数组进行内存扩充;
或者,
当低占用率次数大于零时,根据低占用率次数计算低占用率时长;
若低占用率时长大于等于第二时长,则确定缓冲数组的维护策略为释放策略,根据所述释放策略对所述缓冲数组进行内存释放。
4.根据权利要求3所述的方法,其特征在于,所述根据所述扩充策略对所述缓冲数组进行内存扩充,包括:
根据所述扩充策略确定平均占用率对应的数组扩充比例,根据所述数组扩充比例对缓冲数组进行内存扩充。
5.根据权利要求3所述的方法,其特征在于,所述根据所述释放策略对所述缓冲数组进行内存释放,包括:
根据所述释放策略确定平均占用率对应的数组释放比例,根据所述释放比例对缓冲数组进行内存释放。
6.一种缓冲数组维护装置,其特征在于,包括:
占用数值更新模块,用于当循环定时器超时时,对缓冲数组的起始位置至终止位置依次进行扫描,当扫描结果不为空时更新占用数值;
次数更新模块,用于根据扫描结束后的占用数值以及缓冲数组长度确定缓冲数组的占用率,根据所述占用率的数值大小确定占用率的状态,根据所述占用率的状态以及前一次循环定时器超时时占用率的状态,对高占用率次数以及低占用率次数进行更新;
数组维护模块,用于根据所述高占用率次数或低占用率次数确定缓冲数组的维护策略,并根据所述维护策略对所述缓冲数组进行维护;
其中,所述次数更新模块,包括:
状态确定子模块,用于将占用率的数值大小与预定义的第一阈值和第二阈值进行比较;若占用率的数值大于等于第一阈值,则判断占用率的状态为高占用率;若占用率的数值小于等于第二阈值,则判断占用率的状态为低占用率;
次数更新子模块,用于当占用率的状态为高占用率时,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数加1,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数清零,并将高占用率次数设置为1;
当占用率的状态为低占用率时,若前一次循环定时器超时时占用率的状态为低占用率,则将低占用率次数加1,若前一次循环定时器超时时占用率的状态为高占用率,则将高占用率次数清零,并将低占用率次数设置为1。
7.一种终端,其特征在于,所述终端包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的缓冲数组维护方法。
8.一种可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的缓冲数组维护方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811022452.4A CN109284188B (zh) | 2018-09-03 | 2018-09-03 | 一种缓冲数组维护方法、装置、终端及可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811022452.4A CN109284188B (zh) | 2018-09-03 | 2018-09-03 | 一种缓冲数组维护方法、装置、终端及可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109284188A CN109284188A (zh) | 2019-01-29 |
CN109284188B true CN109284188B (zh) | 2020-10-16 |
Family
ID=65184315
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811022452.4A Active CN109284188B (zh) | 2018-09-03 | 2018-09-03 | 一种缓冲数组维护方法、装置、终端及可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109284188B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116089434B (zh) * | 2023-04-10 | 2023-06-13 | 北京奥星贝斯科技有限公司 | 一种数据存储方法、装置、存储介质及电子设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1842024A (zh) * | 2005-03-31 | 2006-10-04 | 华为技术有限公司 | 无线网络控制器存储资源监控方法及*** |
CN101515247A (zh) * | 2009-03-30 | 2009-08-26 | 福建星网锐捷网络有限公司 | 一种内存监控的方法和装置 |
CN101582051A (zh) * | 2009-06-10 | 2009-11-18 | 腾讯科技(深圳)有限公司 | 一种调整内存的方法和装置 |
CN102378065A (zh) * | 2011-10-19 | 2012-03-14 | 江西省南城县网信电子有限公司 | 基于mpeg-4的流媒体服务器端配置缓冲区的方法及*** |
CN103092700A (zh) * | 2013-02-01 | 2013-05-08 | 华为终端有限公司 | 内存清理方法、装置和终端设备 |
CN103309840A (zh) * | 2013-07-08 | 2013-09-18 | 天津汉柏汉安信息技术有限公司 | 一种新建连接的方法及其装置 |
CN103544063A (zh) * | 2013-09-30 | 2014-01-29 | 三星电子(中国)研发中心 | 应用于安卓平台的进程清除方法和装置 |
CN105094980A (zh) * | 2014-05-23 | 2015-11-25 | 北京云巢动脉科技有限公司 | 一种虚拟机内存的动态调整*** |
-
2018
- 2018-09-03 CN CN201811022452.4A patent/CN109284188B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1842024A (zh) * | 2005-03-31 | 2006-10-04 | 华为技术有限公司 | 无线网络控制器存储资源监控方法及*** |
CN101515247A (zh) * | 2009-03-30 | 2009-08-26 | 福建星网锐捷网络有限公司 | 一种内存监控的方法和装置 |
CN101582051A (zh) * | 2009-06-10 | 2009-11-18 | 腾讯科技(深圳)有限公司 | 一种调整内存的方法和装置 |
CN102378065A (zh) * | 2011-10-19 | 2012-03-14 | 江西省南城县网信电子有限公司 | 基于mpeg-4的流媒体服务器端配置缓冲区的方法及*** |
CN103092700A (zh) * | 2013-02-01 | 2013-05-08 | 华为终端有限公司 | 内存清理方法、装置和终端设备 |
CN103309840A (zh) * | 2013-07-08 | 2013-09-18 | 天津汉柏汉安信息技术有限公司 | 一种新建连接的方法及其装置 |
CN103544063A (zh) * | 2013-09-30 | 2014-01-29 | 三星电子(中国)研发中心 | 应用于安卓平台的进程清除方法和装置 |
CN105094980A (zh) * | 2014-05-23 | 2015-11-25 | 北京云巢动脉科技有限公司 | 一种虚拟机内存的动态调整*** |
Also Published As
Publication number | Publication date |
---|---|
CN109284188A (zh) | 2019-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103092700B (zh) | 内存清理方法、装置和终端设备 | |
US20180013822A1 (en) | Service request processing method, related apparatus, and system | |
CN107615250B (zh) | 一种针对应用的处理方法、装置及智能终端 | |
CN110471749B (zh) | 任务处理方法、装置、计算机可读存储介质和计算机设备 | |
CN107402851B (zh) | 一种数据恢复控制方法及装置 | |
JP7037066B2 (ja) | 評価装置、評価方法および評価プログラム | |
CN112383585A (zh) | 消息处理***、方法及电子设备 | |
CN112019384A (zh) | 带宽预测方法、装置、设备及存储介质 | |
CN112398945A (zh) | 一种基于背压的业务处理方法及装置 | |
CN109284188B (zh) | 一种缓冲数组维护方法、装置、终端及可读介质 | |
CN110737606B (zh) | 内存回收处理方法、装置、电子设备以及存储介质 | |
CN106412630B (zh) | 视频列表切换控制方法及装置 | |
CN109218722B (zh) | 一种视频编码方法、装置及设备 | |
CN112817772A (zh) | 一种数据通信方法、装置、设备及存储介质 | |
CN109144613B (zh) | Android清晰度切换方法、装置、终端及可读介质 | |
CN112073329A (zh) | 分布式限流方法、装置、电子设备和存储介质 | |
CN106775889B (zh) | 利用对象池实现Flash播放器资源加载的方法及*** | |
US20170279771A1 (en) | Packet processing method, network server, and virtual private network system | |
CN110401708B (zh) | 基于服务器负载状态的会话处理***及方法 | |
CN110535785B (zh) | 一种发送频率的控制方法、装置和分布式*** | |
CN108616461B (zh) | 一种策略切换方法及装置 | |
CN110297602B (zh) | 一种实时数据的处理方法及装置 | |
CN111107019A (zh) | 一种数据传输方法、装置、设备及计算机可读存储介质 | |
CN113835856B (zh) | 一种ai平台的存储统计方法、装置及设备 | |
CN112188545B (zh) | 一种接入控制方法、装置、存储介质和基站 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |