CN112052089B - 内存回收方法、装置以及电子设备 - Google Patents

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

Info

Publication number
CN112052089B
CN112052089B CN202010904981.8A CN202010904981A CN112052089B CN 112052089 B CN112052089 B CN 112052089B CN 202010904981 A CN202010904981 A CN 202010904981A CN 112052089 B CN112052089 B CN 112052089B
Authority
CN
China
Prior art keywords
memory
page
specified
linked list
recovery
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
Application number
CN202010904981.8A
Other languages
English (en)
Other versions
CN112052089A (zh
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.)
Oppo Chongqing Intelligent Technology Co Ltd
Original Assignee
Oppo Chongqing Intelligent Technology 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 Oppo Chongqing Intelligent Technology Co Ltd filed Critical Oppo Chongqing Intelligent Technology Co Ltd
Priority to CN202010904981.8A priority Critical patent/CN112052089B/zh
Publication of CN112052089A publication Critical patent/CN112052089A/zh
Application granted granted Critical
Publication of CN112052089B publication Critical patent/CN112052089B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • 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

Landscapes

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

Abstract

本申请实施例公开了一种内存回收方法、装置以及电子设备。方法包括:响应于内存回收指令获取待转移内存页面,待转移内存页面为活跃页面链表中待转移出所述活跃页面链表的内存页面;获取待转移内存页面中指定类型内存页面;将指定类型内存页面转移到指定页面链表中,将待转移内存页面中除指定类型内存页面以外的内存页面转移到非活跃页面链表中;按照指定的回收顺序进行内存回收,在指定的回收顺序中,非活跃页面链表对应的回收次序在指定页面链表的回收次序之前。从而使得在执行内存回收时不会立刻将指定类型内存页面进行回收,进而有利于对指定类型内存页面进行保护,以避免指定类型内存页面被过早进行回收,同时提升了内存回收过程中的灵活性。

Description

内存回收方法、装置以及电子设备
技术领域
本申请涉及计算机技术领域,更具体地,涉及一种内存回收方法、装置以及电子设备。
背景技术
内存又称主存,是CPU能直接寻址的存储空间,由半导体器件制成。电子设备中的内存的空间是有限的,为了保证系统有足够的内存可以使用,电子设备的系统通常会在一定的情况下进行内存回收。但是,在相关的内存回收方式中,还缺乏一定的灵活性。
发明内容
鉴于上述问题,本申请提出了一种内存回收方法、装置以及电子设备,以改善上述问题。
第一方面,本申请提供了一种内存回收方法,所述方法包括:响应于内存回收指令获取待转移内存页面,所述待转移内存页面为活跃页面链表中待转移出所述活跃页面链表的内存页面;获取所述待转移内存页面中指定类型内存页面;将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中;按照指定的回收顺序进行内存回收,在所述指定的回收顺序中,所述非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前。
第二方面,本申请提供了一种内存回收装置,所述装置包括:待转移内存页面获取单元,用于响应于内存回收指令获取待转移内存页面,所述待转移内存页面为活跃页面链表中待转移出所述活跃页面链表的内存页面;指定类型内存页面获取单元,用于获取所述待转移内存页面中指定类型内存页面;内存页面转移单元,用于将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中;内存回收单元,用于按照指定的回收顺序进行内存回收,在所述指定的回收顺序中,所述非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前。
第三方面,本申请提供了一种电子设备,包括一个或多个处理器以及存储器;一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行以实现上述的方法。
第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码被处理器运行时执行上述的方法。
本申请提供的一种内存回收方法、装置以及电子设备,在响应于内存回收指令并获取待转移内存页面后,会获取所述待转移内存页面中指定类型内存页面,然后将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中,并按照指定的回收顺序进行内存回收。从而通过前述方式可以使得在待转移页面中有指定类型内存页面的情况下,不会直接将该指定类型内存页面转移到非活跃页面链表中,而是会转移到回收次序在该非活跃页面链表之后的指定页面链表中,从而使得在非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前的情况下,在执行内存回收时,不会立刻将指定类型内存页面进行回收,进而有利于对指定类型内存页面进行保护,以避免指定类型内存页面被过早进行回收,提升了内存回收过程中的灵活性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了一种从活跃页面链表中转移内存页面到非活跃页面链表中的示意图;
图2示出了本申请另一实施例提出的一种内存回收方法的流程图;
图3示出了本申请再一实施例提出的一种内存回收方法的流程图;
图4示出了本申请实施例中进行待转移内存页面转移的示意图;
图5示出了本申请再又一实施例提出的一种内存回收方法的流程图;
图6示出了本申请实施例提出的一种内存回收装置的结构框图;
图7示出了本申请实时中的用于执行根据本申请实施例的内存回收方法的电子设备的结构框图;
图8示出了本申请实时中的用于保存或者携带实现根据本申请实施例的内存回收方法的程序代码的存储单元。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
对于操作系统而言,因为内存本身的大小是有限的,所以内存回收是一个较为普遍的机制。而之所以要进行内存回收,主要原因有两个:系统需要为任何时刻突发到来的内存申请提供足够的内存,以便cache(缓存)的使用和其他相关内存的使用不至于让系统的剩余内存长期处于很少的状态。其中,cache是位于处理器与内存间的一种速度高的存储器。还有,当有大于空闲内存的申请到来的时候,也会触发内存回收。而内存回收的核心思想就是如果一些数据能够保存到磁盘,在内存不足时就把这些数据从内存写到磁盘中,这样这些数据占用的内存页面就可以作为空闲内存页面给予系统使用了。对于整个内存回收的过程来说,可以理解为对存储内存页面的链表的收缩的过程。
发明人在对相关的内存回收过程的研究发现,相关的内存回收方式还缺乏一定的灵活性。例如,在相关的内存中,内存页面是存储在指定格式的链表(例如,lru链表)中的。其中,链表可以分为非活跃页面链表以及活跃页面链表。非活跃页面链表用于存放长时间未访问的内存页面,活跃页面链表用于存放最近被访问过的内存页面。当进程内存回收时,非活跃页面链表的长度未达到标准时,就会先从活跃页面链表尾部向头部进行扫描(一般每次扫描32个页),然后会将所有扫描到的内存页面移动到非活跃页面链表中。并且,这里是所有扫描到的内存页面,并不会判断被扫描到的内存页面有没有被访问,即使被扫描到的内存页面被访问了,也会被移动到非活跃页面链表中。示例性的,如图1所示,虚线框中的内存页面为扫描到的内存页面。
基于上述相关的方式,发明人进一步的发现,在从活跃页面链向非活跃页面链表转移内存页面的过程中,并不会区分所转移的内存页面对应的是由那种类型的数据处理任务所使用的,进而就会造成在内存回收过程中,UI界面所对应的内存页面或者实时进程所对应的内存页面也会被容易转移到非活跃页面链表中,进而被回收掉。并且,在该相关的内存回收方式中,非活跃页面链表是最开始进行内存回收的区域,进而就造成了若UI界面所对应的内存页面或者实时进程所对应的内存页面被转移到非活跃页面链表后,会在内存回收的前期就会被直接回收掉,从而会给用户造成界面卡顿或者操作不流畅的体验。
因此,发明人提出了本申请中的内存回收方法、装置以及电子设备,在响应于内存回收指令并获取待转移内存页面后,会获取所述待转移内存页面中指定类型内存页面,然后将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中,并按照指定的回收顺序进行内存回收。
从而通过前述方式可以使得在待转移页面中有指定类型内存页面的情况下,不会直接将该指定类型内存页面转移到非活跃页面链表中,而是会转移到回收次序在该非活跃页面链表之后的指定页面链表中,从而使得在非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前的情况下,在执行内存回收时,不会立刻将指定类型内存页面进行回收,进而有利于对指定类型内存页面进行保护,提升了内存回收过程中的灵活性。
下面将结合附图具体描述本申请的各实施例。
请参阅图2,本申请实施例提供的一种内存回收方法,所述方法包括:
S110:响应于内存回收指令获取待转移内存页面,所述待转移内存页面为活跃页面链表中待转移出所述活跃页面链表的内存页面。
在本实施例中,内存回收指令为触发进行内存回收的指令。在本实施例中,可以有多种方式触发生成内存回收指令。
作为一种方式,可以基于电子设备当前可用的内存触发生成内存回收指令。在这种方式下,电子设备可以对当前可用的内存进行检测,并在检测到当前可用的内存低于目标内存的情况下,触发生成内存回收指令,以便获取待转移内存页面。示例性的,该目标内存可以为电子设备运行过程中需求的最低内存。例如,那么若该目标内存为30MB,而电子设备检测到当前可用的内存为20MB,那么也就意味着当前可用的内存低于目标内存,进而就会触发生成内存回收指令。
可选的,电子设备可以周期性的对当前可用的内存进行检测。示例性的,可以每间隔1小时或者2小时,甚至是24小时触发一次对当前可用的内存进行检测。再者,可选的,电子设备可以在检测到有指定的应用程序启动时触发对当前可用的内存进行检测。需要说明的是,应用程序在运行过程中都需要消耗一定的内存的,进而电子设备在检测到有应用程序启动时,会为启动的应用程序分配一定的内存,但是在有的情况下,当前可用的内存无法支持为启动的应用程序分配所需的内存时,电子设备就需要进行一次内存回收,所以电子设备可以在检测到有指定的应用程序启动时触发对当前可用的内存进行检测,以便触发本实施例提供的内存回收方法。其中,指定的应用程序为运行过程中消耗的内存较大的应用程序。该内存消耗较大的应用程序为运行过程中所需的内存大于内存分配阈值的应用程序。
作为另外一种方式,可以由用户通过配置的操作控件手动触发进行内存回收。在这种方式下,电子设备可以在界面上悬浮显示一个内存回收触发控件,若电子设备检测到作用于该内存回收触发控件的触控操作时,触发生成内存回收指令。
需要说明的是,本实施例中待转移内存页面是从活跃页面链表中确定的待转移出所述活跃页面链表的内存页面。在这种方式下,电子设备可以响应于内存回收指令从活跃页面链表的尾部开始进行内存页面扫描,以扫描指定数量的内存页面作为待转移内存页面。
S120:获取所述待转移内存页面中指定类型内存页面。
在本实施例中,在获取到待转移内存页面后,会先对待转移内存页面中的每个内存页面对应的类型进行检测,以获取到指定类型内存页面。需要说明的是,内存页面的类型可以是由占用该内存页面的程序确定的,或者可以由占用该内存页面的程序对应的进程确定。可选的,若为由UI(User Interface)进程所占用的内存页面,那么该内存页面的类型为UI进程类型的内存页面。其中,该UI进程为处理与用户有交互操作的UI界面的进程。可选的,若由实时进程所占用的内存页面,那么该内存页面的类型为实时进程类型的内存页面。其中,实时进程为处理实时数据的进程,该实时数据可以包括网络通信过程中的数据。
需要说明的是,在本实施例中指定类型内存页面表征的是内存页面回收过程中不会被马上进行回收的内存页面。在本实施例中,指定类型内存页面所属的指定类型可以由根据实际情况进行配置,也可以由用户在配置界面中进行配置。
S130:将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中。
需要说明的是,在本实施例中,在内存页面的回收顺序中不同的链表所对应的回收次序是不同的,进而在获取到待转移内存页面中指定类型的内存页面后,会对应的将该指定类型内存页面转移到指定页面链表中,而将待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中。示例性的,若待转移内存页面中包括有内存页面A、内存页面B、内存页面C、内存页面D、内存页面E以及内存页面F。在检测到内存页面B、内存页面C以及内存页面D为指定类型的内存页面的情况下,则会将内存页面B、内存页面C以及内存页面D转移到指定页面链表中,而将内存页面A、内存页面E以及内存页面F转移到非活跃页面链表中。
S140:按照指定的回收顺序进行内存回收,在所述指定的回收顺序中,所述非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前。
在完成对待转移内存页面的转移后,则会开始进行内存页面回收操作。在本实施例中的内存回收顺序中,非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前,那么在进行内存页面回收操作时则会先对非活跃页面链表中的内存页面进行回收,在完成对非活跃页面链表中的内存页面进行回收后,才会开始从指定页面链表中进行内存页面的回收。示例性的,在待转移内存页面中包括有内存页面A、内存页面B、内存页面C、内存页面D、内存页面E以及内存页面F,且内存页面B、内存页面C以及内存页面D转移到指定页面链表,内存页面A、内存页面E以及内存页面F转移到非活跃页面链表中的情况下,在进行内存页面回收操作过程中,内存页面A、内存页面E以及内存页面F会先被进行回收,而内存页面B、内存页面C以及内存页面D则会相对在后进行回收。
本实施例提供的一种内存回收方法,在响应于内存回收指令并获取待转移内存页面后,会获取所述待转移内存页面中指定类型内存页面,然后将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中,并按照指定的回收顺序进行内存回收。
从而通过前述方式可以使得在待转移页面中有指定类型内存页面的情况下,不会直接将该指定类型内存页面转移到非活跃页面链表中,而是会转移到回收次序在该非活跃页面链表之后的指定页面链表中,从而使得在非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前的情况下,在执行内存回收时,不会立刻将指定类型内存页面进行回收,进而有利于对指定类型内存页面进行保护,提升了内存回收过程中的灵活性。
请参阅图3,本申请实施例提供的一种内存回收方法,所述方法包括:
S210:响应于内存回收指令获取待转移内存页面,所述待转移内存页面为活跃页面链表中待转移出所述活跃页面链表的内存页面。
S220:获取所述待转移内存页面中指定类型内存页面,所述指定类型内存页面包括多个指定子类型内存页面。
需要说明的是,如前述实施例所示,指定类型内存页面表征的是内存页面回收过程中不会被马上进行回收的内存页面。而该指定类型内存页面还可以包括多种更为具体类型的内存页面,例如,可以包括多个指定子类型内存页面。
S230:将所述多个指定子类型内存页面转移到各自对应的子指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中。
在本实施例中,不仅是非活跃页面链表与指定页面链表各自的回收次序不同,并且在该指定类型内存页面包括多个指定子类型内存页面的情况下,为了能够分别存放多个指定子类型内存页面,那么指定页面链表也会包括与多个指定子类型内存页面各自对应的链表。示例性的,所述多个指定子类型内存页面包括UI进程类型的内存页面,以及实时进程类型的内存页面,那么在指定页面链表中包括有UI进程类型的内存页面对应的子指定页面链表,还包括有实时进程类型的内存页面对应的子指定页面链表。示例性的,如图4所示,从活跃页面链表中确定的待转移页面包括有内存页面A、内存页面B、内存页面C、内存页面D、内存页面E以及内存页面F,而其中内存页面B、内存页面C以及内存页面D为指定类型内存页面10,并且具体的,内存页面B属于一种指定子类型内存页面,内存页面C以及内存页面D属于另一种指定子类型内存页面。那么在实际进行内存页面转移的过程中,则会将内存页面A、内存页面E以及内存页面F转移到非活跃页面链表中,而将内存页面B所转移到子指定页面链表1中,将内存页面C以及内存页面D转移到子指定页面链表2中。
S240:按照指定的回收顺序进行内存回收,在所述指定的回收顺序中,所述非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前。
需要说明的是,在指定页面链表包括多个子指定页面链表的情况下,每个子指定页面链表各自对应的回收次序也是会有不同的。在非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前的情况下,多个子指定页面链表中对应的回收次序在最前的子指定页面链表的回收次序则会在非活跃页面链表对应的回收次序之后,并且该对应的回收次序在最前的子指定页面链表的回收次序会与非活跃页面链表对应的回收次序相邻。示例性的,若指定页面链表包括图4中所示的子指定页面链表1以及子指定页面链表2,且该子指定页面链表1的回收次序在子指定页面链表2的回收次序之前,那么指定的回收顺序中会先对非活跃页面链表中的内存页面进行内存回收,然后再对指定页面链表1中的内存页面进行内存回收,之后再对指定页面链表2中的内存页面进行内存回收。
其中,作为一种方式,所述多个指定子类型内存页面包括UI进程类型的内存页面,以及实时进程类型的内存页面;在所述回收顺序中,所述UI进程类型的内存页面对应的子指定页面链表的回收次序在所述实时进程类型的内存页面对应的子指定页面链表的回收次序之前。
需要说明的是,如前述内容所示,内存页面的类型是由占用该内存页面的程序确定的,或者可以理解为是由占用该内存页面的程序的进程所处理数据的类型确定的。那么在不同的内存回收场景下,进行数据处理的优先级可能会有所差别,以便可以满足当前优先级较高的数据处理任务的需求。
例如,若当前的内存回收场景为网络通信场景,那么当前优先级较高的数据处理任务为进行网络通信的数据处理任务,在这种情况下,为了保证网络通信能够流畅进行,则电子设备可以尽可能更晚的对执行网络通信的程序所占用的内存页面进行回收,进而在网络通信场景下,实时进程类型的内存页面对应的子指定页面链表的回收次序可以相对与其他子指定页面链表的回收次序更加靠后。再例如,若当前的内存回收场景为UI操作场景,在这种情况下,为了保证UI操作界面能够及时的对用户的触控操作进行响应,UI进程类型的内存页面对应的子指定页面链表的回收次序可以相对与其他子指定页面链表的回收次序更加靠后。
那么作为一种方式,所述方法还包括:获取当前的内存回收场景;基于所述当前的内存回收场景,确定所述多个指定子类型内存页面各自对应的子指定页面链表的回收次序,并且,当前的内存回收场景对应进程占用的内存页面对应的子指定页面链表的回收次序,在所有其他子指定页面链表的回收次序之后。例如,若当前的内存回收场景为网络通信场景,那么当前的内存回收场景对应的进程为执行网络通信的进程。若当前的内存回收场景为UI操作场景,那么当前的内存回收场景对应的进程为执行UI操作界面中的数据处理的进程。
可选的,所述基于所述当前的内存回收场景,确定所述多个指定子类型内存页面各自对应的子指定页面链表的回收次序,包括:获取内存回收场景与回收顺序对应关系表,所述对应关系表中存储有每个内存回收场景中,每个所述子指定页面链表的回收次序;基于所述对应关系表以及当前的内存回收场景,确定所述多个指定子类型内存页面各自对应的子指定页面链表的回收次序。
本实施例提供的一种内存回收方法,通过前述方式可以使得在待转移页面中有指定类型内存页面的情况下,不会直接将该指定类型内存页面转移到非活跃页面链表中,而是会转移到回收次序在该非活跃页面链表之后的指定页面链表中,从而使得在非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前的情况下,在执行内存回收时,不会立刻将指定类型内存页面进行回收,进而有利于对指定类型内存页面进行保护,提升了内存回收过程中的灵活性。并且,在本实施例中指定类型内存页面包括多个指定子类型内存页面,所述指定页面链表包括所述多个指定子类型内存页面各自对应的子指定页面链表,从而使得在对待转移内存页面进行转移的过程中,可以更加细粒度的根据不同的指定子类型内存页面来进行转移,以便电子设备可以更加细粒度的进行不同类型的内存页面的回收,进一步的提升了内存回收过程中的灵活性。
请参阅图5,本申请实施例提供的一种内存回收方法,所述方法包括:
S310:响应于内存回收指令获取待转移内存页面,所述待转移内存页面为活跃页面链表中待转移出所述活跃页面链表的内存页面。
S320:获取所述待转移内存页面中指定类型内存页面。
S330:将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中。
S350:检测所述非活跃页面链表中是否有可回收的内存页面。
需要说明的是,对链表中的内存页面进行回收操作是需要消耗处理资源进行的,而若在链表中没有存储有内存页面的情况下,依然直接在链表中执行内存回收操作则会造成处理资源的浪费,进而为了避免造成处理资源浪费,则可以先检测非活跃页面链表中是否有可回收的内存页面,以便在非活跃页面链表中有可回收的内存页面的情况下,再在非活跃页面链表中执行内存页面回收。
S351:若所述非活跃页面链表中有可回收的内存页面,对所述非活跃页面链表中的内存页面进行内存回收。
S352:在对所述非活跃页面链表中的内存页面进行内存回收后,检测当前可用内存是否满足目标内存。
需要说明的是,目标内存表征的是电子设备运行过程中需求的最低内存,也可以表征为其他的运行所需的内存,进而在完成对非活跃页面链表中的内存页面进行回收后,且当前可用的内存已经满足目标内存的情况下,结束内存回收。
S353:若满足所述目标内存,结束内存回收。
S354:若不满足所述目标内存,检测所述指定页面链表中是否有可回收的内存页面。
S355:若所述指定页面链表中有可回收的内存页面,对所述指定页面链表中的内存页面进行内存回收。
其中,若所述非活跃页面链表中没有可回收的内存页面,执行S354。
需要说明的是,在指定页面链表包括有多个子指定页面链表的情况下,在执行S352之后,则会先检测多个子指定页面链表中,回收次序在最前的子指定页面链表中是否有可回收的内存页面,若有,则会对该回收次序在最前的子指定页面链表中内存页面进行回收,若没有,则会按照相同的方式对下一个子指定页面链表中内存页面进行检测以及回收。例如,若多个子指定页面链表包括子指定页面链表1以及子指定页面链表2,其中,子指定页面链表1为UI进程类型的内存页面对应的子指定页面链表,子指定页面链表2为实时进程类型的内存页面对应的子指定页面链表。那么可选的,在执行S352之后,可以先检测子指定页面链表1中是否有可回收的内存页面,若有则会直接对子指定页面链表1中的内存页面进行回收,并在完成对指定页面链表1中的内存页面进行回收后,会先检测当前可用内存是否满足目标内存,若满足则会停止内存回收,若不满足目标内存,则会继续检测子指定页面链表2中是否有可回收的内存页面,若有则会对指定页面链表2中的内存页面进行回收。
本实施例提供的一种内存回收方法,通过前述方式可以使得在待转移页面中有指定类型内存页面的情况下,不会直接将该指定类型内存页面转移到非活跃页面链表中,而是会转移到回收次序在该非活跃页面链表之后的指定页面链表中,从而使得在非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前的情况下,在执行内存回收时,不会立刻将指定类型内存页面进行回收,进而有利于对指定类型内存页面进行保护,提升了内存回收过程中的灵活性。并且,在本实施例中,在对非活跃页面链表或者指定页面链表进行内存页面回收之前都会先检测各自中是否由可回收的内存页面,以避免无效的内存回收动作。并且,在完成对回收次序在前的链表中的内存页面的回收后,会先确定当前可用的内存是否已经满足目标内存,进而使得电子设备可以提升整体的运行效率。
请参阅图6,本申请实施例提供的一种内存回收装置400,所述装置400包括:
待转移内存页面获取单元410,用于响应于内存回收指令获取待转移内存页面,所述待转移内存页面为活跃页面链表中待转移出所述活跃页面链表的内存页面。
指定类型内存页面获取单元420,用于获取所述待转移内存页面中指定类型内存页面。
内存页面转移单元430,用于将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中。
内存回收单元440,用于按照指定的回收顺序进行内存回收,在所述指定的回收顺序中,所述非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前。
作为一种方式,所述指定类型内存页面包括多个指定子类型内存页面,所述指定页面链表包括所述多个指定子类型内存页面各自对应的子指定页面链表。在这种方式下,内存页面转移单元430,具体用于将所述多个指定子类型内存页面转移到各自对应的子指定页面链表中。
可选的,所述多个指定子类型内存页面包括UI进程类型的内存页面,以及实时进程类型的内存页面;在所述回收顺序中,所述UI进程类型的内存页面对应的子指定页面链表的回收次序在所述实时进程类型的内存页面对应的子指定页面链表的回收次序之前。
作为一种方式,内存回收单元440,还用于获取当前的内存回收场景;基于所述当前的内存回收场景,确定所述多个指定子类型内存页面各自对应的子指定页面链表的回收次序。
可选的,内存回收单元440,具体用于获取内存回收场景与回收顺序对应关系表,所述对应关系表中存储有每个内存回收场景中,每个所述子指定页面链表的回收次序;基于所述对应关系表以及当前的内存回收场景,确定所述多个指定子类型内存页面各自对应的子指定页面链表的回收次序。
作为一种方式,内存回收单元440,具体用于对所述非活跃页面链表中的内存页面进行内存回收,并在对所述非活跃页面链表中的内存页面进行内存回收后,检测当前可用内存是否满足目标内存;若不满足所述目标内存,对所述指定页面链表中的内存页面进行内存回收。
可选的,内存回收单元440,还具体用于检测所述非活跃页面链表中是否有可回收的内存页面;若所述非活跃页面链表中有可回收的内存页面,执行所述对所述非活跃页面链表中的内存页面进行内存回收,若所述非活跃页面链表中没有可回收的内存页面,执行所述对所述指定页面链表中的内存页面进行内存回收;检测所述指定页面链表中是否有可回收的内存页面;若所述指定页面链表中有可回收的内存页面,执行所述对所述指定页面链表中的内存页面进行内存回收。
本申请提供的一种内存回收装置,在响应于内存回收指令并获取待转移内存页面后,会获取所述待转移内存页面中指定类型内存页面,然后将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中,并按照指定的回收顺序进行内存回收。从而通过前述方式可以使得在待转移页面中有指定类型内存页面的情况下,不会直接将该指定类型内存页面转移到非活跃页面链表中,而是会转移到回收次序在该非活跃页面链表之后的指定页面链表中,从而使得在非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前的情况下,在执行内存回收时,不会立刻将指定类型内存页面进行回收,进而有利于对指定类型内存页面进行保护,提升了内存回收过程中的灵活性。
需要说明的是,本申请中装置实施例与前述方法实施例是相互对应的,装置实施例中具体的原理可以参见前述方法实施例中的内容,此处不再赘述。
下面将结合图7对本申请提供的一种电子设备进行说明。
请参阅图7,基于上述的内存回收方法、装置,本申请实施例还提供的另一种可以执行前述内存回收方法的电子设备100。电子设备100包括相互耦合的一个或多个(图中仅示出一个)处理器102、存储器104以及网络模块106。其中,该存储器104中存储有可以执行前述实施例中内容的程序,而处理器102可以执行该存储器104中存储的程序。
其中,处理器102可以包括一个或者多个处理核。处理器102利用各种接口和线路连接整个电子设备100内的各个部分,通过运行或执行存储在存储器104内的指令、程序、代码集或指令集,以及调用存储在存储器104内的数据,执行电子设备100的各种功能和处理数据。可选地,处理器102可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(ProgrammableLogic Array,PLA)中的至少一种硬件形式来实现。处理器102可集成中央处理器(CentralProcessing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器102中,单独通过一块通信芯片进行实现。
存储器104可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器104可用于存储指令、程序、代码、代码集或指令集。存储器104可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储终端100在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
所述网络模块106用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯,例如和音频播放设备进行通讯。所述网络模块106可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(SIM)卡、存储器等等。所述网络模块106可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。例如,网络模块106可以与基站进行信息交互。
请参考图8,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质800中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质800可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质800包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质800具有执行上述方法中的任何方法步骤的程序代码810的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码810可以例如以适当形式进行压缩。
本申请提供的一种内存回收方法、装置以及电子设备,在响应于内存回收指令并获取待转移内存页面后,会获取所述待转移内存页面中指定类型内存页面,然后将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到所述非活跃页面链表中,并按照指定的回收顺序进行内存回收。从而通过前述方式可以使得在待转移页面中有指定类型内存页面的情况下,不会直接将该指定类型内存页面转移到非活跃页面链表中,而是会转移到回收次序在该非活跃页面链表之后的指定页面链表中,从而使得在非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前的情况下,在执行内存回收时,不会立刻将指定类型内存页面进行回收,进而有利于对指定类型内存页面进行保护,以避免指定类型内存页面被过早进行回收,提升了内存回收过程中的灵活性。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (10)

1.一种内存回收方法,其特征在于,所述方法包括:
响应于内存回收指令获取待转移内存页面,所述待转移内存页面为活跃页面链表中待转移出所述活跃页面链表的内存页面;
对所述待转移内存页面中的每个内存页面对应的类型进行检测,以获取所述待转移内存页面中指定类型内存页面;
将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到非活跃页面链表中;
按照指定的回收顺序进行内存回收,在所述指定的回收顺序中,所述非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前。
2.根据权利要求1所述的方法,其特征在于,所述指定类型内存页面包括多个指定子类型内存页面,所述指定页面链表包括所述多个指定子类型内存页面各自对应的子指定页面链表;所述将所述指定类型内存页面转移到指定页面链表中,包括:
将所述多个指定子类型内存页面转移到各自对应的子指定页面链表中。
3.根据权利要求2所述的方法,其特征在于,所述多个指定子类型内存页面包括UI进程类型的内存页面,以及实时进程类型的内存页面;在所述回收顺序中,所述UI进程类型的内存页面对应的子指定页面链表的回收次序在所述实时进程类型的内存页面对应的子指定页面链表的回收次序之前。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
获取当前的内存回收场景;
基于所述当前的内存回收场景,确定所述多个指定子类型内存页面各自对应的子指定页面链表的回收次序。
5.根据权利要求4所述的方法,其特征在于,所述基于所述当前的内存回收场景,确定所述多个指定子类型内存页面各自对应的子指定页面链表的回收次序,包括:
获取内存回收场景与回收顺序对应关系表,所述对应关系表中存储有每个内存回收场景中,每个所述子指定页面链表的回收次序;
基于所述对应关系表以及当前的内存回收场景,确定所述多个指定子类型内存页面各自对应的子指定页面链表的回收次序。
6.根据权利要求1所述的方法,其特征在于,所述按照指定的回收顺序进行内存回收,包括:
对所述非活跃页面链表中的内存页面进行内存回收,并在对所述非活跃页面链表中的内存页面进行内存回收后,检测当前可用内存是否满足目标内存;
若不满足所述目标内存,对所述指定页面链表中的内存页面进行内存回收。
7.根据权利要求6所述的方法,其特征在于,所述对所述非活跃页面链表中的内存页面进行内存回收之前还包括:
检测所述非活跃页面链表中是否有可回收的内存页面;
若所述非活跃页面链表中有可回收的内存页面,执行所述对所述非活跃页面链表中的内存页面进行内存回收,若所述非活跃页面链表中没有可回收的内存页面,执行所述对所述指定页面链表中的内存页面进行内存回收;
所述对所述指定页面链表中的内存页面进行内存回收之前,还包括:
检测所述指定页面链表中是否有可回收的内存页面;
若所述指定页面链表中有可回收的内存页面,执行所述对所述指定页面链表中的内存页面进行内存回收。
8.一种内存回收装置,其特征在于,所述装置包括:
待转移内存页面获取单元,用于响应于内存回收指令获取待转移内存页面,所述待转移内存页面为活跃页面链表中待转移出所述活跃页面链表的内存页面;
指定类型内存页面获取单元,用于对所述待转移内存页面中的每个内存页面对应的类型进行检测,以获取所述待转移内存页面中指定类型内存页面;
内存页面转移单元,用于将所述指定类型内存页面转移到指定页面链表中,将所述待转移内存页面中除所述指定类型内存页面以外的内存页面转移到非活跃页面链表中;
内存回收单元,用于按照指定的回收顺序进行内存回收,在所述指定的回收顺序中,所述非活跃页面链表对应的回收次序在所述指定页面链表的回收次序之前。
9.一种电子设备,其特征在于,包括一个或多个处理器以及存储器;一个或多个程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有程序代码,其中,在所述程序代码被处理器运行时执行权利要求1-7任一所述的方法。
CN202010904981.8A 2020-09-01 2020-09-01 内存回收方法、装置以及电子设备 Active CN112052089B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010904981.8A CN112052089B (zh) 2020-09-01 2020-09-01 内存回收方法、装置以及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010904981.8A CN112052089B (zh) 2020-09-01 2020-09-01 内存回收方法、装置以及电子设备

Publications (2)

Publication Number Publication Date
CN112052089A CN112052089A (zh) 2020-12-08
CN112052089B true CN112052089B (zh) 2023-03-28

Family

ID=73607256

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010904981.8A Active CN112052089B (zh) 2020-09-01 2020-09-01 内存回收方法、装置以及电子设备

Country Status (1)

Country Link
CN (1) CN112052089B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116107925B (zh) * 2023-04-10 2023-09-26 阿里云计算有限公司 数据存储单元处理方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108205475A (zh) * 2017-08-25 2018-06-26 珠海市魅族科技有限公司 内存管理方法、终端设备、计算机装置以及可读存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7673105B2 (en) * 2005-06-27 2010-03-02 Ab Inition Technology LLC Managing memory pages
CN105068941A (zh) * 2015-07-31 2015-11-18 浪潮电子信息产业股份有限公司 一种缓存页面替换方法及装置
CN107885666B (zh) * 2016-09-28 2021-07-20 华为技术有限公司 一种内存管理方法和装置
CN106843756B (zh) * 2017-01-13 2019-12-31 中国科学院信息工程研究所 基于页面分类的内存页面回收方法及系统
CN108664411A (zh) * 2018-05-03 2018-10-16 晶晨半导体(上海)股份有限公司 一种内存链表及内存管理的优化方法
US10977172B2 (en) * 2018-06-03 2021-04-13 Apple Inc. Memory page reclamation in a user idle mode
CN111274039B (zh) * 2020-02-14 2023-12-08 Oppo广东移动通信有限公司 内存回收方法、装置、存储介质及电子设备
CN111352861B (zh) * 2020-02-19 2023-09-29 Oppo广东移动通信有限公司 内存压缩方法、装置及电子设备

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108205475A (zh) * 2017-08-25 2018-06-26 珠海市魅族科技有限公司 内存管理方法、终端设备、计算机装置以及可读存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Minimizing the garbage collection time in flash memory using efficient data allocation scheme;Amir Rizaan Rahiman等;《 TENCON 2009 - 2009 IEEE Region 10 Conference》;20100122;第1-5页 *
基于新型非易失性存储器的移动终端性能优化研究;钟刊;《中国博士学位论文全文数据库 信息科技辑》;20190415;I137-5 *

Also Published As

Publication number Publication date
CN112052089A (zh) 2020-12-08

Similar Documents

Publication Publication Date Title
CN110764906B (zh) 内存回收处理方法、装置、电子设备以及存储介质
CN110096336B (zh) 数据监控方法、装置、设备和介质
CN110727606A (zh) 内存回收方法、装置以及电子设备
CN110727607B (zh) 内存回收方法、装置以及电子设备
CN111984413A (zh) 内存回收方法、装置、电子设备及存储介质
CN110727605B (zh) 内存回收方法、装置以及电子设备
CN112732628A (zh) 核间数据处理方法、系统、片上系统以及电子设备
CN110704189A (zh) 内存回收方法、装置以及电子设备
CN111273769B (zh) 一种设备控制方法、装置、电子设备及存储介质
CN111274039A (zh) 内存回收方法、装置、存储介质及电子设备
CN112052089B (zh) 内存回收方法、装置以及电子设备
CN115421907A (zh) 内存回收方法、装置、电子设备及存储介质
CN108205501B (zh) 内存回收方法及装置、计算机装置及计算机可读存储介质
CN110737606B (zh) 内存回收处理方法、装置、电子设备以及存储介质
CN113392037A (zh) 内存回收方法、装置、计算机设备和存储介质
CN110955614B (zh) 文件缓存的回收方法、装置、存储介质及终端
CN115587049A (zh) 内存回收方法、装置、电子设备及存储介质
CN108228472B (zh) 终端设备控制方法及装置、终端设备及计算机可读存储介质
CN113031955A (zh) 应用程序预编译的方法、装置以及电子设备
CN111562983B (zh) 内存优化方法、装置、电子设备及存储介质
CN116610648A (zh) 日志保存方法、装置、电子设备及存储介质
CN112099736A (zh) 数据存储方法、装置、电子设备及存储介质
CN107608498B (zh) 应用程序管理方法及终端设备
CN112000462A (zh) 一种基于共享外设资源的数据处理方法及装置
CN114303130A (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