CN113392037A - 内存回收方法、装置、计算机设备和存储介质 - Google Patents
内存回收方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN113392037A CN113392037A CN202010170565.XA CN202010170565A CN113392037A CN 113392037 A CN113392037 A CN 113392037A CN 202010170565 A CN202010170565 A CN 202010170565A CN 113392037 A CN113392037 A CN 113392037A
- Authority
- CN
- China
- Prior art keywords
- memory
- memory page
- recovered
- linked list
- application
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 482
- 238000000034 method Methods 0.000 title claims abstract description 113
- 238000011084 recovery Methods 0.000 title claims abstract description 92
- 238000004590 computer program Methods 0.000 claims description 25
- 238000004891 communication Methods 0.000 claims description 6
- 238000012544 monitoring process Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 5
- 238000005192 partition Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- JHIVVAPYMSGYDF-UHFFFAOYSA-N cyclohexanone Chemical compound O=C1CCCCC1 JHIVVAPYMSGYDF-UHFFFAOYSA-N 0.000 description 2
- 238000004064 recycling Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0882—Page mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5021—Priority
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请提供了一种内存回收方法、装置、计算机设备和存储介质。所述方法包括:接收内存回收指令;所述内存回收指令携带有链表标识;根据所述链表标识获取内存回收所对应的目标链表;扫描所述目标链表中多个内存页的标识位信息;根据所述标识位信息确定所述内存回收的待回收内存页;所述待回收内存页包括处于后台应用状态的应用程序的内存页;对所述待回收内存页进行回收。采用本方法能够内存回收的准确性。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种内存回收方法、装置、计算机设备和存储介质。
背景技术
在终端的运行过程中,为了加快对磁盘进行读或写操作的速度,操作***内核在对磁盘进行读或写操作时,将大量的数据缓存在内存中。但是,终端的内存空间有限,将大量数据缓存在内存中而不能及时释放,会造成内存分配不足导致操作***运行异常,因此,需要操作***对内存进行回收。
目前,传统的内存回收机制是对匿名链表或文件链表中的内存页,按照最近最少使用的内存页优先回收的策略进行回收。此时回收到的内存页有可能是前台应用程序的内存,也有可能是后台应用程序的内存,如果此时回收到的内存页是前台应用程序的内存,则会提高前台应用程序卡顿的风险。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高内存回收准确性的内存回收方法、装置、计算机设备和存储介质。
一种内存回收方法,所述方法包括:
接收内存回收指令;所述内存回收指令携带有链表标识;
根据所述链表标识获取内存回收所对应的目标链表;
扫描所述目标链表中多个内存页的标识位信息;
根据所述标识位信息确定所述内存回收的待回收内存页;所述待回收内存页包括处于后台应用状态的应用程序的内存页;
对所述待回收内存页进行回收。
在一个实施例中,所述标识位信息包括应用状态信息;所述方法还包括:
调用进程管理服务对应用程序的应用状态进行监测;
当所述应用程序的应用状态发生切换时,根据所述应用状态更新所述应用程序对应内存页的所述应用状态信息;
根据更新后的应用状态信息确定是否对所述内存页进行回收。
在一个实施例中,所述根据所述应用状态更新所述应用程序对应内存页的应用状态信息包括:
将切换状态前后分别对应的进程的进程标识传输至内核空间;
通过所述内核空间扫描每个所述进程标识对应的内存页;
根据所述进程标识对应的应用状态更新所述内存页的应用状态信息。
在一个实施例中,所述内存回收指令还携带有待回收内存数;所述扫描所述目标链表的内存页,根据所述内存页的标识位信息确定所述目标链表的待回收内存页包括:
将位于所述目标链表最后顺序位的内存页作为当前内存页;
当所述当前内存页的标识位信息与对应的状态阈值相同时,将所述当前内存页确定为待回收内存页;
按逆序获取下一顺序内存页,将下一顺序内存页作为当前内存页,返回当所述当前内存页的标识位信息与对应的状态阈值相同时,将所述当前内存页确定为待回收内存页的步骤,直至达到待回收内存数时,得到所述内存回收的所有待回收内存页。
在一个实施例中,所述标识位信息包括应用状态信息、被访问信息和链表状态信息;所述当所述当前内存页的标识位信息与对应的状态阈值相同时,将所述当前内存页确定为待回收内存页包括:
当所述当前内存页的所述应用状态信息、所述被访问信息以及所述链表状态信息分别与各自对应的状态阈值相同时,将所述当前内存页确定为待回收内存页。
在一个实施例中,所述方法还包括:
对应用程序设置对应的资源优先级;
当检测到后台应用程序与前台应用程序具有通信机制和同步机制中至少一种,将所述后台应用程序作为被依赖应用程序;
更新所述被依赖应用程序对应的内存页的应用状态信息。
一种内存回收装置,所述装置包括:
指令接收模块,用于接收内存回收指令;所述内存回收指令携带有链表标识;
链表获取模块,用于根据所述链表标识获取内存回收所对应的目标链表;
内存页扫描模块,用于扫描所述目标链表中多个内存页的标识位信息;
内存回收模块,用于根据所述标识位信息确定所述内存回收的待回收内存页;对所述待回收内存页进行回收。
在一个实施例中,所述装置还包括应用状态监测模块,用于调用进程管理服务对应用程序的应用状态进行监测;当应用程序的应用状态发生切换时,根据应用状态更新应用程序对应内存页的应用状态信息;根据更新后的应用状态信息确定是否对内存页进行回收。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述内存回收方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述内存回收方法的步骤。
上述内存回收方法、装置、计算机设备和存储介质,当接收到内存回收指令时,根据内存回收指令所携带的链表标识确定目标链表,进而对目标链表中的内存页进行扫描,得到标识位信息,从而通过标识位信息确定待回收内存页,通过标识位信息可以更好的判断对应内存页是前台应用程序的内存页还是后台应用程序的内存页,即该内存页是属于后台进程还是前台进程,避免在内存回收过程中将属于前台程的内存页误回收,提高内存回收的准确性。
附图说明
图1为一个实施例中内存回收方法的应用场景图;
图2为一个实施例中内存回收方法的流程示意图;
图3为一个实施例中内存回收装置的结构框图;
图4为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的内存回收方法,可以应用于如图1所示的应用环境中。终端102接收内存回收指令,并根据内存回收指令携带的链表标识获取对应的目标链表,进而扫描目标链表中按序排列的多个内存页的应用状态信息,根据扫描得到的应用状态信息确定内存回收的待回收内存页,根据确定的待回收内存页进行回收。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。
在一个实施例中,如图2所示,提供了一种内存回收方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:
步骤S202,接收内存回收指令;内存回收指令携带有链表标识。
其中,内存回收指令包括链表标识和待回收内存数。链表标识用于区分各链表,链表标识可以是链表地址、也可以采用数字、字符和符号中的一种或多种组合。待回收内存数包括终端回收的内存页的数量或空间,也可以是终端至少需要回收的内存页的数量或空间,也可以是终端最多需要回收的内存页的数量或空间。
由于终端的内存空间有限,将大量数据缓存在内存中而不能及时释放,会造成内存分配不足导致操作***运行异常。当满足一下情况中至少一种时,终端接收到内存回收指令:当前可用内存值低于处于前台应用状态的应用程序运行所需内存值;处于后台应用状态的应用程序的内存值之和达到条件阈值;终端处于待机状态。
(1)当前可用内存值低于处于前台应用状态的应用程序运行所需内存值。终端可以获取前台应用程序运行所需的内存资源值,当终端当前可用内存资源值低于前台应用程序运行所需的内存资源值时,终端通过内核空间传输内存回收指令至用户空间,用户空间根据接收到的内存回收指令回收内存资源。
(2)处于后台应用状态的应用程序的内存值之和达到条件阈值。终端可获取各个后台应用程序所占用的内存资源值的总和。当获取到的后台应用程序的内存资源值的总和大于或等于条件阈值时,终端通过内核空间传输内存回收指令至用户空间,用户空间根据接收到的内存回收指令回收内存资源。其中条件阈值可以终端预先设置的数,也可以是用户设置的数,比如,条件阈值可以是终端总内存资源值的70%。
(3)终端处于待机状态。当终端处于待机状态时,终端通过内核空间传输内存回收指令至终端的用户空间,用户空间根据接收到的内存回收指令回收内存资源。其中待机状态可以是终端的屏幕处于熄灭时的状态。
步骤S204,根据链表标识获取内存回收所对应的目标链表。
其中,链表是一种内存上非连续、非顺序的存储结构,目标链表可以是LRU(LeastRecently Used,最近最少使用)链表。LRU链表包括:非活跃的匿名页面链表(INACTIVE_ANON),用于保存所有正在使用的非活跃的匿名页面;活跃的匿名页面链表(ACTIVE_ANON),用于保存所有正在使用的活跃的匿名页面;非活跃的文件页面链表(INACTIVE_FILE),用于保存所有正在使用的非活跃的文件页面;活跃的文件页面链表(ACTIVE_FILE),用于保存所有正在使用的活跃的文件页面。
具体地,终端根据内存回收指令所携带的链表标识链接到对应的目标链表,根据待回收内存数对目标链表进行内存回收。终端进行内存回收时,一般先从非活跃的匿名链表开始进行内存回收,其次是从非活跃的文件页面链表。对于活跃的链表一般不进行回收,除非内存回收指令指定了对活跃链表进行回收。在LRU链表中,链为是最近最不常使用的应用程序的内存页,链头是最近最常使用的内存页。
步骤S206,扫描目标链表中多个内存页的标识位信息。
其中,内存页是指内存的物理页面,是内存的最小管理单元。内存页的标识位信息包括应用状态信息、被访问信息以及链表状态信息。
其中,应用状态信息是当应用程序的应用状态发生切换时,根据应用状态所记录的信息,应用状态包括前台应用状态和后台应用状态。应用状态信息用于区分应用程序的进程是处于前台应用状态,还是处于后台应用状态。应用状态信息可以采用预设的数值,比如“1”标识应用程序处于前台应用状态,“0”表示应用程序处于后台应用状态。
被访问信息是指该内存页在当前时刻是否被访问。例如,如果被访问,该被访问信息为“1”,否则,该被访问信息为“0”,而且,在进行内存回收时,当终端到扫描到内存页的被访问信息是“1”时,将该内存页移动到该链表的链头位置。
链表状态信息是指该内存对应的链表是活跃链表还是非活跃链表。标识位信息可以采用数字、字符和符号中的一种或多种组合,应用状态信息、被访问信息以及链表状态信息可以相同,也可以不相同。
终端对目标链表进行扫描,从目标链表的链尾,即最后顺序位的内存页开始扫描,并按照从链尾到链头的顺序对目标链表的多个内存页进行扫描。在扫描时,终端获取当前扫描的内存页的应用状态信息、被访问信息以及链表状态信息,进而根据扫描到的信息判断是否需要对该内存页进行回收。
在其中一个实施例中,上述方法还包括:对应用程序设置对应的资源优先级;当检测到后台应用程序与前台应用程序具有通信机制和同步机制中至少一种,将后台应用程序作为被依赖应用程序;更新被依赖应用程序对应的内存页的应用状态信息。
具体地,终端对各个应用程序设置资源优先级别,其中,终端可根据应用程序的类型、应用程序的使用频次等对应应用程序设定的资源优先级。该资源优先级是指对应用程序的可使用资源的限制等级,根据资源优先级别不同,应用程序可使用的资源的限制等级也不同。应用程序的资源优先级别越高,对应应用程序的可使用的资源限制越少。其中,可使用资源包括CPU资源、内存资源、I/O资源和网络资源。当终端检测到后台应用程序与前台应用程序具有通信机制和同步机制中的至少一种时,说明此时前台应用程序需要调用后台应用程序的数据才能顺利执行,因此该后台应用程序作为被依赖应用程序,此时,也不能对该后台应用程序的内存页进行回收。终端将被依赖应用程序所对应的内存页的应用状态信息从第一阈值更新为第四阈值,根据第四阈值确定该被依赖应用程序的内存页不需要被回收。本实施例中,当检测到后台应用程序是前台应用程序所依赖的应用程序时,通过更新被依赖应用程序的内存页的应用状态信息,以此避免被依赖应用程序的内存回收,终端前台应用程序的顺序执行。
步骤S208,根据应用状态信息确定内存回收的待回收内存页;待回收内存页包括处于后台应用状态的应用程序的内存页。
其中,待回收内存页是指后台应用程序所对应的内存页。具体地,终端根据扫描得到的内存页的应用状态信息、被访问信息以及链表状态信息共同确定是否需要对该内存页进行回收。当应用状态信息表征该内存页对应的应用状态是后台进程时、被访问信息表征该内存页在当前时刻没有被访问、且链表状态为非活跃状态时,终端可以将该内存页确定为待回收内存页。
步骤S210,对待回收内存页进行回收。
具体地,终端对扫描得到的待回收内存页进行回收,得到空闲内存页。终端将待回收内存回写至交换分区,以便于需要待回收内存页中的数据时可以访问交换分区重新读取。终端在将待回收内存页中的数据回写至交换分区后,删除目标链表中的待回收内存页,得到空闲内存页。其中,空闲内存页是指没有被应用程序所占用的物理页面。
在上述实施例中,当接收到内存回收指令时,根据内存回收指令所携带的链表标识确定目标链表,进而对目标链表中的内存页进行扫描,得到标识位信息,从而通过标识位信息确定待回收内存页,通过标识位信息可以更好的判断对应内存页是属于后台进程、还是前台进程,避免在内存回收过程中将属于前台进程的内存页误回收,提高内存回收的准确性。
在一个实施例中,标识位信息包括应用状态信息;方法还包括:调用进程管理服务对应用程序的应用状态进行监测;当应用程序的应用状态发生切换时,根据应用状态更新应用程序对应内存页的应用状态信息;根据更新后的应用状态信息确定是否对内存页进行回收。
其中,进程管理服务(Activity Manager Service,AMS)用于管理进程对象的服务。
具体地,终端调用进程管理服务监控各个应用程序的应用状态,判断应用状态是位于前台应用状态还是后台应用状态,其中应用状态包括前台应用状态和后台应用状态。当进程管理服务监测到应用程序从前台应用状态切换到后台应用状态时,或者监测到应用程序从后台应用状态切换到前台应用状态时,此时终端根据应用状态更新对应应用程序的内存页的应用状态信息,进而根据更新后的应用状态信息确定是否需要对该内存页进行回收。
在其中一个实施例中,根据应用状态更新应用程序对应内存页的应用状态信息包括:将切换状态前后分别对应的进程的进程标识传输至内核空间;通过内核空间扫描每个进程标识对应的内存页;根据进程标识对应的应用状态更新内存页的应用状态信息。
具体地,一旦进程管理服务监测到应用程序的应用状态发生切换时,终端通过进程管理服务将切换状态前,该应用程序对应的所有进程的进程标识;以及切换状态后,该应用程序对应的所有进程的进程标识以及对应的应用状态共同传输至终端的内核空间。内核空间存储接收到的进程标识以及对应的应用状态,进一步,通过内核空间扫描存储的每个进程标识所对应的内存页,并根据进程标识对应的应用状态更新对应内存页的应用状态信息。
比如,当前应用程序的应用状态是前台应用,对应的进程都是前台进程;之后,该应用程序从前台应用切换到后台应用,对应的前台进程转变为后台进程,此时进程管理服务将该应用程序的前台进程标识和后台进程标识及其对应的应用状态共同传输给内核空间,内核空间扫描每个进程标识,根据每个进程标识对应的应用状态更新内存页的应用状态信息。
在其中一个实施例中,在进程管理服务首次监测到该应用程序的应用状态发生切换时,还包括:内核空间存储接收到的进程标识以及对应的应用状态,通过内核空间扫描存储的每个进程标识所对应的内存页,并在对应内存页的标识位信息中添加应用状态信息,根据应用状态记录对应内存页的应用状态信息。
在本实施例中,通过进程管理服务对应用程序的应用状态进行监测,并在应用状态发生切换时,在应用程序对应的内存页的标识位信息中添加应用状态信息,并根据切换状态记录或更新相应的应用状态信息,从而在执行内存回收指令时,可以有效的避免这种应用程序从后台应用突然切换到前台应用,终端极有可能将该应用程序仍然作为后台应用进行内存页回收由此导致该应用程序的卡顿的问题。因此,本实施例提高了内存回收的准确性。
在一个实施例中,内存回收指令还携带有待回收内存数;扫描目标链表的内存页,根据内存页的标识位信息确定目标链表的待回收内存页包括:将位于目标链表最后顺序位的内存页作为当前内存页;当当前内存页的标识位信息与对应的状态阈值相同时,将当前内存页确定为待回收内存页;按逆序获取下一顺序内存页,将下一顺序内存页作为当前内存页,返回当当前内存页的标识位信息与对应的状态阈值相同时,将当前内存页确定为待回收内存页的步骤,直至达到待回收内存数时,得到内存回收的所有待回收内存页。
其中,状态阈值用于表征标识位信息是否符合待回收内存页的参数。
具体地,终端将位于目标链表最后顺序位,即位于目标链表的链尾的内存页作为当前内存页,扫描当前内存页,当该当前内存页的标识位信息与对应的状态阈值相同时,确定该当前内存页为待回收内存页。按照从链尾到链头的顺序获取下一顺序内存页,将获取到的下一顺序内存也作为当前内存页,终端扫描当前内存页,当该当前内存页的标识位信息与对应的状态阈值相同时,确定该当前内存页为待回收内存页,直至达到待回收内存数时,得到此次内存回收的所有待回收内存页。
在其中一个实施例中,标识位信息包括应用状态信息、被访问信息和链表状态信息;当当前内存页的标识位信息与对应的状态阈值相同时,将当前内存页确定为待回收内存页包括:当当前内存页的应用状态信息、被访问信息以及链表状态信息分别与各自对应的状态阈值相同时,将当前内存页确定为待回收内存页。
具体地,状态阈值包括第一阈值、第二阈值和第三阈值。当当前内存页的应用状态信息与第一阈值相同、被访问信息与第二阈值相同且链表状态信息与第三阈值相同时,将当前内存页确定为待回收内存页。其中,状态阈值包括第一阈值、第二阈值和第三阈值,彼此之间可以相同,也可以不同。每个阈值可以采用数字、字符和符号中的一种或多种组合来表示。第一阈值、第二阈值和第三阈值用于表征对应内存页符合待回收内存页的参数。
在本实施例中,通过扫描目标链表的内存页,得到内存页的标识位信息,根据标识位信息与状态阈值确定待回收内存页,并按照逆序获取下一顺序内存页,进而实现内存回收,提高内存回收的效率和准确性。
应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图3所示,提供了一种内存回收装置300,包括:指令接收模块302、链表获取模块304、内存页扫描模块306和内存回收模块308,其中:
指令接收模块302,用于接收内存回收指令;内存回收指令携带有链表标识。
链表获取模块304,用于根据链表标识获取内存回收所对应的目标链表。
内存页扫描模块306,用于扫描目标链表中多个内存页的标识位信息。
内存回收模块308,用于根据标识位信息确定内存回收的待回收内存页;待回收内存页包括处于后台应用状态的应用程序的内存页;对待回收内存页进行回收。
在一个实施例中,上述装置还包括指令生成模块,用于当满足以下情况中至少一种时,接收到内存回收指令:当前可用内存值低于前台应用程序运行所需内存值;后台应用程序的已用内存值之和达到条件阈值;终端处于待机状态。
在一个实施例中,上述装置还包括应用状态监测模块,用于调用进程管理服务对应用程序的应用状态进行监测;当应用程序的应用状态发生切换时,根据应用状态更新应用程序对应内存页的应用状态信息;根据更新后的应用状态信息确定是否对内存页进行回收。
在一个实施例中,上述应用状态监测模块还用于将切换状态前后分别对应的进程的进程标识传输至内核空间;通过内核空间扫描每个进程标识对应的内存页;根据进程标识对应的应用状态更新内存页的应用状态信息。
在一个实施例中,上述内存回收模块还用于将位于目标链表最后顺序位的内存页作为当前内存页;当当前内存页的标识位信息与对应的状态阈值相同时,将当前内存页确定为待回收内存页;按逆序获取下一顺序内存页,将下一顺序内存页作为当前内存页,返回当当前内存页的标识位信息与对应的状态阈值相同时,将当前内存页确定为待回收内存页的步骤,直至达到待回收内存数时,得到内存回收的所有待回收内存页。
在一个实施例中,上述内存回收模块还用于当当前内存页的应用状态信息、被访问信息以及链表状态信息分别与各自对应的状态阈值相同时,将当前内存页确定为待回收内存页。
在本实施例中,当接收到内存回收指令时,根据内存回收指令所携带的链表标识确定目标链表,进而对目标链表中的内存页进行扫描,得到标识位信息,从而通过标识位信息确定待回收内存页,通过标识位信息可以更好的判断对应内存页是属于后台进程、还是前台进程,避免在内存回收过程中将属于前台进程的内存页误回收,提高内存回收的准确性。
关于内存回收装置的具体限定可以参见上文中对于内存回收方法的限定,在此不再赘述。上述内存回收装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图4所示。该计算机设备包括通过***总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种内存回收方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:接收内存回收指令;内存回收指令携带有链表标识;根据链表标识获取内存回收所对应的目标链表;扫描目标链表中多个内存页的标识位信息;根据标识位信息确定内存回收的待回收内存页;待回收内存页包括处于后台应用状态的应用程序的内存页;对待回收内存页进行回收。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:当前可用内存值低于前台应用程序运行所需内存值;后台应用程序的已用内存值之和达到条件阈值;终端处于待机状态。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:调用进程管理服务对应用程序的应用状态进行监测;当应用程序的应用状态发生切换时,根据应用状态更新应用程序对应内存页的应用状态信息;根据更新后的应用状态信息确定是否对内存页进行回收。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:将切换状态前后分别对应的进程的进程标识传输至内核空间;通过内核空间扫描每个进程标识对应的内存页;根据进程标识对应的应用状态更新内存页的应用状态信息。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:将位于目标链表最后顺序位的内存页作为当前内存页;当当前内存页的标识位信息与对应的状态阈值相同时,将当前内存页确定为待回收内存页;按逆序获取下一顺序内存页,将下一顺序内存页作为当前内存页,返回当当前内存页的标识位信息与对应的状态阈值相同时,将当前内存页确定为待回收内存页的步骤,直至达到待回收内存数时,得到内存回收的所有待回收内存页。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:当当前内存页的应用状态信息、被访问信息以及链表状态信息分别与各自对应的状态阈值相同时,将当前内存页确定为待回收内存页。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:对应用程序设置对应的资源优先级;当检测到后台应用程序与前台应用程序具有通信机制和同步机制中至少一种,将后台应用程序作为被依赖应用程序;更新被依赖应用程序对应的内存页的应用状态信息。
在本实施例中,当接收到内存回收指令时,根据内存回收指令所携带的链表标识确定目标链表,进而对目标链表中的内存页进行扫描,得到标识位信息,从而通过标识位信息确定待回收内存页,通过标识位信息可以更好的判断对应内存页是属于后台进程、还是前台进程,避免在内存回收过程中将属于前台进程的内存页误回收,提高内存回收的准确性。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:接收内存回收指令;内存回收指令携带有链表标识;根据链表标识获取内存回收所对应的目标链表;扫描目标链表中多个内存页的标识位信息;根据标识位信息确定内存回收的待回收内存页;待回收内存页包括处于后台应用状态的应用程序的内存页;对待回收内存页进行回收。
在一个实施例中,计算机程序被处理器执行时实现以下步骤:当前可用内存值低于前台应用程序运行所需内存值;后台应用程序的已用内存值之和达到条件阈值;终端处于待机状态。
在一个实施例中,计算机程序被处理器执行时实现以下步骤:调用进程管理服务对应用程序的应用状态进行监测;当应用程序的应用状态发生切换时,根据应用状态更新应用程序对应内存页的应用状态信息;根据更新后的应用状态信息确定是否对内存页进行回收。
在一个实施例中,计算机程序被处理器执行时实现以下步骤:将切换状态前后分别对应的进程的进程标识传输至内核空间;通过内核空间扫描每个进程标识对应的内存页;根据进程标识对应的应用状态更新内存页的应用状态信息。
在一个实施例中,计算机程序被处理器执行时实现以下步骤:将位于目标链表最后顺序位的内存页作为当前内存页;当当前内存页的标识位信息与对应的状态阈值相同时,将当前内存页确定为待回收内存页;按逆序获取下一顺序内存页,将下一顺序内存页作为当前内存页,返回当当前内存页的标识位信息与对应的状态阈值相同时,将当前内存页确定为待回收内存页的步骤,直至达到待回收内存数时,得到内存回收的所有待回收内存页。
在一个实施例中,计算机程序被处理器执行时实现以下步骤:当当前内存页的应用状态信息、被访问信息以及链表状态信息分别与各自对应的状态阈值相同时,将当前内存页确定为待回收内存页。
在一个实施例中,计算机程序被处理器执行时实现以下步骤:对应用程序设置对应的资源优先级;当检测到后台应用程序与前台应用程序具有通信机制和同步机制中至少一种,将后台应用程序作为被依赖应用程序;更新被依赖应用程序对应的内存页的应用状态信息。
在本实施例中,当接收到内存回收指令时,根据内存回收指令所携带的链表标识确定目标链表,进而对目标链表中的内存页进行扫描,得到标识位信息,从而通过标识位信息确定待回收内存页,通过标识位信息可以更好的判断对应内存页是属于后台进程、还是前台进程,避免在内存回收过程中将属于前台进程的内存页误回收,提高内存回收的准确性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种内存回收方法,所述方法包括:
接收内存回收指令;所述内存回收指令携带有链表标识;
根据所述链表标识获取内存回收所对应的目标链表;
扫描所述目标链表中多个内存页的标识位信息;
根据所述标识位信息确定所述内存回收的待回收内存页;所述待回收内存页包括处于后台应用状态的应用程序的内存页;
对所述待回收内存页进行回收。
2.根据权利要求1所述的方法,其特征在于,所述标识位信息包括应用状态信息;所述方法还包括:
调用进程管理服务对应用程序的应用状态进行监测;
当所述应用程序的应用状态发生切换时,根据所述应用状态更新所述应用程序对应内存页的所述应用状态信息;
根据更新后的应用状态信息确定是否对所述内存页进行回收。
3.根据权利要求2所述的方法,其特征在于,所述根据所述应用状态更新所述应用程序对应内存页的应用状态信息包括:
将切换状态前后分别对应的进程的进程标识传输至内核空间;
通过所述内核空间扫描每个所述进程标识对应的内存页;
根据所述进程标识对应的应用状态更新所述内存页的应用状态信息。
4.根据权利要求1所述的方法,其特征在于,所述内存回收指令还携带有待回收内存数;所述扫描所述目标链表的内存页,根据所述内存页的标识位信息确定所述目标链表的待回收内存页包括:
将位于所述目标链表最后顺序位的内存页作为当前内存页;
当所述当前内存页的标识位信息与对应的状态阈值相同时,将所述当前内存页确定为待回收内存页;
按逆序获取下一顺序内存页,将下一顺序内存页作为当前内存页,返回当所述当前内存页的标识位信息与对应的状态阈值相同时,将所述当前内存页确定为待回收内存页的步骤,直至达到待回收内存数时,得到所述内存回收的所有待回收内存页。
5.根据权利要求4所述的方法,其特征在于,所述标识位信息包括应用状态信息、被访问信息和链表状态信息;所述当所述当前内存页的标识位信息与对应的状态阈值相同时,将所述当前内存页确定为待回收内存页包括:
当所述当前内存页的所述应用状态信息、所述被访问信息以及所述链表状态信息分别与各自对应的状态阈值相同时,将所述当前内存页确定为待回收内存页。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对应用程序设置对应的资源优先级;
当检测到前台应用程序和后台应用程序具有通信机制和同步机制中至少一种,将所述后台应用程序作为被依赖应用程序;
更新所述被依赖应用程序对应的内存页的应用状态信息。
7.一种内存回收装置,其特征在于,所述装置包括:
指令接收模块,用于接收内存回收指令;所述内存回收指令携带有链表标识;
链表获取模块,用于根据所述链表标识获取内存回收所对应的目标链表;
内存页扫描模块,用于扫描所述目标链表中多个内存页的标识位信息;
内存回收模块,用于根据所述标识位信息确定所述内存回收的待回收内存页;所述待回收内存页包括处于后台应用状态的应用程序的内存页;对所述待回收内存页进行回收。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括应用状态监测模块,用于调用进程管理服务对应用程序的应用状态进行监测;当应用程序的应用状态发生切换时,根据应用状态更新应用程序对应内存页的应用状态信息;根据更新后的应用状态信息确定是否对内存页进行回收。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010170565.XA CN113392037B (zh) | 2020-03-12 | 2020-03-12 | 内存回收方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010170565.XA CN113392037B (zh) | 2020-03-12 | 2020-03-12 | 内存回收方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113392037A true CN113392037A (zh) | 2021-09-14 |
CN113392037B CN113392037B (zh) | 2024-06-18 |
Family
ID=77615746
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010170565.XA Active CN113392037B (zh) | 2020-03-12 | 2020-03-12 | 内存回收方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113392037B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115982060A (zh) * | 2021-10-14 | 2023-04-18 | 华为技术有限公司 | 一种内存回收方法及相关装置 |
CN116185890A (zh) * | 2023-04-23 | 2023-05-30 | 荣耀终端有限公司 | 内存回收方法及电子设备 |
CN116775506A (zh) * | 2023-08-22 | 2023-09-19 | 腾讯科技(深圳)有限公司 | 内存回收方法、装置、设备和介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104008061A (zh) * | 2013-02-22 | 2014-08-27 | 华为技术有限公司 | 内存回收方法及装置 |
CN104375828A (zh) * | 2014-10-27 | 2015-02-25 | 小米科技有限责任公司 | 内存优化方法及装置 |
CN106843756A (zh) * | 2017-01-13 | 2017-06-13 | 中国科学院信息工程研究所 | 基于页面分类的内存页面回收方法及*** |
CN107220076A (zh) * | 2016-09-27 | 2017-09-29 | 华为技术有限公司 | 一种内存回收方法及装置 |
CN108228340A (zh) * | 2017-08-07 | 2018-06-29 | 珠海市魅族科技有限公司 | 终端控制方法及装置、终端设备及计算机可读存储介质 |
CN108228339A (zh) * | 2017-07-28 | 2018-06-29 | 珠海市魅族科技有限公司 | 一种内存回收方法及装置、终端设备及计算机可读存储介质 |
CN109857544A (zh) * | 2018-12-27 | 2019-06-07 | 努比亚技术有限公司 | 资源回收控制方法、终端及计算机可读存储介质 |
CN110018900A (zh) * | 2018-01-10 | 2019-07-16 | 广东欧珀移动通信有限公司 | 内存处理方法和装置、电子设备、计算机可读存储介质 |
CN110018901A (zh) * | 2018-01-10 | 2019-07-16 | 广东欧珀移动通信有限公司 | 内存回收方法、装置、计算机设备和计算机可读存储介质 |
US20190220418A1 (en) * | 2016-09-28 | 2019-07-18 | Huawei Technologies Co., Ltd. | Memory Management Method and Apparatus |
WO2019137252A1 (zh) * | 2018-01-10 | 2019-07-18 | Oppo广东移动通信有限公司 | 内存处理方法、电子设备、计算机可读存储介质 |
CN110162396A (zh) * | 2018-02-14 | 2019-08-23 | 阿里巴巴集团控股有限公司 | 内存回收方法、装置、***和存储介质 |
-
2020
- 2020-03-12 CN CN202010170565.XA patent/CN113392037B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104008061A (zh) * | 2013-02-22 | 2014-08-27 | 华为技术有限公司 | 内存回收方法及装置 |
CN104375828A (zh) * | 2014-10-27 | 2015-02-25 | 小米科技有限责任公司 | 内存优化方法及装置 |
CN107220076A (zh) * | 2016-09-27 | 2017-09-29 | 华为技术有限公司 | 一种内存回收方法及装置 |
US20190220418A1 (en) * | 2016-09-28 | 2019-07-18 | Huawei Technologies Co., Ltd. | Memory Management Method and Apparatus |
CN106843756A (zh) * | 2017-01-13 | 2017-06-13 | 中国科学院信息工程研究所 | 基于页面分类的内存页面回收方法及*** |
CN108228339A (zh) * | 2017-07-28 | 2018-06-29 | 珠海市魅族科技有限公司 | 一种内存回收方法及装置、终端设备及计算机可读存储介质 |
CN108228340A (zh) * | 2017-08-07 | 2018-06-29 | 珠海市魅族科技有限公司 | 终端控制方法及装置、终端设备及计算机可读存储介质 |
CN110018900A (zh) * | 2018-01-10 | 2019-07-16 | 广东欧珀移动通信有限公司 | 内存处理方法和装置、电子设备、计算机可读存储介质 |
CN110018901A (zh) * | 2018-01-10 | 2019-07-16 | 广东欧珀移动通信有限公司 | 内存回收方法、装置、计算机设备和计算机可读存储介质 |
WO2019137252A1 (zh) * | 2018-01-10 | 2019-07-18 | Oppo广东移动通信有限公司 | 内存处理方法、电子设备、计算机可读存储介质 |
CN110162396A (zh) * | 2018-02-14 | 2019-08-23 | 阿里巴巴集团控股有限公司 | 内存回收方法、装置、***和存储介质 |
CN109857544A (zh) * | 2018-12-27 | 2019-06-07 | 努比亚技术有限公司 | 资源回收控制方法、终端及计算机可读存储介质 |
Non-Patent Citations (2)
Title |
---|
ANDERS GIDENSTAM 等: "Efficient and Reliable Lock-Free Memory Reclamation Based on Reference Counting", IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS, vol. 20, no. 8, pages 1173 - 1187 * |
魏绍蓉;: "基于对象的反向映射机制的研究", 实验室研究与探索, vol. 32, no. 01, pages 67 - 69 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115982060A (zh) * | 2021-10-14 | 2023-04-18 | 华为技术有限公司 | 一种内存回收方法及相关装置 |
CN116185890A (zh) * | 2023-04-23 | 2023-05-30 | 荣耀终端有限公司 | 内存回收方法及电子设备 |
CN116185890B (zh) * | 2023-04-23 | 2023-09-19 | 荣耀终端有限公司 | 内存回收方法及电子设备 |
CN116775506A (zh) * | 2023-08-22 | 2023-09-19 | 腾讯科技(深圳)有限公司 | 内存回收方法、装置、设备和介质 |
CN116775506B (zh) * | 2023-08-22 | 2023-12-05 | 腾讯科技(深圳)有限公司 | 内存回收方法、装置、设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113392037B (zh) | 2024-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113392037B (zh) | 内存回收方法、装置、计算机设备和存储介质 | |
CN110764906B (zh) | 内存回收处理方法、装置、电子设备以及存储介质 | |
CN108228449B (zh) | 终端设备控制方法及装置、终端设备及计算机可读存储介质 | |
CN109992523B (zh) | 内存处理方法和装置、电子设备、计算机可读存储介质 | |
CN108205473B (zh) | 内存处理方法及装置、计算机装置及计算机可读存储介质 | |
CN108205498B (zh) | 内存回收方法及装置、计算机装置及计算机可读存储介质 | |
CN111274039B (zh) | 内存回收方法、装置、存储介质及电子设备 | |
US20220035655A1 (en) | Method and Device for Anonymous Page Management, Terminal Device, and Readable Storage Medium | |
CN108205471B (zh) | 内存回收方法及装置、计算机装置及计算机可读存储介质 | |
CN108205501B (zh) | 内存回收方法及装置、计算机装置及计算机可读存储介质 | |
CN112115167B (zh) | 缓存***热点数据访问方法、装置、设备和存储介质 | |
CN114185494B (zh) | 内存匿名页的处理方法、电子设备及可读存储介质 | |
CN111679914B (zh) | 一种内存管理方法、***、计算机设备及存储介质 | |
CN108287760B (zh) | 终端设备控制方法及装置、终端设备及计算机可读存储介质 | |
CN111984413A (zh) | 内存回收方法、装置、电子设备及存储介质 | |
CN108228339B (zh) | 一种内存回收方法及装置、终端设备及计算机可读存储介质 | |
CN115421909A (zh) | 内存管理方法、装置、电子设备及存储介质 | |
CN108228340B (zh) | 终端控制方法及装置、终端设备及计算机可读存储介质 | |
CN108287761B (zh) | 内存回收方法及装置、终端设备及计算机可读存储介质 | |
CN108228342B (zh) | 终端设备控制方法及装置、终端设备及计算机可读存储介质 | |
CN116107925B (zh) | 数据存储单元处理方法 | |
CN112199042A (zh) | 存储空间管理方法、装置、芯片、设备及存储介质 | |
CN111966701A (zh) | 一种元数据更新方法、装置、设备及存储介质 | |
CN108228472B (zh) | 终端设备控制方法及装置、终端设备及计算机可读存储介质 | |
CN116701239A (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 |