首页 / 专利库 / 软件 / 操作系统 / 进程 / 子进程 / 内存分配方法、装置、存储介质及电子设备

内存分配方法、装置、存储介质及电子设备

阅读:988发布:2020-05-11

专利汇可以提供内存分配方法、装置、存储介质及电子设备专利检索,专利查询,专利分析的服务。并且本 申请 实施例 公开了一种内存分配方法、装置、存储介质及 电子 设备,其中,本申请实施例每间隔预设时长,统计过去的预设时长内接收到的内存分配 请求 的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数;进行内存碎片 整理 ,以得到内存量不小于所述预期内存请求量的连续内存空间,其中,所述连续内存空间的个数与所述预期请求次数匹配;当接收到内存分配请求时,基于所述连续内存空间进行内存分配,改善了由于内存碎片导致的性能开销,提高了内存分配效率。,下面是内存分配方法、装置、存储介质及电子设备专利的具体信息内容。

1.一种内存分配方法,其特征在于,包括:
每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;
根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数;
进行内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间,其中,所述连续内存空间的个数与所述预期请求次数匹配;
当接收到内存分配请求时,基于所述连续内存空间进行内存分配。
2.如权利要求1所述的内存分配方法,其特征在于,所述统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量之后,还包括:
判断所述历史内存请求量是否小于预设阈值
若否,则执行根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数。
3.如权利要求1所述的内存分配方法,其特征在于,所述根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数之前,还包括:
当所述历史请求次数大于1时,检测多个所述历史内存请求量中是否小于预设阈值的历史内存请求量;
若是,则删除所述多个所述历史内存请求量中小于所述预设阈值的历史内存请求量,并根据小于所述预设阈值的历史内存请求量的个数修改所述历史请求次数;
并基于删除操作后的剩余的历史内存请求量和修改操作后的历史请求次数,执行所述根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数。
4.如权利要求1所述的内存分配方法,其特征在于,根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数,包括:
将一次或者多次历史内存分配请求对应的历史内存请求量中的最大历史内存请求量作为预期内存请求量,将所述历史请求次数作为预期请求次数。
5.如权利要求1所述的内存分配方法,其特征在于,所述进行内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间,包括:
唤醒内存回收线程以进行内存回收和内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间。
6.如权利要求1至5任一项所述的内存分配方法,其特征在于,所述每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量之前,还包括:
判断当前前台运行的应用程序是否为预设应用程序;
若是,则执行所述每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量。
7.如权利要求1至5任一项所述的内存分配方法,其特征在于,所述每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量,包括:
每间隔预设时长,统计过去的预设时长内接收到目标进程发送的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;
所述进行内存碎片整理,包括:
对所述目标进程对应的内存空间进行内存碎片整理;
所述当接收到内存分配请求时,基于所述连续内存空间进行内存分配,包括:
当接收到所述目标进程发送的内存分配请求时,基于所述连续内存空间进行内存分配。
8.一种内存分配装置,其特征在于,包括:
历史统计模,用于每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;
预期计算模块,用于根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数;
碎片整理模块,用于进行内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间,其中,所述连续内存空间的个数与所述预期请求次数匹配;
内存分配模块,用于当接收到内存分配请求时,基于所述连续内存空间进行内存分配。
9.一种存储介质,其上存储有计算机程序,其特征在于,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至7任一项所述的内存分配方法。
10.一种电子设备,包括处理器和存储器,所述存储器存储有计算机程序,其特征在于,所述处理器通过调用所述计算机程序,用于执行如权利要求1至7任一项所述的内存分配方法。

说明书全文

内存分配方法、装置、存储介质及电子设备

技术领域

[0001] 本申请涉及通信技术领域,具体涉及一种内存分配方法、装置、存储介质及电子设备。

背景技术

[0002] Linux内核在内存分配过程中,如果系统内存不满足需求,会唤醒内存回收线程,尝试回收一定数量的页框。内存回收线程则会唤醒另一个碎片整理的线程,并在唤醒该线程的同时指定了需求的内存量。此线程在执行规整操作中,会一直扫描整个内存域,直到获取足够的页框可以拼凑出符合需求的内存量的高阶内存。但是系统及应用程序在运行过程中,往往会有连续的多次内存分配请求,这种分配方案难以满足连续的内存分配需求,导致内存分配效率低。发明内容
[0003] 本申请实施例提供一种内存分配方法、装置、存储介质及电子设备,能够提高内存分配效率。
[0004] 第一方面,本申请实施例提供一种内存分配方法,包括:
[0005] 每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;
[0006] 根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数;
[0007] 进行内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间,其中,所述连续内存空间的个数与所述预期请求次数匹配;
[0008] 当接收到内存分配请求时,基于所述连续内存空间进行内存分配。
[0009] 第二方面,本申请实施例还提供一种内存分配装置,包括:
[0010] 历史统计模块,用于每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;
[0011] 预期计算模块,用于根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数;
[0012] 碎片整理模块,用于进行内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间,其中,所述连续内存空间的个数与所述预期请求次数匹配;
[0013] 内存分配模块,用于当接收到内存分配请求时,基于所述连续内存空间进行内存分配。
[0014] 第三方面,本申请实施例还提供一种存储介质,其上存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如本申请任一实施例提供的内存分配方法。
[0015] 第四方面,本申请实施例还提供一种电子设备,包括处理器和存储器,所述存储器有计算机程序,所述处理器通过调用所述计算机程序,用于执行如本申请任一实施例提供的内存分配方法。
[0016] 本申请实施例提供的技术方案,每间隔预设时长,通过对过去的一段时间内的内存分配情况进行统计,得到过去的预设时长内接收到的内存分配请求的历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出未来一段时间内的预期内存请求量和预期请求次数。然后,提前进行内存规整,得到符合预期内存请求量和预期请求次数的连续内存空间,用于接下来的内存分配。该方案通过对历史内存分配情况进行学习,预测未来可能需要的内存情况,主动提前进行内存碎片的整理,以整理出满足未来需求的连续内存空间,由于提前进行了内存碎片的整理,当下一次接收到内存分配请求时,可以无需整理碎片直接进行内存分配,通过这种方式循环往复,每间隔一段时长,进行一次整理,以满足连续多次的内存需求的分配,改善了由于内存碎片导致的性能开销,提高了内存分配效率。附图说明
[0017] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018] 图1为本申请实施例提供的内存分配方法的第一种流程示意图。
[0019] 图2为本申请实施例提供的内存分配方法的应用场景对比示意图。
[0020] 图3为本申请实施例提供的内存分配方法的内存分配流程示意图。
[0021] 图4为本申请实施例提供的内存分配装置的结构示意图。
[0022] 图5为本申请实施例提供的电子设备的第一种结构示意图。
[0023] 图6为本申请实施例提供的电子设备的第二种结构示意图。

具体实施方式

[0024] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请的保护范围。
[0025] 在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0026] 本申请实施例提供一种内存分配方法,该内存分配方法的执行主体可以是本申请实施例提供的内存分配装置,或者集成了该内存分配装置的电子设备,其中该内存分配装置可以采用硬件或者软件的方式实现。其中,电子设备可以是智能手机、平板电脑、掌上电脑、笔记本电脑、或者台式电脑等设备。
[0027] 请参阅图1,图1为本申请实施例提供的内存分配方法的第一种流程示意图。本申请实施例提供的内存分配方法的具体流程可以如下:
[0028] 101、每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量。
[0029] 电子设备中的一些应用程序在运行时,可能会有连续的多次内存分配请求,特别是高阶分配请求。但是随着系统的运行,内存空间中的内存页面经过多次分配、释放操作,会产生很多不连续的、分散的内存页面,这样的内存页面即为内存碎片。并且随着系统的运行时间越长,内存碎片越多。当进程请求的内存量大时,即使内存空间中总的空闲内存页面满足需求,但是由于大量的内存碎片存在,会导致分配不了连续的内存,造成内存分配失败。此时,就需要先对内存碎片进行整理,以得到连续的可分配内存空间,才能继续进行内存分配。
[0030] 其中,关于内存的阶数(order)的解释如下:由于内存分配一般都是按照2的整次2
幂,例如,分配order=2的内存,实际分配的是4K*2=16KB的内存,其中,一个内存页面的容量为4KB。一般内存分配请求对应的内存需求量的阶数大于一定阶数的请求,称为高阶分配请求,即请求的是高阶内存。例如,将order≥2的内存称为高阶内存,反之,称为低阶内存。高阶内存对应的内存页面的数量较多,例如,某进程请求32KB的内存,则需要为其分配连续的8个内存页面。该请求可以认为是一个高阶分配请求。
[0031] 而碎片整理需要一定的时间,如果每一次接收到内存分配请求,都需要先进行内存碎片整理才能进行内存的分配,当出现连续多次的内存分配请求时,会导致内存分配效率低下,进而导致应用程序的整体响应速度慢,影响用户体验。
[0032] 本申请实施例中,对过去一段时间的内存分配情况进行统计,并根据统计结果进行学习,以预估未来一段时间内可能的内存请求量,然后基于预估数据,提前进行内存整理,得到连续的内存空间。例如,电子设备每间隔预设时长,对过去的这个预设时长内接收到的内存分配请求的历史请求次数进行统计,同时确定这个预设时长内的每一个历史内存分配请求对应的历史内存请求量。其中,预设时长可以根据需要设置,比如,设置预设时长t=1s。则每间隔1s,统计过去这1s内接收到的内存分配请求的历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量。
[0033] 102、根据历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数。
[0034] 接下来,根据统计的历史请求次数和每一次历史内存分配请求对应的历史内存请求量,预估接下来的1s内可能的预期内存请求量和预期请求次数,作为内存碎片整理的依据。
[0035] 在一些实施例中,可以将历史内存请求量作为预期内存请求量,例如,在过去的1s内,一共有5次内存分配请求,每一次的内存分配请求对应的内存需求量均为64KB,那么可以将64KB作为预期内存请求量。将历史请求次数作为预期请求次数,即将5次作为预期请求次数。
[0036] 或者,在一些实施例中,在过去的预设时长内,可能每次请求的内存量不完全相同,则将最大请求值作为预期内存请求量。例如,根据历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数,包括:将一次或者多次历史内存分配请求对应的历史内存请求量中的最大历史内存请求量作为预期内存请求量,将历史请求次数作为预期请求次数。例如,在过去的1s内,一共有5次内存分配请求,第一次和第二次的内存请求量为32KB,第三次至第五次的内存请求量为64KB。则可以将内存请求量的最大值64KB作为预期内存请求量。
[0037] 或者,在其他实施例中,102可以包括:根据连续多个预设时长内统计的历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数。
[0038] 例如,在过去连续三个1s内,第一个1s内有5次内存分配请求,每一次的内存分配请求的对应的内存需求量均为64KB;第二个1s内有4次内存分配请求,每一次的内存分配请求的对应的内存需求量均为32KB;第三个1s内有6次内存分配请求,每一次的内存分配请求的对应的内存需求量均为48KB;则将过去三个历史时长内的历史请求次数的均值或最大值,作为预期请求次数。将过去三个历史时长内的历史内存请求量的均值或最大值,作为预期内存请求量。
[0039] 103、进行内存碎片整理,以得到内存量不小于预期内存请求量的连续内存空间,其中,连续内存空间的个数与预期请求次数匹配。
[0040] 在确定出预期内存请求量M和预期请求次数n之后,进行内存碎片整理。例如,唤醒内存回收线程以进行内存回收和内存碎片整理,以得到内存量不小于预期内存请求量的连续内存空间。
[0041] 内存回收线程在进行内存回收和碎片整理时,以得到至少n个内存量不小于预期内存请求量M的连续内存空间。
[0042] 104、当接收到内存分配请求时,基于连续内存空间进行内存分配。
[0043] 由于在103中已经提前进行了内存碎片的整理,并且碎片的整理是由独立的线程在后台实现的,不必等到接收到内存分配请求时,才会去整理内存。节省了内存整理的等待时间。此后,在接收到内存分配请求时,可以直接基于整理出来的连续内存空间进行内存分配,提高了内存分配效率。
[0044] 以电子设备中的相机应用程序为例,请参阅图2,图2为本申请实施例提供的内存分配方法的应用场景对比示意图。在使用相机进行拍摄的过程中,由于拍摄以及各种图像处理操作,会需要连续多次申请内存分配,例如,假设相机需要20次64KB的连续内存需求。每次分配64KB的高阶内存时碎片整理耗时50ms,假设每次都是在空闲内存不满足时采取进行内存回收和内存整理,整个过程下来碎片整理共耗时800ms。假设在相机应用程序运行的
1s内,相机有4次内存分配请求,每一次的内存分配请求对应的内存需求量均为64KB,这样对于相机应用程序的进程来说,1s的时间中有200ms的时长是花费在等待内存碎片整理的时间长的,这段等待的时间中,由于没有分配到对应的内存,相机应用程序不能正常运行。
如果采用本申请的方案,在应用程序正常运行的同时、内存申请的间隙,提前根据历史内存申请情况进行内存碎片的回收与整理,得到连续内存空间,并且这个连续内存空间能够满足高阶内存的分配。当相机应用程序再次申请内存分配时,无需等待碎片整理。请参阅图3,图3为本申请实施例提供的内存分配方法的内存分配流程示意图。通过本申请的方案,每间隔预设时长,预先进行一次内存碎片整理,节省了上述花费在等待内存碎片整理的200ms,如此循环往复,从整体上提高了应用程序的响应速度,进而提高了数据处理效率,提升用户体验。
[0045] 具体实施时,本申请不受所描述的各个步骤的执行顺序的限制,在不产生冲突的情况下,某些步骤还可以采用其它顺序进行或者同时进行。
[0046] 由上可知,本申请实施例提供的内存分配方法,每间隔预设时长,通过对过去的一段时间内的内存分配情况进行统计,得到过去的预设时长内接收到的内存分配请求的历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,根据历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出未来一段时间内的预期内存请求量和预期请求次数。然后,提前进行内存规整,得到符合预期内存请求量和预期请求次数的连续内存空间,用于接下来的内存分配。该方案通过对历史内存分配情况进行学习,预测未来可能需要的内存情况,主动提前进行内存碎片的整理,以整理出满足未来需求的连续内存空间,由于提前进行了内存碎片的整理,当下一次接收到内存分配请求时,可以无需整理碎片直接进行内存分配,通过这种方式循环往复,每间隔一段时长,进行一次整理,以满足连续多次的内存需求的分配,改善了由于内存碎片导致的性能开销,提高了内存分配效率。
[0047] 在一些实施例中,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量之后,还包括:
[0048] 判断历史内存请求量是否小于预设阈值
[0049] 若否,则执行根据历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数。
[0050] 在一些情况下,应用程序请求的可能是低阶内存。例如,应用程序的进程请求的是4KB、8KB等阶数小于2的内存需求量。这种内存需求量较少数量的连续页面即可满足需求,对于4KB的内存需求量,一个页面即可满足分配请求。在这种情况下,无需整理碎片,因为这些内存碎片可以满足分配请求。因此,在获取到每一次历史内存分配请求对应的历史内存请求量,如果历史内存请求量都小于预设阈值,则不继续执行后续内存预估和整理的步骤,在预设时长后返回执行101。可以理解的是,当历史请求次数大于1时,多个历史内存请求量中有一个大于预设阈值,即可判定历史内存请求量不小于预设阈值。
[0051] 反之,如果统计得到的历史内存请求量中,有历史内存请求量不小于预设阈值,则执行102,对接下来的内存申请情况进行预估。
[0052] 在一些实施例中,根据历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数之前,还包括:当历史请求次数大于1时,检测多个历史内存请求量中是否小于预设阈值的历史内存请求量;若是,则删除多个历史内存请求量中小于预设阈值的历史内存请求量,并根据小于预设阈值的历史内存请求量的个数修改历史请求次数;并基于删除操作后的剩余的历史内存请求量和修改操作后的历史请求次数,执行根据历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数。
[0053] 该实施例中,当统计得到的历史请求次数大于1时,对多个历史内存请求量中是否包含有小于预设阈值的历史内存请求量进行判断,如果有,则从统计的数据中删除小于预设阈值的历史内存请求量。并依据剩余的大于预设阈值的历史内存请求量和历史请求次数得到预期内存请求量和预期请求次数。
[0054] 在一些实施例中,每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量之前,还包括:判断当前前台运行的应用程序是否为预设应用程序;若是,则执行每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量。
[0055] 该实施例中,可以只对运行在前台的特定应用程序采用这种内存分配方式,以保证该应用程序的响应速度,避免延迟,而对于后台应用,由于用户无法直接感知到其响应速度,因此,无需预先整理碎片,以节省资源,供前台应用程序使用。也就是说,当检测到前台运行的应用程序为预设应用程序时,才会对其内存分配情况进行统计,以预先进行内存碎片的整理。例如,预设应用程序可以为相机应用程序、视频播放应用程序、购物应用程序等。
[0056] 在一些实施例中,每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量,包括:每间隔预设时长,统计过去的预设时长内接收到目标进程发送的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;进行内存碎片整理,包括:对目标进程对应的内存空间进行内存碎片整理;当接收到内存分配请求时,基于连续内存空间进行内存分配,包括:当接收到目标进程发送的内存分配请求时,基于连续内存空间进行内存分配。
[0057] 该实施例中,可以针对不同的应用程序分配各自的内存空间。对于每一个应用程序,对该应用程序的进程在预设时长内发送的内存分配请求的历史请求次数进行统计,获取每一次历史内存分配请求对应的历史内存请求量。并根据得到的预期内存请求量和预期内存请求次数,对该进程对应的内存空间进行碎片整理。当接收到该应用程序的进程发送内存分配请求时,基于该内存空间中整理出的连续内存空间进行内存分配。
[0058] 在一实施例中还提供一种内存分配装置。请参阅图4,图4为本申请实施例提供的内存分配装置300的结构示意图。其中该内存分配装置300应用于电子设备,该内存分配装置300包括模块301、模块302、模块303以及模块304,如下:
[0059] 历史统计模块301,用于每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;
[0060] 预期计算模块302,用于根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数;
[0061] 碎片整理模块303,用于进行内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间,其中,所述连续内存空间的个数与所述预期请求次数匹配;
[0062] 内存分配模块304,用于当接收到内存分配请求时,基于所述连续内存空间进行内存分配。
[0063] 在一些实施例中,历史统计模块301还用于:判断所述历史内存请求量是否小于预设阈值;
[0064] 预期计算模块302还用于:当历史内存请求量不小于预设阈值时,根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数
[0065] 在一些实施例中,历史统计模块301还用于:当所述历史请求次数大于1时,检测多个所述历史内存请求量中是否小于预设阈值的历史内存请求量;
[0066] 若是,则删除所述多个所述历史内存请求量中小于所述预设阈值的历史内存请求量,并根据小于所述预设阈值的历史内存请求量的个数修改所述历史请求次数;
[0067] 预期计算模块302还用于:基于删除操作后的剩余的历史内存请求量和修改操作后的历史请求次数,执行所述根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数。
[0068] 在一些实施例中,预期计算模块302还用于:将一次或者多次历史内存分配请求对应的历史内存请求量中的最大历史内存请求量作为预期内存请求量,将所述历史请求次数作为预期请求次数。
[0069] 在一些实施例中,碎片整理模块303还用于:唤醒内存回收线程以进行内存回收和内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间。
[0070] 在一些实施例中,该内存分配装置还包括进程判断模块,该进程判断用于:判断当前前台运行的应用程序是否为预设应用程序;
[0071] 历史统计模块301还用于:当当前前台运行的应用程序为预设应用程序时,每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量。
[0072] 在一些实施例中,碎片整理模块303还用于:每间隔预设时长,统计过去的预设时长内接收到目标进程发送的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;
[0073] 碎片整理模块303还用于:对所述目标进程对应的内存空间进行内存碎片整理;
[0074] 内存分配模块304还用于:当接收到所述目标进程发送的内存分配请求时,基于所述连续内存空间进行内存分配。
[0075] 具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施可参见前面的方法实施例,在此不再赘述。
[0076] 应当说明的是,本申请实施例提供的内存分配装置与上文实施例中的内存分配方法属于同一构思,在内存分配装置上可以运行内存分配方法实施例中提供的任一方法,其具体实现过程详见内存分配方法实施例,此处不再赘述。
[0077] 由上可知,本申请实施例提出的内存分配装置,每间隔预设时长,通过对过去的一段时间内的内存分配情况进行统计,得到过去的预设时长内接收到的内存分配请求的历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出未来一段时间内的预期内存请求量和预期请求次数。然后,提前进行内存规整,得到符合预期内存请求量和预期请求次数的连续内存空间,用于接下来的内存分配。该方案通过对历史内存分配情况进行学习,预测未来可能需要的内存情况,主动提前进行内存碎片的整理,以整理出满足未来需求的连续内存空间,由于提前进行了内存碎片的整理,当下一次接收到内存分配请求时,可以无需整理碎片直接进行内存分配,通过这种方式循环往复,每间隔一段时长,进行一次整理,以满足连续多次的内存需求的分配,改善了由于内存碎片导致的性能开销,提高了内存分配效率。
[0078] 本申请实施例还提供一种电子设备。所述电子设备可以是智能手机、平板电脑等设备。请参阅图5,图5为本申请实施例提供的电子设备的第一种结构示意图。电子设备400包括处理器401和存储器402。其中,处理器401与存储器402电性连接。
[0079] 处理器401是电子设备400的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或调用存储在存储器402内的计算机程序,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。
[0080] 存储器402可用于存储计算机程序和数据。存储器402存储的计算机程序中包含有可在处理器中执行的指令。计算机程序可以组成各种功能模块。处理器401通过调用存储在存储器402的计算机程序,从而执行各种功能应用以及数据处理。
[0081] 在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
[0082] 每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;
[0083] 根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数;
[0084] 进行内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间,其中,所述连续内存空间的个数与所述预期请求次数匹配;
[0085] 当接收到内存分配请求时,基于所述连续内存空间进行内存分配。
[0086] 在一些实施例中,请参阅图6,图6为本申请实施例提供的电子设备的第二种结构示意图。电子设备400还包括:射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409。其中,处理器401分别与射频电路403、显示屏404、控制电路405、输入单元406、音频电路407、传感器408以及电源409电性连接。
[0087] 射频电路403用于收发射频信号,以通过无线通信与网络设备或其他电子设备进行通信。
[0088] 显示屏404可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图像、文本、图标、视频和其任意组合来构成。
[0089] 控制电路405与显示屏404电性连接,用于控制显示屏404显示信息。
[0090] 输入单元406可用于接收输入的数字、字符信息或用户特征信息(例如指纹),以及产生与用户设置以及功能控制有关的键盘鼠标、操作杆、光学或者轨迹球信号输入。其中,输入单元406可以包括指纹识别模组。
[0091] 音频电路407可通过扬声器、传声器提供用户与电子设备之间的音频接口。其中,音频电路407包括麦克。所述麦克风与所述处理器401电性连接。所述麦克风用于接收用户输入的语音信息。
[0092] 传感器408用于采集外部环境信息。传感器408可以包括环境亮度传感器、加速度传感器、陀螺仪等传感器中的一种或多种。
[0093] 电源409用于给电子设备400的各个部件供电。在一些实施例中,电源409可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
[0094] 尽管图6中未示出,电子设备400还可以包括摄像头、蓝牙模块等,在此不再赘述。
[0095] 在本实施例中,电子设备400中的处理器401会按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的计算机程序,从而实现各种功能:
[0096] 每间隔预设时长,统计过去的预设时长内接收到的内存分配请求的历史请求次数,并确定每一次历史内存分配请求对应的历史内存请求量;
[0097] 根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出预期内存请求量和预期请求次数;
[0098] 进行内存碎片整理,以得到内存量不小于所述预期内存请求量的连续内存空间,其中,所述连续内存空间的个数与所述预期请求次数匹配;
[0099] 当接收到内存分配请求时,基于所述连续内存空间进行内存分配。
[0100] 由上可知,本申请实施例提供了一种电子设备,所述电子设备每间隔预设时长,通过对过去的一段时间内的内存分配情况进行统计,得到过去的预设时长内接收到的内存分配请求的历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,根据所述历史请求次数,以及每一次历史内存分配请求对应的历史内存请求量,确定出未来一段时间内的预期内存请求量和预期请求次数。然后,提前进行内存规整,得到符合预期内存请求量和预期请求次数的连续内存空间,用于接下来的内存分配。该方案通过对历史内存分配情况进行学习,预测未来可能需要的内存情况,主动提前进行内存碎片的整理,以整理出满足未来需求的连续内存空间,由于提前进行了内存碎片的整理,当下一次接收到内存分配请求时,可以无需整理碎片直接进行内存分配,通过这种方式循环往复,每间隔一段时长,进行一次整理,以满足连续多次的内存需求的分配,改善了由于内存碎片导致的性能开销,提高了内存分配效率。
[0101] 本申请实施例还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,所述计算机执行上述任一实施例所述的内存分配方法。
[0102] 需要说明的是,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过计算机程序来指令相关的硬件来完成,所述计算机程序可以存储于计算机可读存储介质中,所述存储介质可以包括但不限于:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
[0103] 此外,本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是某些实施例还包括没有列出的步骤或模块,或某些实施例还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
[0104] 以上对本申请实施例所提供的内存分配方法、装置、存储介质及电子设备进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈