CN114116215A - 内存管理方法、装置、电子设备及存储介质 - Google Patents

内存管理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN114116215A
CN114116215A CN202111400870.4A CN202111400870A CN114116215A CN 114116215 A CN114116215 A CN 114116215A CN 202111400870 A CN202111400870 A CN 202111400870A CN 114116215 A CN114116215 A CN 114116215A
Authority
CN
China
Prior art keywords
ion
memory
current
pool
operating system
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.)
Pending
Application number
CN202111400870.4A
Other languages
English (en)
Inventor
赵林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Xiaomi Mobile Software Co Ltd
Original Assignee
Beijing Xiaomi Mobile Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Xiaomi Mobile Software Co Ltd filed Critical Beijing Xiaomi Mobile Software Co Ltd
Priority to CN202111400870.4A priority Critical patent/CN114116215A/zh
Publication of CN114116215A publication Critical patent/CN114116215A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5022Mechanisms to release resources

Abstract

本公开涉及一种内存管理方法、装置、电子设备及存储介质,其中,方法包括:在当前ION内存中缓存的数据被使用完成后,判断ION池占用的ION内存的总量是否大于或等于内存释放阈值;如果所述ION池占用的ION内存的总量大于或等于所述内存释放阈值,则将所述当前ION内存释放给操作系统。从而,可以有效防止ION池占用内存过多导致的一系列问题,缓和系统内存短缺的压力,同时主动向操作系统释放内存,也避免了等待内存回收带来的延迟。

Description

内存管理方法、装置、电子设备及存储介质
技术领域
本公开涉及内存管理技术领域,尤其涉及一种内存管理方法、装置、电子设备及存储介质。
背景技术
ION,Linux大块内存分配管理的一套机制,是为解决内存碎片管理而引入的通用内存管理器。Android(安卓)操作系统在基于Linux内核的内存管理机制的基础上,引入了ION内存管理器。ION设计的目标是为了避免内存碎片化,或者为一些有着特殊内存需求的应用,比如相机、视频播放器等,在系统启动的时候,会为它们预留一些内存池,称为ION池,ION池的ION内存就由ION来管理。
然而,ION池占用内存的多少无法由操作系统去定量决定,一般只有在系统内存严重不足时会触发内存回收,此时才能将ION池占用的内存资源释放给操作系统。这样存在的问题是,没有考虑ION池体积过大对操作系统造成的影响,且系统内存回收滞后。
发明内容
为克服相关技术中存在的问题,本公开提供一种内存管理方法、装置、电子设备及存储介质。
根据本公开实施例的第一方面,提供一种内存管理方法,包括:
在当前ION内存中缓存的数据被使用完成后,判断ION池占用的ION内存的总量是否大于或等于内存释放阈值;
如果所述ION池占用的ION内存的总量大于或等于所述内存释放阈值,则将所述当前ION内存释放给操作系统,其中,所述ION池占用的ION内存是从所述操作系统申请分配的用于缓存数据的存储空间。
在一种可选的实施方式中,所述方法还包括:
计算所述操作系统的当前可操作内存总数;
获取所述操作系统的当前压力参数并根据所述当前压力参数确定阈值调节系数;其中,所述阈值调节系数与所述当前压力参数呈负相关;
根据所述当前可操作内存总数和所述阈值调节系数,计算所述内存释放阈值。
在一种可选的实施方式中,所述计算所述操作系统的当前可操作内存总数,包括:
获取所述操作系统的当前可用内存总数和当前不可回收内存数量;
根据所述当前可用内存总数和所述当前不可回收内存数量的差值,获得所述操作系统的当前可操作内存总数。
在一种可选的实施方式中,所述根据所述当前压力参数确定阈值调节系数,包括:
当所述当前压力参数小于第一阈值,则确定阈值调节系数为第一百分比;
当所述当前压力参数大于或等于第一阈值,且小于或等于第二阈值,则确定阈值调节系数为第二百分比;
当所述当前压力参数大于第二阈值,则确定阈值调节系数为第三百分比;
其中,所述第一阈值小于所述第二阈值,且所述第一百分比、所述第二百分比、所述第三百分比依次减小。
在一种可选的实施方式中,所述方法还包括:
在当前ION内存中缓存的数据被使用完成后,如果所述当前ION内存被赋予了内存释放标志,则将所述当前ION内存释放给所述操作系统。
在一种可选的实施方式中,所述方法还包括:
如果ION池占用的ION内存的总量小于所述内存释放阈值,且所述当前ION内存未被赋予所述内存释放标志,则将所述当前ION内存存入到所述ION池中。
在一种可选的实施方式中,所述当前ION内存是通过如下方式从ION堆申请分配给应用进程的:
当应用进程申请从ION堆分配指定大小的内存时,确定所述ION堆中是否有所述大小的可分配ION内存;
如果所述ION堆中没有所述大小的可分配ION内存,确定所述ION池中是否有所述大小的可分配ION内存;
如果所述ION池中有所述大小的可分配ION内存,则从所述ION池中申请所述大小的ION内存分配到所述ION堆中,再从所述ION堆中分配所述大小的ION内存给应用进程使用。
在一种可选的实施方式中,所述方法还包括:
如果所述ION池中没有所述大小的可分配ION内存,则从所述操作系统中申请所述大小的ION内存分配到所述ION堆中,再从所述ION堆中分配所述大小的ION内存给应用进程使用。
在一种可选的实施方式中,所述方法还包括:
在指定多个ION内存创建ION堆的过程中,如果ION堆创建失败,则为指定的所述多个ION内存分别赋予内存释放标志。
根据本公开实施例的第二方面,提供一种内存管理装置,包括:
阈值判断模块,用于在当前ION内存中缓存的数据被使用完成后,判断ION池占用的ION内存的总量是否大于或等于内存释放阈值;
内存释放模块,用于在所述ION池占用的ION内存的总量大于或等于所述内存释放阈值的情况下,将所述当前ION内存释放给操作系统,其中,所述ION池占用的ION内存是从所述操作系统申请分配的用于缓存数据的存储空间。
根据本公开实施例的第三方面,提供一种电子设备,其特征在于,包括:
存储装置,其上存储有计算机程序;
处理装置,用于执行所述存储装置中的所述计算机程序,以实现第一方面所述方法的步骤。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,该程序指令被处理器执行时实现第一方面所述方法的步骤。
本公开的实施例提供的技术方案可以包括以下有益效果:
当应用进程(如相机,视频播放器,多媒体等应用进程)使用完当前ION内存后,将会判断ION池占用的ION内存的总量是否大于或等于内存释放阈值,如果ION池占用的ION内存的总量大于或等于内存释放阈值,表示ION池中的内存已经过量,那么无需将当前ION内存放入ION池中,而是直接释放给操作系统,以防止ION池占用内存过多导致的一系列问题,缓和系统内存短缺的压力,同时主动向操作系统释放内存,也避免了等待内存回收带来的延迟。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是根据一示例性实施例示出的一种内存管理方法方法的流程图;
图2是根据一示例性实施例示出的ION内存分配过程的流程图;
图3是根据图2中的流程图示出的ION内存分配过程示意图;
图4是根据一示例性实施例示出的计算内存释放阈值的流程图;
图5是根据一示例性实施例示出的一种内存管理装置的示意图;
图6是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
如背景技术所述,ION池占用内存的多少无法由操作系统去定量决定,只能够在ION内存中缓存的数据使用完成后,定性裁决使用完的这部分内存是入池还是直接释放给操作系统,通常情况下只有在系统内存严重不足,操作系统整体回收内存时,ION池占用的内存资源才能够得以释放。一方面,系统内存回收滞后,另一方面,ION池占用内存过多会产生内存不足和碎片化等现象,如果此时有消耗内存比较严重的操作就会导致内存分配失败。例如,当ION池占用过多内存导致操作系统内存紧张,操作系统会采取杀进程等操作,将使用内存较多的进程(如游戏进程、跑分软件进程等)关闭,从而造成用户玩游戏时黑屏,或者跑分软件出现异常,无法继续往下执行跑分测试,甚至导致跑分软件直接为0。
由此,本公开实施例提供一种内存管理方法,能够主动将使用完的ION内存释放给操作系统。图1是根据一示例性实施例示出的一种内存管理方法的流程图,如图1所示,该内存管理方法用于ION内存的管理,包括以下步骤:
步骤S110,在当前ION内存中缓存的数据被使用完成后,判断ION池占用的ION内存的总量是否大于或等于内存释放阈值。
步骤S120,如果ION池占用的ION内存的总量大于或等于内存释放阈值,则将当前ION内存释放给操作系统。其中,ION池占用的ION内存是从操作系统申请分配的用于缓存数据的存储空间。
在上述过程中,当应用进程(如相机,视频播放器,多媒体等应用进程)使用完当前ION内存后,将会判断ION池占用的ION内存的总量是否大于或等于内存释放阈值,如果ION池占用的ION内存的总量大于或等于内存释放阈值,表示ION池中的内存已经过量,那么无需将当前ION内存放入ION池中,而是直接释放给操作系统,以防止ION池占用内存过多导致的一系列问题,缓和系统内存短缺的压力,同时主动向操作系统释放内存,也避免了等待内存回收带来的延迟。
在具体的实施例中,当前ION内存是通过图2所示的流程图申请分配给应用进程的。如图2所示,ION内存的分配过程包括:
步骤S210,当应用进程申请从ION堆分配指定大小的内存时,确定ION堆中是否有该大小的可分配ION内存。若ION堆中有该大小的可分配ION内存,则执行步骤S220;若ION堆中没有该大小的可分配ION内存,则执行步骤S230。
步骤S220,从ION堆中分配该大小的ION内存给应用进程使用。
步骤S230,确定ION池中是否有该大小的可分配ION内存。如果ION池中有该大小的可分配ION内存,则执行步骤S240;如果ION池中没有该大小的可分配ION内存,则执行步骤S250。
步骤S240,从ION池中申请该大小的ION内存分配到ION堆中,再从ION堆中分配该大小的ION内存给应用进程使用。
可以理解的,在ION堆中没有该大小的可分配ION内存的情况下,如果ION池中有该大小的可分配内存,则先从ION池中申请该大小的ION内存分配到ION堆中,再从ION堆中分配该大小的ION内存给应用进程使用。
步骤S250,从操作系统中申请该大小的ION内存分配到ION堆中,再从ION堆中分配该大小的ION内存给应用进程使用。
可以理解的,在ION堆中没有该大小的可分配ION内存且ION池中也没有该大小的可分配ION内存的情况下,只能从操作系统中申请该大小的ION内存分配到ION堆中,再从ION堆中分配该大小的ION内存给应用进程使用。
图3示出了上述ION内存分配过程的示意图,如图3所示,应用进程是从ION堆申请分配内存的,其中,应用进程是指注册ION的应用的进程。首先应用进程申请从ION堆分配N个内存页以缓存进程数据,然后确定ION堆是否有可供分配的N个内存页,若ION堆有可供分配的N个内存页,则直接从ION堆分配N个内存页给应用进程使用,若ION堆没有可供分配的N个内存页,于是确定ION池是否有可供分配的N个内存页。由于ION池是操作系统针对这些有着特殊内存需求的应用预留的内存池,以方便快速为其分配内存,所以在ION堆无法满足内存分配需要时,优先从ION池申请分配内存。若ION池有可供分配的N个内存页,则从ION池申请N个内存页分配到ION堆中,再从ION堆分配N个内存页给应用进程使用,若ION池也没有可供分配的N个内存页,则从操作系统申请N个内存页分配到ION堆中,再从ION堆分配N个内存页给应用进程使用。
可以理解的,当处于初始状态时或ION池的内存资源被系统回收后,此时ION池占用的ION内存为零。当有应用进程向ION堆申请分配指定大小的ION内存,且ION堆没有该大小的ION内存时,由于此时ION池占用的ION内存为零,于是只能从操作系统申请分配该大小的ION内存到ION堆,再从ION堆分配给应用进程。当应用进程分配的ION内存使用完毕后,此时ION池占用的ION内存的总量显然未大于或未等于内存释放阈值,所以ION内存将会被存入ION池中。随着从操作系统申请的ION内存越来越多,且这些ION内存在被使用完成后没有归还给系统,而是被存入ION池中,便于下次申请分配内存时直接从ION池申请并快速分配,因此ION池的ION内存逐渐增多,直至ION池占用的ION内存的总量大于或等于内存释放阈值。当ION池占用的ION内存的总量大于或等于内存释放阈值后,之后使用完的ION内存将不再存入ION池,而是直接归还给操作系统,等待操作系统下次触发内存回收时,ION池的内存资源将再次被清空。
在一种可选的实施方式中,该内存管理方法还包括:在当前ION内存中缓存的数据被使用完成后,如果当前ION内存被赋予了内存释放标志,则将当前ION内存释放给操作系统。
示例性的,内存释放标志可具有最高优先级,在当前ION内存中缓存的数据被使用完成后,如果当前ION内存具有内存释放标志,此时可以不必执行判断ION池占用的ION内存的总量是否大于或等于内存释放阈值的步骤,无论ION池占用的ION内存的总量是否大于、等于或小于内存释放阈值,一旦当前ION内存具有该内存释放标志,则可以直接将当前ION内存释放给操作系统,而不必存入ION池中。
示例性的,在当前ION内存中缓存的数据被使用完成后,如果当前ION内存不具有内存释放标志,此时执行判断ION池占用的ION内存的总量是否大于或等于内存释放阈值的步骤,如果ION池占用的ION内存的总量大于或等于内存释放阈值,则将当前ION内存释放给操作系统,如果ION池占用的ION内存的总量小于内存释放阈值,则将当前ION内存存入ION池中。
在可选的实施方式中,在指定多个ION内存创建ION堆的过程中,如果ION堆创建失败,则为该指定的多个ION内存分别赋予内存释放标志。
可以理解的是,上述实施方式仅是为ION内存赋予内存释放标志的其中一种场景,在其他实施方式中,还可以通过其他方式产生内存释放标志,本公开实施例不一一介绍。
需要说明的是,本公开实施例中的内存释放阈值可以是预先设定的固定值,也可以是根据操作系统的内存压力动态调整的变化值。示例性的,可在每次当前ION内存中缓存的数据被使用完成后计算该内存释放阈值,或者按照一定的频率计算该内存释放阈值。
图4示出了本公开实施例中计算内存释放阈值的流程图,如图4所示,内存释放阈值通过如下步骤计算得到:
步骤S310,计算操作系统的当前可操作内存总数。
其中,操作系统的当前可操作内存总数可通过如下方式计算得到:获取操作系统的当前可用内存总数和当前不可回收内存数量,计算当前可用内存总数和当前不可回收内存数量的差值,根据该差值获得操作系统的当前可操作内存总数。其中,操作系统的当前可用内存包括:当前不可回收内存、当前可回收内存和当前可分配内存,当前可操作内存包括当前可回收内存和当前可分配内存,因此,根据当前可用内存总数与当前不可回收内存数量的差值,即可得到操作系统当前可操作内存总数。
其中,当前可用内存总数和当前不可回收内存数量是以内存页的页数为单位进行统计,如果当前可用内存和当前不可回收内存是为KB为单位,则需要将其除以内存页的单位大小(在Linux中,通常每页大小为4KB),转换为以内存页的页数为单位的当前可用内存总数和当前不可回收内存数量。
步骤S320,获取操作系统的当前压力参数并根据该当前压力参数确定阈值调节系数;其中,阈值调节系数与当前压力参数呈负相关。
其中,当前压力参数是感应操作系统内存压力的指标,具体可以是根据PSI(Pressure Stall Information,压力失速信息)机制计算出的系统内存压力值,在具体的实施例中,当前压力参数被表示为0~100范围内的数值。
需要说明的是,当前压力参数的数值越高,表示操作系统当前的内存压力越大,此时更需要节省内存,不允许ION池占用过多ION内存,所以内存释放阈值应当设置得更小;而当前压力参数的数值越低,表示操作系统当前的内存压力越小,此时不必过于节省内存,允许ION池占用较多ION内存,以快速为相机、视频播放器等需求大内存的应用进程分配内存,所以内存释放阈值允许设置得更大。
随着当前压力参数的增大,内存释放阈值应当减小,由此,设置了阈值调节系数,通过阈值调节系数来调节内存释放阈值的大小,且阈值调节系数与当前压力参数呈负相关。
在可选的实施方式中,根据当前压力参数确定阈值调节系数的步骤包括以下几种情况:
1)当前压力参数小于第一阈值,则确定阈值调节系数为第一百分比;
2)当前压力参数大于或等于第一阈值,且小于或等于第二阈值,则确定阈值调节系数为第二百分比;
3)当前压力参数大于第二阈值,则确定阈值调节系数为第三百分比;
其中,第一阈值小于第二阈值,且第一百分比、第二百分比、第三百分比依次减小。
可选的,第一阈值设置为50,第二阈值设置为80,第一百分比、第二百分比和第三百分比依次设置为150%、100%、50%。那么有:
当前压力参数<50,则阈值调节系数为150%;
当前压力参数∈[50,80],则阈值调节系数为100%;
当前压力参数>80,则阈值调节系数为50%。
步骤S330,根据当前可操作内存总数和阈值调节系数,计算内存释放阈值。
其中,将该当前可操作内存总数分别乘上阈值调节系数和基础系数,即可得到该内存释放阈值。考虑到通常情况下ION所需的最大内存数量都在总内存的10%左右,故基础系数可以设置在10%左右,以10%的可操作内存总数作为调节基数,利用阈值调节系数在该调节基数上进行调整,从而得到内存释放阈值。这样,得到的内存释放阈值是根据操作系统当前的内存压力、当前可操作内存总数动态综合确定的,是随系统内存压力和可操作内存总数动态变化的,能够反映此时ION池占用的ION内存总量的合理范围,当ION池占用的ION内存总量超过该合理范围,则使用完的ION内存将释放给操作系统。可以看出,当系统内存压力增大,则阈值调节系数会相应减小,使得内存释放阈值随之减小,从而使用完的ION内存能够及时归还给操作系统,进而缓解系统的内存压力。
需要说明的是,在sys文件系统中设置目标节点,该节点作为内存释放阈值的访问路径,当执行判断ION池占用的ION内存的总量是否大于或等于内存释放阈值的步骤前,通过该节点读取所存储的内存释放阈值,当根据系统的压力参数计算得到新的内存释放阈值后,通过该节点对内存释放阈值进行更新。
需要说明的是,本公开实施例通过设置内存释放阈值来限制ION池占用内存的数量,可以明显改善系统内存状况,减少了手机、电视和车载设备等搭载有安卓操作系统和ION内存管理器的电子设备在内存紧缺和碎片化严重的情况下,一些耗内存操作的失败。例如,由于相机录屏或播放高清视频等操作会导致ION池中占用的内存数量巨大,而且要等到系统内存回收的时候才能释放,所以此时的内存紧缺会产生黑屏甚至进程被杀等现象,本公开实施例提供的技术方案则能很好地解决该技术问题。
图5是根据一示例性实施例示出的一种内存管理装置的示意图,如图5所示,内存管理装置400包括:阈值判断模块410和内存释放模块420。
其中,阈值判断模块410用于在当前ION内存中缓存的数据被使用完成后,判断ION池占用的ION内存的总量是否大于或等于内存释放阈值。
其中,内存释放模块420用于在所述ION池占用的ION内存的总量大于或等于所述内存释放阈值的情况下,将所述当前ION内存释放给操作系统,其中,所述ION池占用的ION内存是从所述操作系统申请分配的用于缓存数据的存储空间。
在可选的实施方式中,装置400还包括:
可操作内存计算模块,用于计算所述操作系统的当前可操作内存总数;
调节系数计算模块,用于获取所述操作系统的当前压力参数并根据所述当前压力参数确定阈值调节系数;其中,所述阈值调节系数与所述当前压力参数呈负相关;
内存释放阈值计算模块,用于根据所述当前可操作内存总数和所述阈值调节系数,计算所述内存释放阈值。
在可选的实施方式中,可操作内存计算模块用于:
获取所述操作系统的当前可用内存总数和当前不可回收内存数量;
根据所述当前可用内存总数和所述当前不可回收内存数量的差值,获得所述操作系统的当前可操作内存总数。
在可选的实施方式中,调节系数计算模块用于:
当所述当前压力参数小于第一阈值,确定阈值调节系数为第一百分比;
当所述当前压力参数大于或等于第一阈值,且小于或等于第二阈值,确定阈值调节系数为第二百分比;
当所述当前压力参数大于第二阈值,确定阈值调节系数为第三百分比;
其中,所述第一阈值小于所述第二阈值,且所述第一百分比、所述第二百分比、所述第三百分比依次减小。
在可选的实施方式中,内存释放模块420用于:
在当前ION内存中缓存的数据被使用完成后,在所述当前ION内存被赋予了内存释放标志的情况下,将所述当前ION内存释放给所述操作系统。
在可选的实施方式中,装置400还包括:内存入池模块,用于在ION池占用的ION内存的总量小于所述内存释放阈值,且所述当前ION内存未被赋予所述内存释放标志的情况下,将所述当前ION内存存入到所述ION池中。
在可选的实施方式中,装置400还包括ION内存分配模块,用于通过如下方式从ION堆申请分配ION内存给应用进程:
当应用进程申请从ION堆分配指定大小的内存时,确定所述ION堆中是否有所述大小的可分配ION内存;
在所述ION堆中没有所述大小的可分配ION内存的情况下,确定所述ION池中是否有所述大小的可分配ION内存;
在所述ION池中有所述大小的可分配ION内存的情况下,从所述ION池中申请所述大小的ION内存分配到所述ION堆中,再从所述ION堆中分配所述大小的ION内存给应用进程使用。
在可选的实施方式中,ION内存分配模块用于:
在所述ION池中没有所述大小的可分配ION内存的情况下,从所述操作系统中申请所述大小的ION内存分配到所述ION堆中,再从所述ION堆中分配所述大小的ION内存给应用进程使用。
在可选的实施方式中,装置400还包括标志添加模块,用于在指定多个ION内存创建ION堆的过程中,如果ION堆创建失败,则为指定的所述多个ION内存分别赋予内存释放标志。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开还提供一种计算机可读存储介质,其上存储有计算机程序指令,该程序指令被处理器执行时实现本公开提供的内存管理方法的步骤。
本公开还提供一种电子设备,包括:存储装置和处理装置,存储装置上存储有计算机程序,处理装置用于执行所述存储装置中的所述计算机程序,以实现本公开提供的内存管理方法的步骤。
图6是根据一示例性实施例示出的一种电子设备500的框图。例如,电子设备500可以是移动电话,电视,车载设备,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。在该电子设备500上搭载有安卓操作系统和ION内存管理器。
参照图6,电子设备500可以包括以下一个或多个组件:处理组件502,存储器504,电力组件506,多媒体组件508,音频组件510,输入/输出(I/O)接口512,传感器组件514,以及通信组件516。
处理组件502通常控制电子设备500的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件502可以包括一个或多个处理器520来执行指令,以完成上述的内存管理方法的全部或部分步骤。此外,处理组件502可以包括一个或多个模块,便于处理组件502和其他组件之间的交互。例如,处理组件502可以包括多媒体模块,以方便多媒体组件508和处理组件502之间的交互。
存储器504用于存储各种类型的数据以支持在电子设备500的操作。这些数据的示例包括用于在电子设备500上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器504可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电力组件506为电子设备500的各种组件提供电力。电力组件506可以包括电源管理系统,一个或多个电源,及其他与为电子设备500生成、管理和分配电力相关联的组件。
多媒体组件508包括在所述电子设备500和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件508包括一个前置摄像头和/或后置摄像头。当电子设备500处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件510用于输出和/或输入音频信号。例如,音频组件510包括一个麦克风(MIC),当电子设备500处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器504或经由通信组件516发送。在一些实施例中,音频组件510还包括一个扬声器,用于输出音频信号。
I/O接口512为处理组件502和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件514包括一个或多个传感器,用于为电子设备500提供各个方面的状态评估。例如,传感器组件514可以检测到电子设备500的打开/关闭状态,组件的相对定位,例如所述组件为电子设备500的显示器和小键盘,传感器组件514还可以检测电子设备500或电子设备500一个组件的位置改变,用户与电子设备500接触的存在或不存在,电子设备500方位或加速/减速和电子设备500的温度变化。传感器组件514可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件514还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件514还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件516用于便于电子设备500和其他设备之间有线或无线方式的通信。电子设备500可以接入基于通信标准的无线网络,如WiFi,4G或5G,或它们的组合。在一个示例性实施例中,通信组件516经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件516还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,电子设备500可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述内存管理方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器504,上述指令可由电子设备500的处理器520执行以完成上述内存管理方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的内存管理方法的代码部分。
本领域技术人员在考虑说明书及实践本公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

Claims (12)

1.一种内存管理方法,其特征在于,包括:
在当前ION内存中缓存的数据被使用完成后,判断ION池占用的ION内存的总量是否大于或等于内存释放阈值;
如果所述ION池占用的ION内存的总量大于或等于所述内存释放阈值,则将所述当前ION内存释放给操作系统,其中,所述ION池占用的ION内存是从所述操作系统申请分配的用于缓存数据的存储空间。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
计算所述操作系统的当前可操作内存总数;
获取所述操作系统的当前压力参数并根据所述当前压力参数确定阈值调节系数;其中,所述阈值调节系数与所述当前压力参数呈负相关;
根据所述当前可操作内存总数和所述阈值调节系数,计算所述内存释放阈值。
3.根据权利要求2所述的方法,其特征在于,所述计算所述操作系统的当前可操作内存总数,包括:
获取所述操作系统的当前可用内存总数和当前不可回收内存数量;
根据所述当前可用内存总数和所述当前不可回收内存数量的差值,获得所述操作系统的当前可操作内存总数。
4.根据权利要求2所述的方法,其特征在于,所述根据所述当前压力参数确定阈值调节系数,包括:
当所述当前压力参数小于第一阈值,则确定阈值调节系数为第一百分比;
当所述当前压力参数大于或等于第一阈值,且小于或等于第二阈值,则确定阈值调节系数为第二百分比;
当所述当前压力参数大于第二阈值,则确定阈值调节系数为第三百分比;
其中,所述第一阈值小于所述第二阈值,且所述第一百分比、所述第二百分比、所述第三百分比依次减小。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在当前ION内存中缓存的数据被使用完成后,如果所述当前ION内存被赋予了内存释放标志,则将所述当前ION内存释放给所述操作系统。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
如果ION池占用的ION内存的总量小于所述内存释放阈值,且所述当前ION内存未被赋予所述内存释放标志,则将所述当前ION内存存入到所述ION池中。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述当前ION内存是通过如下方式从ION堆申请分配给应用进程的:
当应用进程申请从ION堆分配指定大小的内存时,确定所述ION堆中是否有所述大小的可分配ION内存;
如果所述ION堆中没有所述大小的可分配ION内存,确定所述ION池中是否有所述大小的可分配ION内存;
如果所述ION池中有所述大小的可分配ION内存,则从所述ION池中申请所述大小的ION内存分配到所述ION堆中,再从所述ION堆中分配所述大小的ION内存给应用进程使用。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
如果所述ION池中没有所述大小的可分配ION内存,则从所述操作系统中申请所述大小的ION内存分配到所述ION堆中,再从所述ION堆中分配所述大小的ION内存给应用进程使用。
9.根据权利要求7所述的方法,其特征在于,所述方法还包括:
在指定多个ION内存创建ION堆的过程中,如果ION堆创建失败,则为指定的所述多个ION内存分别赋予内存释放标志。
10.一种内存管理装置,其特征在于,包括:
阈值判断模块,用于在当前ION内存中缓存的数据被使用完成后,判断ION池占用的ION内存的总量是否大于或等于内存释放阈值;
内存释放模块,用于在所述ION池占用的ION内存的总量大于或等于所述内存释放阈值的情况下,将所述当前ION内存释放给操作系统,其中,所述ION池占用的ION内存是从所述操作系统申请分配的用于缓存数据的存储空间。
11.一种电子设备,其特征在于,包括:
存储装置,其上存储有计算机程序;
处理装置,用于执行所述存储装置中的所述计算机程序,以实现权利要求1-9中任一项所述方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,该程序指令被处理器执行时实现权利要求1-9中任一项所述方法的步骤。
CN202111400870.4A 2021-11-19 2021-11-19 内存管理方法、装置、电子设备及存储介质 Pending CN114116215A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111400870.4A CN114116215A (zh) 2021-11-19 2021-11-19 内存管理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111400870.4A CN114116215A (zh) 2021-11-19 2021-11-19 内存管理方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN114116215A true CN114116215A (zh) 2022-03-01

Family

ID=80440773

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111400870.4A Pending CN114116215A (zh) 2021-11-19 2021-11-19 内存管理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN114116215A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023236930A1 (zh) * 2022-06-10 2023-12-14 维沃移动通信有限公司 基于ion分配器的内存分配方法、装置、电子设备和可读存储介质
WO2024076068A1 (ko) * 2022-10-06 2024-04-11 삼성전자주식회사 복수의 프로세스들의 릴리즈를 제어하기 위한 전자 장치 및 그 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023236930A1 (zh) * 2022-06-10 2023-12-14 维沃移动通信有限公司 基于ion分配器的内存分配方法、装置、电子设备和可读存储介质
WO2024076068A1 (ko) * 2022-10-06 2024-04-11 삼성전자주식회사 복수의 프로세스들의 릴리즈를 제어하기 위한 전자 장치 및 그 방법

Similar Documents

Publication Publication Date Title
CN107528976B (zh) 资源配置方法及相关产品
WO2019109868A1 (zh) 资源配置方法及相关产品
CN114116215A (zh) 内存管理方法、装置、电子设备及存储介质
CN107040591B (zh) 一种对客户端进行控制的方法及装置
CN109254849B (zh) 应用程序的运行方法及装置
CN109156026B (zh) 上行调度请求的发送方法、装置、设备及存储介质
US20200084799A1 (en) Method and apparatus for controlling network access
CN110166564B (zh) 信息通信方法、终端及存储介质
CN108958911B (zh) 进程的控制方法及装置
CN111580980B (zh) 内存管理方法和装置
CN111258952A (zh) 一种数据存储控制方法、装置及存储介质
CN112312023B (zh) 一种相机的缓存队列分配方法、装置、电子设备和存储介质
CN112286683A (zh) 一种分片下载方法、装置及介质
CN112256424A (zh) 虚拟资源的处理方法、装置、系统、电子设备及存储介质
CN107220008B (zh) 存储空间预留方法及装置
CN116360671A (zh) 存储方法、装置、终端及存储介质
CN115016944A (zh) 一种进程访问方法、装置及电子设备
CN110888822B (zh) 内存处理方法、装置及存储介质
CN110704197B (zh) 处理内存访问开销的方法、装置及介质
CN114077461A (zh) 应用程序的运行方法、装置、设备及存储介质
CN109194639B (zh) 消息接收处理方法、装置、终端及可读存储介质
CN112817844A (zh) 后台进程驻留测试方法、装置、设备及存储介质
CN110968523A (zh) 内存碎片整理的方法和装置
CN108881332B (zh) 一种预下载方法和装置
CN111625329A (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