CN118245221A - 内存回收方法、装置、电子设备和可读存储介质 - Google Patents
内存回收方法、装置、电子设备和可读存储介质 Download PDFInfo
- Publication number
- CN118245221A CN118245221A CN202410480625.6A CN202410480625A CN118245221A CN 118245221 A CN118245221 A CN 118245221A CN 202410480625 A CN202410480625 A CN 202410480625A CN 118245221 A CN118245221 A CN 118245221A
- Authority
- CN
- China
- Prior art keywords
- memory
- module
- reclamation
- type
- thread
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 238000004064 recycling Methods 0.000 title claims abstract description 40
- 230000006870 function Effects 0.000 claims description 70
- 238000011084 recovery Methods 0.000 claims description 68
- 230000001960 triggered effect Effects 0.000 description 14
- 238000012360 testing method Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 5
- 239000002699 waste material Substances 0.000 description 5
- 230000001360 synchronised effect Effects 0.000 description 4
- 230000000903 blocking effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000005070 sampling Methods 0.000 description 3
- 230000003190 augmentative effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 1
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请实施例提供了一种内存回收方法、装置、电子设备和可读存储介质,属于电子设备技术领域,内存回收方法包括:接收内存回收请求;在触发内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存;其中,第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存;第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率。
Description
技术领域
本申请属于电子设备技术领域,具体涉及一种内存回收方法、内存回收装置、电子设备和可读存储介质。
背景技术
目前,Slab是一种linux内核中管理内核内存申请的一个内存分配器,Slab内存的回收是通过模块在列表(shrinker_list)上注册的回收函数(shrink_slab函数)进行的,但是在内存回收的过程中,存在***卡顿的问题。
发明内容
本申请实施例的目的是提供一种内存回收方法、内存回收装置、电子设备和可读存储介质,以解决内存回收的过程中,***卡顿的技术问题。
第一方面,本申请实施例提供了一种内存回收方法,包括:
接收内存回收请求;
在触发内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存;
其中,第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存;第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率。
第二方面,本申请实施例提供了一种内存回收装置,包括:
接收模块,用于接收内存回收请求;
第一执行模块,用于在触发内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存;
其中,第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存;第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率。
第三方面,本申请实施例提供了一种电子设备,包括处理器,存储器及存储在存储器上并可在处理器上运行的程序或指令,程序或指令被处理器执行时实现如第一方面提供的内存回收方法的步骤。
第四方面,本申请实施例提供了一种可读存储介质,该可读存储介质上存储程序或指令,该程序或指令被处理器执行时实现如第一方面提供的内存回收方法的步骤。
第五方面,本申请实施例提供了一种芯片,该芯片包括处理器和通信接口,该通信接口和该处理器耦合,该处理器用于运行程序或指令,实现如第一方面提供的内存回收方法的步骤。
第六方面,本申请实施例提供一种计算机程序产品,该程序产品被存储在存储介质中,该程序产品被至少一个处理器执行以实现如第一方面提供的内存回收方法的步骤。
在本申请实施例中,内存回收方法包括接收内存回收请求,在内存回收请求的触发线程为关键线程的情况下,跳过对第一内存的回收,以及执行对第二内存的回收,其中,第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存,并且,第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率,由此可以实现快速回收内存,减少回收内存时不必要的时间和性能的浪费,提升***的流畅性。
附图说明
图1示出了根据本申请实施例的内存回收方法的流程图之一;
图2示出了根据本申请实施例的内存回收方法的流程图之二;
图3A示出了根据本申请实施例的内存回收方法的原理图之一;
图3B示出了根据本申请实施例的内存回收方法的原理图之二;
图4示出了根据本申请实施例的内存回收装置的结构框图;
图5示出了根据本申请实施例的电子设备的结构框图;
图6示出了实现本申请实施例的一种电子设备的硬件结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的一种内存回收方法、装置、电子设备和可读存储介质。
图1示出了根据本申请实施例的内存回收方法的流程图之一,如图1所示,方法包括:
步骤102:接收内存回收请求。
具体地,接收内存回收请求。在线程运行时,若内存不足,则会触发内存回收请求,电子设备会响应于内存回收请求以回收的内存,并将回收的内存提供给线程使用。
步骤104:在触发内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存;其中,第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存;第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率。
具体地,在触发内存回收请求的线程为关键线程的情况下,跳过对第一内存的回收,执行对第二内存的回收。
第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存。
并且,第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率,进而通过只回收内存回收效率较高的第二内存,可以实现快速回收内存,减少回收内存时不必要的时间和性能的浪费,提升***的流畅性。
其中,模块指驱动模块或其他为线程提供服务的模块等。
内存会按照内存页为单位进行回收,并且,只有内存页的全部内存块都被模块释放,才可以回收该内存页,第二类型的模块的内存就在这样的内存页中。
其中,某些内存页中的部分内存块被模块释放,而另一部分内存块仍然被模块占用,导致该内存页仍然无法实现回收,第一类型的模块的内存就在这样的内存页中。
显然,如上两种情况就导致了第一类型的模块的内存和第二类型的模块的内存的回收效率的区别。
所以本申请按照内存回收效率将模块的类型,分为第一类型和第二类型,在回收内存时,跳过回收第一类型的模块的内存,回收内存回收效率较高的第二类型的模块的内存,从而可以实现快速回收内存,减少回收内存时不必要的时间和性能的浪费,提升***的流畅性。
如图3A所示,响应于内存回收请求,在内存回收请求的触发线程为关键线程的情况下,进行内存回收时,只对第二类型的模块的内存进行回收,跳过第一类型的模块的内存。
具体地,第一类型的模块的内存和第二类型的模块的内存可以均具有标识,也可以是只有第一类型的模块的内存具有标识,或者只有第二类型的模块的内存具有标识。
作为一种可能的实施方式,关键线程包括以下至少一种:运行在前台的程序的线程;运行在前台的任务的线程。
具体地,关键线程为运行在前台的程序的线程或运行在前台的任务的线程,或者关键线程为运行在前台的程序的线程和运行在前台的任务的线程。程序不同于任务。
运行在前台的程序的流畅性是用户最容易感知的,因此,可以将运行在前台的程序的线程作为关键线程,在其触发内存回收请求时,可以通过跳过回收第一类型的模块的内存,回收第二类型的模块的内存,达到快速回收内存的效果,提升***的流畅性。
运行在前台的任务的流畅性也是用户最容易感知的,因此,可以将运行在前台的任务的线程作为关键线程,在其触发内存回收请求时,可以通过跳过回收第一类型的模块的内存,回收第二类型的模块的内存,达到快速回收内存的效果,提升***的流畅性。
其中,运行在前台的程序的线程或运行在前台的任务的线程,在线程优先级或者线程服务质量(Quality of Service,QoS)等级上和运行在后台的程序的线程或运行在后台的任务的线程存在差异。
并且,在只回收第二类型的模块的内存后,若仍不能满足关键线程,则可以通过回收最近随着使用(Least Recently Used,LRU)链表的内存,以及杀线程等其他手段释放出内存。
作为一种可能的实施方式,内存回收方法还包括:在触发内存回收请求的线程为非关键线程的情况下,回收第一内存,以及回收第二内存。
具体地,在内存回收请求并非关键线程触发的情况下,响应于内存回收请求,逐一执行每个模块的内存回收操作,也就是,第一内存和第二内存均进行回收,提升内存回收的稳定性,也就是,对于关键线程和非关键线程采用不同的内存回收方式,从而既满足了***的流程性,又满足了内存回收的稳定性。
如图3B所示,响应于内存回收请求进行的内存回收,在内存回收请求的触发线程为非关键线程的情况下,逐一的对第一类型的模块的内存和第二类型的模块的内存进行回收。
具体地,第一类型的模块的内存和第二类型的模块的内存可以均具有标识,也可以是只有第一类型的模块的内存具有标识,或者只有第二类型的模块的内存具有标识。
并且,针对不同线程采用不同的内存回收方式,避免导致第一类型的模块的内存没有被回收的情况,降低内存泄漏或缓存过多的情况产生的可能性。
其中,在响应于关键线程触发的内存回收请求后,暂未回收的内存,在一段较近的时间后,可能就会在响应于非关键线程触发的内存回收请求的操作而回收。
作为一种可能的实施方式,在接收内存回收请求之前,内存回收方法还包括:确定注册在列表中的模块所属的类型。
具体地,在接收内存回收请求之前,先确定注册在列表中的模块所属的类型,可以通过测试的方式确定模块的类型,也可以在内存回收的过程中,逐步更新模块的类型。
其中,通过测试的方式确定模块的类型,可以是:测试并标记每个模块的类型,以便于执行第二类型的模块的内存的回收,从而在实际应用中,可以快速的区分第一类型的模块和第二类型的模块,提升根据内存回收请求回收内存的速度。
测试并标记每个模块的类型,包括:创建测试环境;执行模块的内存回收操作;判断模块是否成功回收内存;在模块成功回收内存的情况下,确定模块的类型为第二类型;在模块并未成功回收内存的情况下,确定模块的类型为第一类型。
具体地,测试并标记每个模块的类型的步骤,包括:在***中创建检测环境,之后逐一执行每个模块的内存回收操作,之后判断每个模块是否成功回收内存,在模块成功回收内存的情况下,则确定该模块的类型为第二类型,在模块并未成功回收内存的情况下,确定该模块的类型为第二类型,也就是,根据实际的测试情况,确定模块的类型,从而提升对模块的类型标记的准确性。
其中,可以对第一类型的模块和第二类型的模块均进行标识,也可以是只对第一类型的模块进行标识,或者只有第一类型的模块进行标识。
在内存回收的过程中,逐步更新模块的类型,在多次执行每个模块的内存的回收操作的过程中,按目标规则,对模块的内存回收情况进行采样;根据采样结果更新模块的类型。
具体地,内存回收方法还包括:在非关键线程触发内存回收请求,并执行每个模块的内存的回收操作的过程中,对模块的内存回收情况进行采样,也就是,按照目标规则,对模块的内存回收情况进行采样,进而避免每次都记录模块的内存回收情况而导致对性能的影响,提升***的流畅性,并且,根据实际情况,可以更新模块的类型,从而提升回收第二类型的模块的内存的准确性。
也就是,在正式的环境下,根据一定次数的回收效率,动态地修改、增加或清除模块的标识。并且,由于在内存回收的流程中记录回收速度,以及更新标识,会带来额外的***负载,因此,可以仅在响应非关键线程触发的内存回收请求,增加统计,并按一定规则采样和记录,从而降低***负载。
作为一种可能的实施方式,在触发内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存,包括:在触发内存回收请求的线程为关键线程的情况下,跳过执行第一回收函数,以及执行第二回收函数;其中,第一回收函数为第一类型的模块的回收函数,第二回收函数为第二类型的模块的回收函数。
具体地,第一类型的模块的内存回收函数为第一回收函数,第二类型的模块的内存回收函数为第二回收函数,在触发内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存,包括:在内存回收请求由关键线程触发的情况下,跳过执行第一回收函数,执行第二回收函数,从而可以实现快速回收内存,提升***的流畅性。
其中,模块在列表(shrinker_list)上注册回收函数(shrink_slab函数),回收函数由模块自行实现,不同的模块所注册的回收函数可相同也可以不同,并且,不同的模块由于业务场景的不同,即使使用相同的回收函数,也会导致内存回收效率的不同。
shrinker_list是Linux内核中用于管理页面回收机制的一个重要数据结构。shrinker_list主要用于注册和管理shrink_slab函数,以便在***需要回收内存时进行相应的处理。
shrinker_list的由来可以追溯到Linux内核的内存管理子***。为了更好地管理***的内存,Linux内核引入了shrinker机制,允许内核中的不同部分注册自己的shrink_slab函数,用于回收不再需要的内存页。shrinker_list就是用来存储这些注册的shrink_slab函数的数据结构。
当一个模块或子***需要进行内存回收时,它可以注册一个shrink_slab函数,并将其描述符***到shrinker_list中。这样,当***需要回收内存时,会遍历shrinker_list中的所有注册的shrink_slab函数,并依次调用shrink_slab函数来回收内存页。这种机制使得不同部分的内存回收逻辑能够统一管理,提高了内核内存管理的灵活性和可扩展性。
如上,通过回收函数实现对模块的内存的回收。
图2示出了根据本申请实施例的内存回收方法的流程图之二,如图2所示,方法包括:
步骤202:模块在列表中注册回收函数后,根据测试数据标记模块的类型。
具体地,测试环境下,在测试场景统计每个模块注册在列表上的回收函数的内存收回效率。
得到每个模块注册的回收函数的内存收回效率,用以区别第一类型的模块和第二类型的模块。
在正式环境下,在模块将自己的回收函数注册到列表上时,根据离线的测试结果,确定模块的类型,具体地,可以在第一类型的模块所注册的回收函数上,标记“低效”标识。
步骤204:Slab内存回收(直接内存回收或异步内存回收)。
具体地,触发Slab内存的回收函数主要有两种,一个是线程申请内存失败进入慢速路径(slowpath)申请内存后,会进入直接内存回收,此时slab内存回收的效率将直接影响进入慢速路径这个线程的申请内存的耗时,若该线程是关键线程,申请内存耗时过长可能会造成***的卡顿等问题。另一种是守护线程(kswapd)之类的非关键线程,例如:后台异步线程触发的异步内存回收,这种异步的回收一般不会直接影响***性能。
步骤206:判断是否为关键线程触发的内存回收请求。
具体地,判断触发Slab内存回收的线程是否为关键线程触发的。在判断结果为是的情况下,执行步骤210;在判断结果为否的情况下,执行步骤208。
步骤208:完整遍历列表,逐一执行每个模块所注册的回收函数,进行内存回收。
具体地,完整遍历列表,逐一执行列表中每个模块所注册的回收函数,从而实现内存回收。
步骤210:只能遍历列表,跳过第一类型的模块所注册的第一回收函数,只执行第二类型的模块所注册的第二回收函数进行内存回收。
具体地,智能遍历列表,跳过在步骤202中标记为第一类型的模块所注册的第一回收函数。高效完成关键线程触发的内存回收请求,减少关键线程进入慢速路径的耗时。
步骤212:完成Slab内存回收。
具体地,完成Slab内存回收。
本申请提供的内存回收方法,将正在操作的运行在前台的程序或运行在前台的任务相关的线程,识别每个模块的内存,模块的类型决定着其注册到列表上的回收函数的类型,并且,主动识别关键线程申请内存进入慢速路径触发的直接内存回收场景,在该场景下跳过第一类型的模块的内存回收。减少关键线程进入慢速路径后在回收slab内存阶段的耗时,提升***性能。
同时保留非关键线程触发的slab内存回收对所有模块的回收方式。例如异步的内存回收线程,守护线程触发的内存回收请求,则会遍历所有模块进行内存回收,这样能够避免造成内存泄漏或者缓存过多的问题。
本申请对于关键线程触发的内存回收请求,采用高效的内存回收,跳过低效的第一类型的模块的内存的回收,减少了很多关键路径上低效的内存回收操作,对***整体性能以及功耗表现均有一定优化。
本申请实施例提供的内存回收方法,执行主体可以为内存回收装置。本申请实施例中以内存回收装置执行内存回收方法为例,说明本申请实施例提供的内存回收方法的装置。
如图4所示,在本申请的一些实施例中,本申请提供了一种内存回收装置400,包括:接收模块402,用于接收内存回收请求;第一执行模块404,用于在触发内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存;其中,第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存;第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率。
在本申请实施例中,内存回收装置包括接收内存回收请求,在内存回收请求的触发线程为关键线程的情况下,跳过对第一内存的回收,只执行对第二内存的回收,其中,第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存,也就是,第一内存和第二内存通过注册在列表中的模块的类型区分,而模块的类型决定着内存的使用情况,因此,通过模块的类型区分第一内存和第二内存,可以提升对第一内存和第二内存识别的可靠性。
并且,第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率,进而通过跳过回收第一类型的模块的内存,回收内存回收效率较高的第二内存,可以实现快速回收内存,减少回收内存时不必要的时间和性能的浪费,提升***的流畅性。
作为一种可能的实施方式,关键线程包括以下至少一种:运行在前台的程序的线程;运行在前台的任务的线程。
作为一种可能的实施方式,内存回收装置还包括:第二执行模块,用于在触发内存回收请求的线程为非关键线程的情况下,回收第一内存,以及回收第二内存。
作为一种可能的实施方式,内存回收装置还包括:确定模块,用于确定注册在列表中的模块所属的类型。
作为一种可能的实施方式,第一执行模块包括:执行子模块,用于在触发内存回收请求的线程为关键线程的情况下,跳过执行第一回收函数,以及执行第二回收函数;其中,第一回收函数为第一类型的模块的回收函数,第二回收函数为第二类型的模块的回收函数。
本申请实施例中的内存回收装置可以是电子设备,也可以是电子设备中的部件,例如集成通路或芯片。该电子设备可以是电子设备,也可以为除电子设备之外的其他设备。示例性的,电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、专网通信终端设备(如对讲机)、移动上网装置(Mobile Internet Device,MID)、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、机器人、可穿戴设备、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本或者个人数字助理(personal digital assistant,PDA)等,还可以为服务器、网络附属存储器(NetworkAttached Storage,NAS)、个人计算机(personal computer,PC)、电视机(television,TV)、柜员机或者自助机等,本申请实施例不作具体限定。
本申请实施例中的内存回收装置可以为具有操作***的装置。该操作***可以为安卓(Android)操作***,可以为iOS操作***,还可以为其他可能的操作***,本申请实施例不作具体限定。
本申请实施例提供的内存回收装置能够实现上述方法实施例实现的各个过程,达到相同的技术效果,为避免重复,这里不再赘述。
本申请实施例还提供一种电子设备,图5示出了根据本申请实施例的电子设备的结构框图,如图5所示,电子设备500包括处理器502和存储器504,存储在存储器504上并可在处理器502上运行的程序或指令,该程序或指令被处理器502执行时实现上述方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
需要说明的是,本申请实施例中的电子设备包括上述的移动电子设备和非移动电子设备。
图6为实现本申请实施例的一种电子设备的硬件结构示意图。
该电子设备600包括但不限于:射频单元601、网络模块602、音频输出单元603、输入单元604、传感器605、显示单元606、用户输入单元607、接口单元608、存储器609以及处理器610等部件。
本领域技术人员可以理解,电子设备600还可以包括给各个部件供电的电源(比如电池),电源可以通过电源管理***与处理器610逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。图6中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,在此不再赘述。
其中,处理器610用于接收内存回收请求;
处理器610用于在触发内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存;
其中,第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存;第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率。
在一些实施例中,可选地,关键线程包括以下至少一种:运行在前台的程序的线程;运行在前台的任务的线程。
在一些实施例中,可选地,还包括:处理器610用于在触发内存回收请求的线程为非关键线程的情况下,回收第一内存,以及回收第二内存。
在一些实施例中,可选地,在处理器610用于接收内存回收请求之前,内存回收方法还包括:
处理器610用于确定注册在列表中的模块所属的类型。
在一些实施例中,可选地,处理器610用于在触发内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存,包括:
处理器610用于在触发内存回收请求的线程为关键线程的情况下,跳过执行第一回收函数,以及执行第二回收函数;
其中,第一回收函数为第一类型的模块的回收函数,第二回收函数为第二类型的模块的回收函数。
在本申请实施例中,处理器接收内存回收请求,在内存回收请求的触发线程为关键线程的情况下,跳过对第一内存的回收,以及执行对第二内存的回收,其中,第一内存为注册在列表中的第一类型的模块的内存,第二内存为注册在列表中的第二类型的模块的内存,并且,第一类型的模块的内存回收效率小于第二类型的模块的内存回收效率,由此可以实现快速回收内存,减少回收内存时不必要的时间和性能的浪费,提升***的流畅性。
应理解的是,本申请实施例中,输入单元604可以包括图形处理器(GraphicsProcessing Unit,GPU)6041和麦克风6042,图形处理器6041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像文件进行处理。显示单元606可包括显示面板6061,可以采用液晶显示器、有机发光二极管等形式来配置显示面板6061。用户输入单元607包括触控面板6071以及其他输入设备6072中的至少一种。触控面板6071,也称为触摸屏。触控面板6071可包括触摸检测装置和触摸控制器两个部分。其他输入设备6072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。
存储器609可用于存储软件程序以及各种文件。存储器609可主要包括存储程序或指令的第一存储区和存储文件的第二存储区,其中,第一存储区可存储操作***、至少一个功能所需的应用程序或指令(比如声音播放功能、图像播放功能等)等。此外,存储器609可以包括易失性存储器或非易失性存储器,或者,存储器609可以包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-OnlyMemory,ROM)、可编程只读存储器(ProgrammableROM,PROM)、可擦除可编程只读存储器(ErasablePROM,EPROM)、电可擦除可编程只读存储器(ElectricallyEPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍文件速率同步动态随机存取存储器(Double Data Rate SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DRRAM)。本申请实施例中的存储器609包括但不限于这些和任意其它适合类型的存储器。
处理器610可包括一个或多个处理单元;可选地,处理器610集成应用处理器和调制解调处理器,其中,应用处理器主要处理涉及操作***、用户界面和应用程序等的操作,调制解调处理器主要处理无线通信信号,如基带处理器。可以理解的是,上述调制解调处理器也可以不集成到处理器610中。
本申请实施例还提供一种可读存储介质,可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述内存回收方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
其中,处理器为上述实施例中的电子设备中的处理器。可读存储介质,包括计算机可读存储介质,如计算机只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等。
本申请实施例另提供了一种芯片,芯片包括处理器和通信接口,通信接口和处理器耦合,处理器用于运行程序或指令,实现上述内存回收方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
应理解,本申请实施例提到的芯片还可以称为***级芯片、***芯片、芯片***或片上***芯片等。
本申请实施例提供一种计算机程序产品,该程序产品被存储在存储介质中,该程序产品被至少一个处理器执行以实现如上述内存回收方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本申请实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台电子设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
Claims (12)
1.一种内存回收方法,其特征在于,包括:
接收内存回收请求;
在触发所述内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存;
其中,所述第一内存为注册在列表中的第一类型的模块的内存,所述第二内存为注册在列表中的第二类型的模块的内存;所述第一类型的模块的内存回收效率小于所述第二类型的模块的内存回收效率。
2.根据权利要求1所述的内存回收方法,其特征在于,所述关键线程包括以下至少一种:
运行在前台的程序的线程;
运行在前台的任务的线程。
3.根据权利要求1所述的内存回收方法,其特征在于,所述内存回收方法还包括:
在触发所述内存回收请求的线程为非关键线程的情况下,回收所述第一内存,以及回收所述第二内存。
4.根据权利要求1至3中任一项所述的内存回收方法,其特征在于,在所述接收内存回收请求之前,所述内存回收方法还包括:
确定注册在所述列表中的模块所属的类型。
5.根据权利要求1至3中任一项所述的内存回收方法,其特征在于,所述在触发所述内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存,包括:
在触发所述内存回收请求的线程为关键线程的情况下,跳过执行第一回收函数,以及执行第二回收函数;
其中,所述第一回收函数为所述第一类型的模块的回收函数,所述第二回收函数为所述第二类型的模块的回收函数。
6.一种内存回收装置,其特征在于,包括:
接收模块,用于接收内存回收请求;
第一执行模块,用于在触发所述内存回收请求的线程为关键线程的情况下,跳过回收第一内存,以及回收第二内存;
其中,所述第一内存为注册在列表中的第一类型的模块的内存,所述第二内存为注册在列表中的第二类型的模块的内存;所述第一类型的模块的内存回收效率小于所述第二类型的模块的内存回收效率。
7.根据权利要求6所述的内存回收装置,其特征在于,所述关键线程包括以下至少一种:
运行在前台的程序的线程;
运行在前台的任务的线程。
8.根据权利要求6所述的内存回收装置,其特征在于,所述内存回收装置还包括:
第二执行模块,用于在触发所述内存回收请求的线程为非关键线程的情况下,回收所述第一内存,以及回收所述第二内存。
9.根据权利要求6至8中任一项所述的内存回收装置,其特征在于,所述内存回收装置还包括:
确定模块,用于确定注册在所述列表中的模块所属的类型。
10.根据权利要求6至8中任一项所述的内存回收装置,其特征在于,所述第一执行模块包括:
执行子模块,用于在触发所述内存回收请求的线程为关键线程的情况下,跳过执行第一回收函数,以及执行第二回收函数;
其中,所述第一回收函数为所述第一类型的模块的回收函数,所述第二回收函数为所述第二类型的模块的回收函数。
11.一种电子设备,其特征在于,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1至5中任一项所述的内存回收方法。
12.一种可读存储介质,其特征在于,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1至5中任一项所述的内存回收方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410480625.6A CN118245221A (zh) | 2024-04-22 | 2024-04-22 | 内存回收方法、装置、电子设备和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410480625.6A CN118245221A (zh) | 2024-04-22 | 2024-04-22 | 内存回收方法、装置、电子设备和可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118245221A true CN118245221A (zh) | 2024-06-25 |
Family
ID=91558445
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410480625.6A Pending CN118245221A (zh) | 2024-04-22 | 2024-04-22 | 内存回收方法、装置、电子设备和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118245221A (zh) |
-
2024
- 2024-04-22 CN CN202410480625.6A patent/CN118245221A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106484472B (zh) | 一种内存回收方法及终端 | |
KR20110098567A (ko) | 최소 부트 이미지의 생성 방법 및 장치 | |
US8392914B2 (en) | Method and apparatus for recognizing processes in GOS by VMM | |
CN110633190B (zh) | 一种应用程序内存监控方法、装置、设备及存储介质 | |
CN113392037B (zh) | 内存回收方法、装置、计算机设备和存储介质 | |
CN112925606A (zh) | 一种内存管理方法、装置及设备 | |
US20240152439A1 (en) | Detection Method and Electronic Device | |
CN113282435B (zh) | 应用异常的处理方法和电子设备 | |
CN118245221A (zh) | 内存回收方法、装置、电子设备和可读存储介质 | |
CN115934276A (zh) | 内存管理方法、装置及电子设备 | |
CN114385368A (zh) | 预写日志的刷写方法和装置 | |
CN112463374A (zh) | 一种内存管理方法、装置、设备及存储介质 | |
CN111831412A (zh) | 中断处理方法、装置、存储介质及电子设备 | |
CN113867701A (zh) | 一种容器对象实例化方法、装置、存储介质及电子设备 | |
CN112988610A (zh) | 内存回收处理方法、装置、计算机设备和存储介质 | |
CN112199237B (zh) | ***服务恢复方法、装置及电子设备 | |
CN114115025B (zh) | 基于自动驾驶***的故障信息的保存方法、装置和设备 | |
CN111752851B (zh) | 一种内存回收方法及装置 | |
CN116954911A (zh) | 内存处理方法、装置、电子设备和可读存储介质 | |
CN116756056A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
CN117632703A (zh) | 内存泄漏的定位方法、装置、电子设备及可读存储介质 | |
CN116680083A (zh) | 内存处理方法、装置、设备和存储介质 | |
CN117311967A (zh) | 内存处理方法、装置及电子设备 | |
CN116954924A (zh) | 内存管理方法、装置及电子设备 | |
CN115994032A (zh) | 缓存管理方法、装置、电子设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |