CN115587049A - 内存回收方法、装置、电子设备及存储介质 - Google Patents

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

Info

Publication number
CN115587049A
CN115587049A CN202211201341.6A CN202211201341A CN115587049A CN 115587049 A CN115587049 A CN 115587049A CN 202211201341 A CN202211201341 A CN 202211201341A CN 115587049 A CN115587049 A CN 115587049A
Authority
CN
China
Prior art keywords
memory
recovery
thread
driver
page
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
CN202211201341.6A
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.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp 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 Guangdong Oppo Mobile Telecommunications Corp Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority to CN202211201341.6A priority Critical patent/CN115587049A/zh
Publication of CN115587049A publication Critical patent/CN115587049A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced 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/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/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5021Priority

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请实施例公开了一种内存回收方法、装置、电子设备及存储介质。所述方法包括:在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收;通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。通过上述方法,在进行内存回收的过程中,通过内存回收线程和第一异步线程异步进行不同的内存页面的回收,使得不同的内存页面的回收可以并行进行,进而可以有效提高内存回收的速度,改善用户的性能体验。

Description

内存回收方法、装置、电子设备及存储介质
技术领域
本申请属于内存回收技术领域,具体涉及一种内存回收方法、装置、电子设备及存储介质。
背景技术
内存回收是系统的核心技术之一,对提高系统的用户体验和系统运行的稳定性具有关键作用。当内存紧张时,系统会出现卡顿、运行出错、崩溃等一系列问题。相关技术中,在进行内存回收时,内存回收的速度还有待提高。
发明内容
鉴于上述问题,本申请提出了一种内存回收方法、装置、电子设备以及存储介质,以实现改善上述问题。
第一方面,本申请实施例提供了一种内存回收方法,所述方法包括:在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收;通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。
第二方面,本申请实施例提供了一种内存回收装置,所述装置包括:第一回收单元,用于在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收;第二回收单元,用于通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。
第三方面,本申请实施例提供了一种电子设备,包括一个或多个处理器以及存储器;一个或多个程序,其中所述一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于执行上述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码运行时执行上述的方法。
本申请实施例提供了一种内存回收方法、装置、电子设备及存储介质。在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收,通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。通过上述方法,在进行内存回收的过程中,通过内存回收线程和第一异步线程异步进行不同的内存页面的回收,使得不同的内存页面的回收可以并行进行,进而可以有效提高内存回收的速度,改善用户的性能体验。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请一实施例提出的一种内存回收方法的应用场景示意图;
图2示出了本申请一实施例提出的一种内存回收方法的应用场景示意图;
图3示出了本申请一实施例提出的一种内存回收方法的流程图;
图4示出了本申请另一实施例提出的一种内存回收方法的流程图;
图5示出了本申请再一实施例提出的一种内存回收方法的流程图;
图6示出了本申请又一实施例提出的一种内存回收方法的流程图;
图7示出了本申请实施例提出的一种内存回收装置的结构框图;
图8示出了本申请实施例提出的一种内存回收装置的结构框图;
图9示出了本申请实时中的用于执行根据本申请实施例的内存回收方法的电子设备或服务器的结构框图;
图10示出了本申请实时中的用于保存或者携带实现根据本申请实施例的内存回收方法的程序代码的存储单元。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
随着移动终端技术的迅速发展,消费者对于移动终端的需求不再仅仅局限于实现简单的功能,而是可以流畅的使用多种功能。移动终端的流畅性已经是用户消费购买考虑的一个必要的因素。而内存性能在流畅性中的重要性更为突出,因为目前的终端设备,应用的内存需求日益增大,例如大型的手游类等一个应用就可能占据了2G bytes的内存空间,而如何更好的管理好内存的性能,最关键的就是内存回收的技术。
在Linux内核系统中,内存回收的流程主要包括有两个,即直接内存回收(directreclaim内存回收)和后台内存回收(kswapd内存回收)。内核进行内存回收的主要原因有两个:(1)内核需要为任何时刻突发到来的内存申请提供足够的内存,以便cache的使用和其他相关内存的使用不至于让系统的剩余内存长期处于很少的状态;(2)当真的有大于空闲内存的申请到来的时候,会触发强制内存回收。
针对上述第一种原因,Linux系统设计了kswapd后台内存回收线程,当内核分配物理页面时,由于系统内存短缺,没法在低水位情况下分配内存,因此会唤醒kswapd后台内存回收线程进行内存回收,以保证内存分配不延时。
针对上述第二种原因,Linux系统会触发直接内存回收(direct reclaim),在内核调用页分配函数分配物理页面时,由于系统内存短缺,不能满足分配请求,内核就会直接触发页面回收机制,用户线程进入内存回收流程,以保证内存使用。
发明人在对相关的内存回收方法的研究中发现,在通过上述两种方式进行内存回收的过程中,不管是由kswapd后台内存回收线程进行内存回收还是由用户线程进行内存回收,都会串行执行shrink_Iruvec和shrink_slab两个操作。其中,shrink_Iruvec操作用于对匿名页面和文件页面进行回收,shrink_slab操作用于对各类驱动程序对应的内存页面进行回收。其中,串行执行shrink_Iruvec和shrink_slab两个操作指的是,先执行完shrink_Iruvec操作,再执行shrink_slab操作。
在执行shrink_slab操作时,由于驱动程序的质量参差不齐,在对各类驱动程序的内存页面进行回收时,是串行对各类驱动程序对应的内存页面进行回收的,一旦其中一个驱动程序的内存页面的回收阻塞,会导致后台内存回收或直接内存回收整体阻塞,从而会导致内存回收不及时或内存回收整体阻塞。
因此,发明人提出了本申请中的内存回收方法、装置、电子设备及存储介质。在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收,通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。通过上述方法,在进行内存回收的过程中,通过内存回收线程和第一异步线程异步进行不同的内存页面的回收,使得不同的内存页面的回收可以并行进行,进而可以有效提高内存回收的速度,改善用户的性能体验。
在本申请实施例中,所提供的内存回收方法可以由电子设备执行。在由电子设备执行的这种方式中,本申请实施例提供的内存回收方法中所有步骤可以均由电子设备执行。例如,如图1所示,通过电子设备100的处理器执行在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收;通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。
再者,本申请实施例提供的内存回收方法也可以由服务器(云端)进行执行。对应的,在由服务器执行的这种方式中,可以由服务器执行在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收;通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。
另外,还可以由电子设备和服务器协同执行。在由电子设备和服务器协同执行的这种方式中,本申请实施例提供的内存回收方法中的部分步骤由电子设备执行,而另外部分的步骤则由服务器来执行。
示例性的,如图2所示,电子设备100可以执行内存回收方法包括的:在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收,然后由服务器200来执行通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。
需要说明的是,在由电子设备和服务器协同执行的这种方式中,电子设备和服务器分别执行的步骤不限于上述示例中所介绍的方式,在实际应用中,可以根据实际情况动态的调整电子设备和服务器分别执行的步骤。
需要说明的是,该电子设备100除了可以为图1和图2中所示的智能手机外,还可以为车机设备、可穿戴设备、平板电脑、笔记本电脑、智能音箱等。服务器120可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统。
下面将结合附图具体描述本申请的各实施例。
请参阅图3,本申请实施例提供的一种内存回收方法,应用于如图1或图2所示的电子设备或服务器,所述方法包括:
步骤S110:在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收。
在本申请实施例中,内存回收线程为执行内存回收操作的原线程,其中,不同的内存回收操作,对应的内存回收线程不同,比如,后台内存回收操作,对应的内存回收线程为kswapd后台内存回收线程;直接内存回收操作,对应的内存回收线程为用户线程。第一内存页面可以包括匿名页面和文件页面。
作为一种方式,响应于内存回收指令,通过内存回收线程调用shrink_Iruvec函数回收匿名页面和文件页面。其中,内存回收指令可以为检测到指定应用程序启动触发的,也可以为在检测到空闲内存低于内存水线时触发的,在此不做具体限定。
作为其中一种方式,若内存回收指令为检测到指定应用程序启动触发的,在这种情况下,指定应用程序可以为需要内核为其分配大量内存的应用程序,比如游戏类应用程序。当检测到需要内核为其分配大量内存的应用程序启动时,通过内存回收线程调用shrink_Iruvec函数回收匿名页面和文件页面。
可选的,内存回收指令也可以为与电子设备建立通信连接的其他外部设备发送的指令,在这种情况下,其他外部设备可以实时对电子设备的空闲内存进行监测,当其他外部设备监测到电子设备的空闲内存低于预设内存时,其他外部设备向电子设备发送内存回收指令,当电子设备接收到内存回收执行时,响应于该内存回收指令,开始通过内存回收线程调用shrink_Iruvec函数回收匿名页面和文件页面。
在通过上述方式开始回收匿名页面和文件页面之前,可以先确定需要回收的匿名页面和文件页面的大小,在确定了需要回收的匿名页面和文件页面的大小之后,开始通过内存回收线程调用shrink_Iruvec函数回收指定大小的匿名页面和文件页面。其中,回收的匿名页面可以为一些不经常使用的匿名页面,回收的文件页面也可以为一些不经常使用的文件页面。可选的,不经常使用的匿名页面和不经常使用的文件页面为超过预设时间未使用的匿名页面和文件页面,其中,预设时间为预先设置的任意时间值,具体的,若确定需要经常进行匿名页面和文件页面的回收,则可以将预设时间设置得小一点;若确定不需要经常进行匿名页面和文件页面的回收,则可以将预设时间设置得大一点。
步骤S120:通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。
在本申请实施例中,第一异步线程为新创建的用于异步对驱动程序对应的内存页面进行回收的线程。其中,第一异步线程可以为用户线程,也可以为内核线程。其中,用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程;内核线程指需要内核的参与,由内核完成线程的调度,其依赖于操作系统核心,由内核的内部需求进行创建和撤销,内核线程的线程表(thread table)位于内核中,包括了线程控制块(TCB),一旦线程阻塞,内核会从当前或者其他进程(process)中重新选择一个线程保证程序的执行。
可选的,在本申请实施例中,第二内存页面为驱动程序对应的内存页面,驱动程序对应的内存页面为在驱动程序的运行过程中,内核动态分配给驱动程序的内存页面。其中,内核动态分配给驱动程序的内存页面可以包括非分页内存和可分页内存。
其中,在驱动程序中,内存管理是非常重要的,内存有分页和非分页之别,默认情况下,内核加载器会加载所有的代码部分和全局数据到非分页内存中。驱动程序是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。因此,驱动程序被誉为“硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。具体的,驱动程序可以包括GPU驱动程序、USB驱动程序、SCSI驱动程序等,在此不做具体限定。
作为一种方式,通过第一异步线程调用shrink_slab函数对驱动程序对应的内存页面进行回收。在本申请实施例中,通过内存回收线程对第一内存页面进行回收和通过第一异步线程对第二内存页面进行回收是并行执行的。也就是说,第一内存页面的回收和第二内存页面的回收是同时进行的,从而提高了内存回收的速度。
本申请提供的一种内存回收方法,在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收,通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。通过上述方法,在进行内存回收的过程中,通过内存回收线程和第一异步线程异步进行不同的内存页面的回收,使得不同的内存页面的回收可以并行进行,进而可以有效提高内存回收的速度,改善用户的性能体验。
请参阅图4,本申请实施例提供的一种内存回收方法,应用于如图1或图2所示的电子设备或服务器,所述方法包括:
步骤S210:若当前的空闲内存低于预设内存,唤醒所述第一异步线程。
在本申请实施例中,预设内存为预先设置的表征需要进行内存回收的空闲内存阈值,预设内存可以设置为内存水线对应的内存阈值,预设内存也可以设置为大于内存水线的内存阈值,在此不作具体限定。
可以理解的是,电子设备的系统和应用程序的进程的运行,都需要系统内核为其分配内存空间。并且随着系统的运行情况,内核不断地进行着内存的回收与分配等。例如,内核可以对内存空间的使用情况进行实时监测,并检测剩余的空闲内存空间是否小于预设内存。
一般情况下,系统内核在进行内存管理时会设置有内存水线,系统在分配内存页面时,会检测系统剩余的空闲内存空间是否小于该内存水线,如果小于该内存水线,则要进行内存回收。当检测到当前的空闲内存低于内存水线时,则唤醒第一异步线程进行内存回收操作。
但是,一般在检测到系统剩余的空闲内存空间小于该内存水线时,系统已经处于低内存状态了。再者,内存压缩操作一般比较耗时,如果系统已经处于低内存状态才进行内存压缩处理,会导致系统长时间处于低内存状态,不能及时地完成内存回收,导致内存回收效率低,影响系统和应用程序的正常运行。
因此,为了避免这种系统长期处于低内存状态的情况,可以提前对内存进行回收处理,所以预设内存可以设置为一个大于内存水线的值,当检测到空闲内存空间小于预设内存时,就开始进行内存回收。
作为一种方式,当检测到系统当前的空闲内存低于预设内存时,唤醒创建的第一异步线程。其中,在唤醒第一异步线程之后,可以将唤醒的第一异步线程的状态设置为“RUNNING”。可选的,为了可以唤醒指定的第一异步线程,可以为创建的第一异步线程设置一个指定的线程标识,进而当检测到满足对应的唤醒条件时,可以通过该指定的线程标识找到对应的第一异步线程,从而唤醒该对应的第一异步线程。可选的,在检测到满足指定唤醒条件时,可以通过预设函数唤醒该第一异步线程。其中,预设函数可以为预先设置的用于唤醒第一异步线程的函数;指定唤醒条件可以为前述的当前的空闲内存低于预设内存,在此不做具体限定。
步骤S220:在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收。
作为一种方式,步骤S220具体可以包括:在进行后台内存回收的过程中,通过后台回收线程对所述第一内存页面进行回收;或者,在进行直接内存回收的过程中,通过用户线程对所述第一内存页面进行回收。
在本申请实施例中,内存回收流程可以包括后台内存回收和直接内存回收。其中,后台内存回收是由kswapd后台内存回收线程对第一内存页面进行内存回收的;直接内存回收是由用户线程对第一内存页面进行内存回收的。
步骤S230:通过所述第一异步线程串行对多个所述驱动程序各自对应的第二内存页面进行回收。
在本申请实施例中,驱动程序可以包括多个,每个驱动程序对应有相应的第二内存页面。
作为一种方式,在创建了第一异步线程后,将多个驱动程序对应的内存页面的回收操作转移到第一异步线程执行,从而可以解决因驱动程序的内存页面的回收阻塞导致第一内存页面的回收的阻塞。
在本申请实施例中,由于驱动程序有多个,因此,第一异步线程在对多个驱动程序对应的第二内存页面进行回收时,是串行进行的,即在完成对一个驱动程序对应的第二内存页面的回收之后,再去进行下一个驱动程序对应的第二内存页面的回收。
在串行对多个驱动程序各自对应的第二内存页面进行回收时,可以按照驱动程序的优先级,对多个驱动程序各自对应的第二内存页面进行回收。作为其中一种方式,可以按照驱动程序的优先级从高到低或者从低到高的顺序对多个驱动程序各自对应的第二内存页面进行回收。示例性的,若优先级包括第一优先级、第二优先级、第三优先级以及第四优先级,其中,第一优先级高于第二优先级,第二优先级高于第三优先级,第三优先级高于第四优先级。在按照驱动程序的优先级从高到低的顺序对多个驱动程序各自对应的第二内存页面进行回收时,则先对优先级为第一优先级的驱动程序对应的第二内存页面进行回收,接下来对优先级为第二优先级的驱动程序对应的第二内存页面进行回收,再对优先级为第三优先级的驱动程序对应的第二内存页面进行回收,最后对优先级为第四优先级的驱动程序对应的第二内存页面进行回收。其中,多个驱动程序的优先级可以预先设置,在设置优先级多个驱动程序的时,可以根据驱动程序的重要性进行设置,驱动程序的重要性越高,对应的优先级越高,驱动程序的重要性越低,对应的优先级越低。
作为其中另一种方式,也可以根据驱动程序对应的第二内存页面的数量,按照数量从大到小或从小到大的顺序对多个驱动程序对应的第二内存页面进行回收。示例性的,若多个驱动程序包括第一驱动程序、第二驱动程序、第三驱动程序以及第四驱动程序。其中,第一驱动程序对应的第二内存页面的数量为A,第二驱动程序对应的第二内存页面的数量为B,第三驱动程序对应的第二内存页面的数量为C,第四驱动程序对应的第二内存页面的数量为D,A>B>C>D。在按照驱动程序对应的第二内存页面的数量从大到小的顺序对多个驱动程序各自对应的第二内存页面进行回收时,则先对第一驱动程序对应的第二内存页面进行回收,接下来对第二驱动程序对应的第二内存页面进行回收,再对第三驱动程序对应的第二内存页面进行回收,最后对第四驱动程序对应的第二内存页面进行回收。
本申请提供的一种内存回收方法,若当前的空闲内存低于预设内存,唤醒第一异步线程,然后在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收,通过第一异步线程串行对多个驱动程序各自对应的第二内存页面进行回收。通过上述方法,在进行内存回收的过程中,通过内存回收线程和第一异步线程异步进行不同的内存页面的回收,使得不同的内存页面的回收可以并行进行,进而可以有效提高内存回收的速度,改善用户的性能体验。
请参阅图5,本申请实施例提供的一种内存回收方法,应用于如图1或图2所示的电子设备或服务器,所述方法包括:
步骤S310:在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收。
步骤S320:通过所述第一异步线程串行对多个所述驱动程序各自对应的第二内存页面进行回收。
步骤S330:在通过所述第一异步线程串行对多个所述驱动程序各自对应的第二内存页面进行回收的过程中,获取第一驱动程序对应的内存回收时间,其中,所述第一驱动程序为当前正在进行第二内存页面回收的驱动程序。
在本申请实施例中,第一驱动程序对应的内存回收时间为对第一驱动程序对应的第二内存页面的回收的持续时间,即开始对第一驱动程序对应的第二内存页面进行回收的时间到获取内存回收时间时的时间段。
在通过第一异步线程串行对多个驱动程序各自对应的第二内存页面进行回收时,若其中某个驱动程序对应的第二内存页面的内存回收时间过长,会导致剩余的驱动程序对应的第二内存页面的回收阻塞。因此,为了避免剩余的驱动程序对应的第二内存页面的回收阻塞,可以对每个驱动程序对应的第二内存页面的回收的内存回收时间实时进行监测。
步骤S340:若所述第一驱动程序对应的内存回收时间超过预设时间阈值,且所述第一驱动程序对应的第二内存页面的回收还未完成,则创建第二异步线程。
在本申请实施例中,预设时间阈值为预先设置的对第一驱动程序对应的第二内存页面的回收完成的最大时间。第二异步内存为新创建的用于异步对第二内存页面进行回收的内核线程。
当监测到第一驱动程序对应的内存回收时间超过预设时间阈值,且第一驱动程序对应的第二内存页面的回收还未完成,则确定该第一驱动程序对应的第二内存页面的内存回收时间过长,则新创建一个内核线程来进行其他还未进行内存回收的驱动程序对应的第二内存页面的回收。
步骤S350:通过所述第二异步线程对第二驱动程序对应的第二内存页面进行回收,其中,所述第二驱动程序为在所述第一驱动程序之后进行第二内存页面回收的驱动程序。
在本申请实施例中,在创建了第二异步线程后,通过第二异步线程串行对还未进行内存回收的驱动程序对应的第二内存页面进行回收。在通过第二异步线程串行对还未进行内存回收的驱动程序对应的第二内存页面进行回收时,也会监测每个驱动程序对应的第二内存页面的内存回收时间进行监测,在监测到下一驱动程序对应的第二内存页面的内存回收时间超过预设时间阈值时,可以再创建一个新的内核线程,用于对后面还未进行内存回收的驱动程序对应的第二内存页面进行回收。
本申请提供的一种内存回收方法,首先在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收,然后通过第一异步线程串行对多个驱动程序各自对应的第二内存页面进行回收,在通过第一异步线程串行对多个驱动程序各自对应的第二内存页面进行回收的过程中,获取当前正在进行第二内存页面回收的驱动程序对应的内存回收时间,若该内存回收时间超过预设时间阈值,且当前正在进行第二内存页面回收的驱动程序对应的第二内存页面还未完成,则创建第二异步线程,通过第二异步线程之后对在第一驱动程序之后进行第二内存页面回收的驱动程序对应的第二内存页面进行回收。通过上述方,在进行内存回收的过程中,对第二内存页面的回收进行了两步异步化的方式,有效提高了内存回收速度,并且解决了由于线程阻塞导致的性能卡顿问题,改善了用户的性能体验。
请参阅图6,本申请实施例提供的一种内存回收方法,应用于如图1或图2所示的电子设备或服务器,所述方法包括:
步骤S410:在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收。
步骤S420:启动定时器。
在本申请实施例中,当检测到通过第一异步线程对驱动程序对应的第二内存页面开始进行回收时,启动定时器。
步骤S430:通过所述定时器监测所述第一驱动程序对应的内存回收时间。
在本申请实施例中,为了避免剩余的驱动程序对应的第二内存页面的回收阻塞,可以启动定时器对驱动程序对应的内存回收时间进行监测。
步骤S440:在通过所述第一异步线程串行对多个所述驱动程序各自对应的第二内存页面进行回收的过程中,获取第一驱动程序对应的内存回收时间,其中,所述第一驱动程序为当前正在进行第二内存页面回收的驱动程序。
步骤S450:若所述第一驱动程序对应的内存回收时间超过预设时间阈值,且所述第一驱动程序对应的第二内存页面的回收还未完成,获取已经建立的第二异步线程的数量。
在本申请实施例中,为了避免CPU负载过高,创建的第二异步线程的数量也不能超过一定的线程阈值。因此,可以对创建的第二异步线程的数量进行监测,在每一次判断需要创建新的第二异步线程时,可以获取一次已经创建的第二异步线程的数量,从而来确定是否还能创建新的第二异步线程。其中,在每创建了一个第二异步线程时,可以将已创建的第二异步线程的数量加1。
步骤S460:若已经建立的第二异步线程的数量小于预设数量阈值,创建所述第二异步线程。
在本申请实施例中,预设数量阈值为预先设置的可以创建的第二异步线程的最大数量。
在确定第一驱动程序对应的内存回收时间超过预设时间阈值,且所述第一驱动程序对应的第二内存页面的回收还未完成之后,获取已创建的第二异步线程的数量,将获取的已创建的第二异步线程的数量与预设数量阈值进行比较,若确定已创建的第二异步线程的数量小于预设数量阈值,则允许创建新的第二异步线程。
步骤S470:通过所述第二异步线程对第二驱动程序对应的第二内存页面进行回收,其中,所述第二驱动程序为在所述第一驱动程序之后进行第二内存页面回收的驱动程序。
本申请提供的一种内存回收方法,首先在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收,然后启动定时器,通过定时器监测第一驱动程序对应的内存回收时间,在通过第一异步线程串行对多个驱动程序各自对应的第二内存页面进行回收的过程中,获取第一驱动程序对应的内存回收时间,若第一驱动程序对应的内存回收时间超过预设时间阈值,且第一驱动程序对应的第二内存页面的回收还未完成,获取已经建立的第二异步线程的数量,若已经建立的第二异步线程的数量小于预设数量阈值,则创建新的第二异步线程,通过新的第二异步线程对第二驱动程序对应的第二内存页面进行回收。通过上述方法,在进行内存回收的过程中,通过内存回收线程和第一异步线程异步进行不同的内存页面的回收,使得不同的内存页面的回收可以并行进行,进而可以有效提高内存回收的速度,改善用户的性能体验。再者,在通过第二异步线程对多个驱动程序各自对应的第二内存页面进行回收的过程中,也可以通过不断创建新的第二线程来对第二驱动程序的第二内存页面进行回收,避免了第二驱动程序的第二内存页面的回收被阻塞。
请参阅图7,本申请实施例提供的一种内存回收装置500,所述装置500包括:
第一回收单元510,用于在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收。
作为一种方式,第一回收单元510具体用于在进行后台内存回收的过程中,通过后台回收线程对所述第一内存页面进行回收;或者,在进行直接内存回收的过程中,通过用户线程对所述第一内存页面进行回收。
第二回收单元520,用于通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。
作为一种方式,第二回收单元520具体用于通过所述第一异步线程串行对多个所述驱动程序各自对应的第二内存页面进行回收。
作为另一种方式,第二回收单元520具体用于在通过所述第一异步线程串行对多个所述驱动程序各自对应的第二内存页面进行回收的过程中,获取第一驱动程序对应的内存回收时间,其中,所述第一驱动程序为当前正在进行第二内存页面回收的驱动程序;若所述第一驱动程序对应的内存回收时间超过预设时间阈值,且所述第一驱动程序对应的第二内存页面的回收还未完成,则创建第二异步线程;通过所述第二异步线程对第二驱动程序对应的第二内存页面进行回收,其中,所述第二驱动程序为在所述第一驱动程序之后进行第二内存页面回收的驱动程序。
可选的,第二回收单元520还用于启动定时器;通过所述定时器监测所述第一驱动程序对应的内存回收时间。
可选的,第二回收单元520还用于获取已经建立的第二异步线程的数量;若已经建立的第二异步线程的数量小于预设数量阈值,创建所述第二异步线程。
请参阅图8,所述装置500还包括:
唤醒单元530,用于若当前的空闲内存低于预设内存,唤醒所述第一异步线程。
需要说明的是,本申请中装置实施例与前述方法实施例是相互对应的,装置实施例中具体的原理可以参见前述方法实施例中的内容,此处不再赘述。
下面将结合图9对本申请提供的一种电子设备或服务器进行说明。
请参阅图9,基于上述的内存回收方法、装置,本申请实施例还提供的另一种可以执行前述内存回收方法的电子设备或服务器800。电子设备或服务器800包括相互耦合的一个或多个(图中仅示出一个)处理器802、存储器804以及网络模块806。其中,该存储器804中存储有可以执行前述实施例中内容的程序,而处理器802可以执行该存储器804中存储的程序。
其中,处理器802可以包括一个或者多个处理核。处理器802利用各种接口和线路连接整个电子设备或服务器800内的各个部分,通过运行或执行存储在存储器804内的指令、程序、代码集或指令集,以及调用存储在存储器804内的数据,执行电子设备或服务器800的各种功能和处理数据。可选地,处理器802可以采用数字信号处理(Digital SignalProcessing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器802可集成中央处理器(Central Processing Unit,CPU)、图像处理器(Graphics ProcessingUnit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器802中,单独通过一块通信芯片进行实现。
存储器804可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器804可用于存储指令、程序、代码、代码集或指令集。存储器804可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备或服务器800在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
所述网络模块806用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯,例如和音频播放设备进行通讯。所述网络模块806可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。所述网络模块806可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。例如,网络模块806可以与基站进行信息交互。
请参考图10,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读存储介质900中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质900可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质900包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质900具有执行上述方法中的任何方法步骤的程序代码910的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码910可以例如以适当形式进行压缩。
本申请提供的一种内存回收方法、装置、电子设备以及存储介质,在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收,通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。通过上述方法,在进行内存回收的过程中,通过内存回收线程和第一异步线程异步进行不同的内存页面的回收,使得不同的内存页面的回收可以并行进行,进而可以有效提高内存回收的速度,改善用户的性能体验。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。

Claims (10)

1.一种内存回收方法,其特征在于,所述方法包括:
在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收;
通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。
2.根据权利要求1所述的方法,其特征在于,所述在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收之前还包括:
若当前的空闲内存低于预设内存,唤醒所述第一异步线程。
3.根据权利要求1所述的方法,其特征在于,所述驱动程序包括多个,所述通过第一异步线程对第二内存页面进行回收,包括:
通过所述第一异步线程串行对多个所述驱动程序各自对应的第二内存页面进行回收。
4.根据权利要求3所述的方法,其特征在于,所述通过所述第一异步线程串行对多个所述驱动程序各自对应的第二内存页面进行回收,包括:
在通过所述第一异步线程串行对多个所述驱动程序各自对应的第二内存页面进行回收的过程中,获取第一驱动程序对应的内存回收时间,其中,所述第一驱动程序为当前正在进行第二内存页面回收的驱动程序;
若所述第一驱动程序对应的内存回收时间超过预设时间阈值,且所述第一驱动程序对应的第二内存页面的回收还未完成,则创建第二异步线程;
通过所述第二异步线程对第二驱动程序对应的第二内存页面进行回收,其中,所述第二驱动程序为在所述第一驱动程序之后进行第二内存页面回收的驱动程序。
5.根据权利要求4所述的方法,其特征在于,所述获取第一驱动程序对应的内存回收时间之前还包括:
启动定时器;
通过所述定时器监测所述第一驱动程序对应的内存回收时间。
6.根据权利要求4所述的方法,其特征在于,所述创建第二异步线程,包括:
获取已经建立的第二异步线程的数量;
若已经建立的第二异步线程的数量小于预设数量阈值,创建所述第二异步线程。
7.根据权利要求1所述的方法,其特征在于,所述在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收,包括:
在进行后台内存回收的过程中,通过后台回收线程对所述第一内存页面进行回收;或者,
在进行直接内存回收的过程中,通过用户线程对所述第一内存页面进行回收。
8.一种内存回收装置,其特征在于,所述装置包括:
第一回收单元,用于在进行内存回收的过程中,通过内存回收线程对第一内存页面进行回收;
第二回收单元,用于通过第一异步线程对第二内存页面进行回收,其中,所述内存回收线程与所述第一异步线程不同,所述第一内存页面与所述第二内存页面不同,所述第二内存页面为对应于驱动程序的内存页面。
9.一种电子设备,其特征在于,包括一个或多个处理器;一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码被处理器运行时执行权利要求1-7任一所述的方法。
CN202211201341.6A 2022-09-29 2022-09-29 内存回收方法、装置、电子设备及存储介质 Pending CN115587049A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211201341.6A CN115587049A (zh) 2022-09-29 2022-09-29 内存回收方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211201341.6A CN115587049A (zh) 2022-09-29 2022-09-29 内存回收方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN115587049A true CN115587049A (zh) 2023-01-10

Family

ID=84772885

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211201341.6A Pending CN115587049A (zh) 2022-09-29 2022-09-29 内存回收方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN115587049A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116225976A (zh) * 2023-05-05 2023-06-06 麒麟软件有限公司 一种Linux操作系统下的水位线自调整方法及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116225976A (zh) * 2023-05-05 2023-06-06 麒麟软件有限公司 一种Linux操作系统下的水位线自调整方法及系统
CN116225976B (zh) * 2023-05-05 2023-08-08 麒麟软件有限公司 一种Linux操作系统下的水位线自调整方法及系统

Similar Documents

Publication Publication Date Title
US11531625B2 (en) Memory management method and apparatus
CN110764906B (zh) 内存回收处理方法、装置、电子设备以及存储介质
CN110888746B (zh) 内存管理方法、装置、存储介质及电子设备
CN111966492B (zh) 内存回收方法、装置、电子设备及计算机可读存储介质
CN110096336B (zh) 数据监控方法、装置、设备和介质
WO2021057619A1 (zh) 内存回收方法、装置、电子设备及存储介质
CN114096953A (zh) 内存管理方法、装置、电子设备和计算机可读介质
CN110765031B (zh) 数据存储方法、装置、移动终端及存储介质
CN110727605B (zh) 内存回收方法、装置以及电子设备
WO2021057623A1 (zh) 内存回收方法、装置、电子设备及存储介质
CN115421909A (zh) 内存管理方法、装置、电子设备及存储介质
CN115421907A (zh) 内存回收方法、装置、电子设备及存储介质
CN104808766A (zh) 一种终端
CN111984413A (zh) 内存回收方法、装置、电子设备及存储介质
CN115587049A (zh) 内存回收方法、装置、电子设备及存储介质
CN115509951A (zh) 内存回收方法、装置、电子设备及存储介质
CN108681469B (zh) 基于Android系统的页面缓存方法、装置、设备及存储介质
CN113412480B (zh) 挂载处理方法、装置、电子设备及计算机可读取存储介质
CN112363841A (zh) 应用进程的查杀方法、装置、电子设备及存储介质
CN112052089B (zh) 内存回收方法、装置以及电子设备
CN116860427A (zh) 资源回收方法及装置
CN114968551A (zh) 一种进程管理的方法、装置、电子设备及存储介质
CN111078405B (zh) 内存分配方法、装置、存储介质及电子设备
CN112000462A (zh) 一种基于共享外设资源的数据处理方法及装置
CN112532905B (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