CN116185890B - 内存回收方法及电子设备 - Google Patents

内存回收方法及电子设备 Download PDF

Info

Publication number
CN116185890B
CN116185890B CN202310442272.6A CN202310442272A CN116185890B CN 116185890 B CN116185890 B CN 116185890B CN 202310442272 A CN202310442272 A CN 202310442272A CN 116185890 B CN116185890 B CN 116185890B
Authority
CN
China
Prior art keywords
memory
recovery
reclamation
level
memory management
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
CN202310442272.6A
Other languages
English (en)
Other versions
CN116185890A (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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202310442272.6A priority Critical patent/CN116185890B/zh
Publication of CN116185890A publication Critical patent/CN116185890A/zh
Application granted granted Critical
Publication of CN116185890B publication Critical patent/CN116185890B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Memory System (AREA)

Abstract

本申请提供了一种内存回收方法及电子设备。该方法包括:如果满足内存回收流程触发条件,根据内存回收的历史数据,获取当前电子设备中各个应用对应的内存管理分组的内存回收效率;根据获取的内存回收效率,设置各个应用对应的内存管理分组的回收级别;基于回收优先级和各内存管理分组的回收级别,确定需要遍历的目标内存管理分组,对目标内存管理分组进行扫描,对扫描到的可回收内存进行回收。这样,基于各应用对应内存管理分组的内存回收效率配置各应用内存回收的级别,优先回收级别排序在前的应用的内存,使得易于回收的内存管理分组得到优先回收能有效避免内存过度回收的情况,提高系统整体内存回收效率。

Description

内存回收方法及电子设备
技术领域
本申请涉及终端设备领域,尤其涉及一种内存回收方法及电子设备。
背景技术
Linux是一种操作系统。Linux的内存管理中的内存回收是指,将已申请的内存(包括文件页,匿名页,SLAB缓存)中可释放的部分回收,归还到buddy系统(伙伴系统)中。
memcg(Memory Cgroup,内存管理分组)是Linux开源社区中的一种内存分组管理技术。目前,一些厂家将每个应用(APP)的内存设置为一个memcg,方便对该应用的内存进行管理。
相关技术中,Linux在内存回收时,系统会遍历每个memcg,回收可回收的内存。然而,有些memcg的内存回收消耗时间多,但是内存回收量少,导致系统整体内存回收效率较低。
发明内容
为了解决上述技术问题,本申请提供一种内存回收方法及电子设备,基于各应用对应内存管理分组的内存回收效率配置各应用内存回收的级别,优先回收级别排序在前的应用的内存,使得易于回收的内存管理分组得到优先回收,避免内存过度回收的情况,提高内存回收效率。
第一方面,本申请提供一种内存回收方法,该方法应用于电子设备,该方法包括:如果满足内存回收流程触发条件,根据内存回收的历史数据,获取当前电子设备中各个应用对应的内存管理分组的内存回收效率;根据获取的内存回收效率,设置各个应用对应的内存管理分组的回收级别;基于回收优先级和各内存管理分组的回收级别,确定需要遍历的目标内存管理分组,对目标内存管理分组进行扫描,对扫描到的可回收内存进行回收。这样,基于各应用对应内存管理分组的内存回收效率配置各应用内存回收的级别,优先回收级别排序在前的应用的内存,使得易于回收的内存管理分组得到优先回收,能有效避免内存过度回收的情况,提高内存回收效率。
根据第一方面,根据获取的内存回收效率,设置各个应用对应的内存管理分组的回收级别,包括:对于每个内存管理分组,确定内存管理分组的内存回收效率所属的第一回收效率范围;在已配置好的回收效率范围与回收级别的对应关系中,查找与第一回收效率范围对应的第一回收级别;将内存管理分组的回收级别设置为第一回收级别。这样,通过按照内存回收效率为内存管理分组设置回收级别,可以为根据回收级别选择待扫描的内存管理分组提供基础,使得内存回收效率高的内存管理分组优先获得回收扫描机会。
根据第一方面,根据获取的内存回收效率,设置各个应用对应的内存管理分组的回收级别,包括:获取应用白名单,应用白名单中记录有至少一个第一应用;根据获取的内存回收效率和应用白名单,设置各个应用对应的内存管理分组的回收级别。这样,通过将应用白名单作为决定内存管理分组的回收级别的因素之一,可以根据需求,对指定应用的内存管理分组进行特别的回收级别设置,降低应用白名单中的应用对应的内存管理分组被进行内存回收的几率,以减小内存回收对白名单中应用的影响,提高用户使用体验。
根据第一方面,获取应用白名单,包括:从已有的配置文件读取第一白名单;根据获取的内存回收效率和应用白名单,设置各个应用对应的内存管理分组的回收级别,包括:对于每个内存管理分组,确定内存管理分组的内存回收效率所属的第一回收效率范围;在已配置好的回收效率范围与回收级别的对应关系中,查找与第一回收效率范围对应的第一回收级别;将内存管理分组的回收级别设置为第一回收级别;将第一白名单中的第一应用对应的内存管理分组的回收级别调整为第二回收级别。这样,可以通过将常用应用添加到配置文件中,使得常用应用成为白名单中的应用,以便对常用应用的内存管理分组进行特别的回收级别设置,降低常用应用对应的内存管理分组被进行内存回收的几率,以减小内存回收对常用应用使用的影响,提高用户使用体验。
根据第一方面,获取应用白名单,包括:识别前台应用;根据识别出的前台应用生成第二白名单,第二白名单中的应用为前台应用;根据获取的内存回收效率和应用白名单,设置各个应用对应的内存管理分组的回收级别,包括:对于每个内存管理分组,确定内存管理分组的内存回收效率所属的第一回收效率范围;在已配置好的回收效率范围与回收级别的对应关系中,查找与第一回收效率范围对应的第一回收级别;将内存管理分组的回收级别设置为第一回收级别;将前台应用对应的内存管理分组的回收级别调整为第二回收级别。这样,可以通过将前台应用添加到应用白名单,对前台应用的内存管理分组进行特别的回收级别设置,降低前台应用对应的内存管理分组被进行内存回收的几率,以减小内存回收对前台应用使用的影响,提高用户使用体验。
根据第一方面,获取应用白名单,包括:从已有的配置文件读取第一白名单;识别前台应用;将前台应用添加到第一白名单中,得到第三白名单;根据获取的内存回收效率和应用白名单,设置各个应用对应的内存管理分组的回收级别,包括:对于每个内存管理分组,确定内存管理分组的内存回收效率所属的第一回收效率范围;在已配置好的回收效率范围与回收级别的对应关系中,查找与第一回收效率范围对应的第一回收级别;将内存管理分组的回收级别设置为第一回收级别;将第三白名单中的各个应用对应的内存管理分组的回收级别调整为第二回收级别。这样,可以通过将常用应用和前台应用都添加到应用白名单,对常用应用和前台应用的内存管理分组进行特别的回收级别设置,降低常用应用和前台应用对应的内存管理分组被进行内存回收的几率,以减小内存回收对常用应用和前台应用使用的影响,提高用户使用体验。
根据第一方面,第二回收级别为最低回收级别。这样,可以最大限度降低常用应用和/或和前台应用对应的内存管理分组被进行内存回收的几率,
根据第一方面,回收效率范围与回收级别的对应关系中,回收效率范围对应的回收效率数值越高,回收效率范围对应的回收级别越高。这样,可以使得回收效率高的内存管理分组优先得到内存回收机会,避免内存过度回收,减少内存回收耗时,提高系统整体内存回收效率。
根据第一方面,根据内存回收的历史数据,获取当前电子设备中各个应用对应的内存管理分组的内存回收效率,包括:对于每个应用,获取应用对应的内存管理分组在上一次回收中的内存扫描量和内存回收量;根据内存扫描量和内存回收量,确定应用对应的内存管理分组的内存回收效率。这样,可以获得各个应用对应的内存管理分组的内存回收效率,为在本次的内存回收流程中对各内存管理分组进行回收机会排序提供基础。
根据第一方面,根据内存扫描量和内存回收量,确定应用对应的内存管理分组的内存回收效率,包括:根据应用对应的内存管理分组的文件页在上一次回收中的第一内存扫描量和第一内存回收量,确定内存管理分组的文件页的第一内存回收效率;根据应用对应的内存管理分组的匿名页在上一次回收中的第二内存扫描量和第二内存回收量,确定内存管理分组的匿名页的第二内存回收效率;根据第一内存回收效率和第二内存回收效率,确定应用对应的内存管理分组的内存回收效率。这样,可以准确获得各个内存管理分组的内存回收效率。
根据第一方面,应用对应的内存管理分组的内存回收效率等于第一内存回收效率与第一系数之积,与第二内存回收效率的和。这样,通过对内存管理分组中文件页和匿名页的内存回收效率进行加权求和,可以准确获得各个内存管理分组的内存回收效率。
根据第一方面,第一系数是根据文件页的回收速率与匿名页的回收速率的比值确定的。这样,通过根据文件页的回收速率与匿名页的回收速率的比值确定第一系数,可以更合理地确定内存管理分组中文件页和匿名页的回收效率在内存管理分组回收效率中所占的比重,从而准确获得内存管理分组的内存回收效率。
根据第一方面,基于回收优先级和各内存管理分组的回收级别,确定需要遍历的目标内存管理分组,对目标内存管理分组进行扫描,对扫描到的可回收内存进行回收,包括:根据回收优先级与回收级别的对应关系,确定初始回收优先级对应的第一目标回收级别;将对应的回收级别等于或高于第一目标回收级别的内存管理分组确定为第一目标内存管理分组;对第一目标内存管理分组进行扫描,对扫描到的第一可回收内存进行回收。这样,通过只对等于或高于第一目标回收级别的内存管理分组进行内存回收,在满足内存回收量要求的同时,能够有效避免内存过度回收,减少内存回收次数,从而提高整个系统的内存回收效率。
根据第一方面,根据回收优先级与回收级别的对应关系,确定初始回收优先级对应的第一目标回收级别之前,还包括:根据本次回收的预设回收量,确定初始回收优先级,预设回收量越大,确定的初始回收优先级越低。这样,通过基于预设回收量确定初始回收优先级,可以合理确定内存回收的范围,减少回收次数,从而提高整个系统的内存回收效率。
根据第一方面,还包括:如果第一可回收内存小于预设回收量,根据初始回收优先级和调整步长,确定第一目标回收优先级,第一目标回收优先级低于初始回收优先级;根据回收优先级与回收级别的对应关系,确定第一目标回收优先级对应的第二目标回收级别,第二目标回收级别等于或低于第一目标回收级别;将对应的回收级别等于或高于第二目标回收级别的内存管理分组确定为第二目标内存管理分组;对第二目标内存管理分组进行扫描,对扫描到的第二可回收内存进行回收。这样,当一次回收的内存不满足要求的回收量时,可以确定合理的内存范围再次进行内存回收,能够有效避免内存过度回收,提高整个系统的内存回收效率。
根据第一方面,还包括:如果第一可回收内存与第二可回收内存之和小于预设回收量,根据第一目标回收优先级和调整步长,确定第二目标回收优先级,第二目标回收优先级低于第一目标回收优先级;根据回收优先级与回收级别的对应关系,确定第二目标回收优先级对应的第三目标回收级别,第三目标回收级别等于或低于第二目标回收级别;将对应的回收级别等于或高于第三目标回收级别的内存管理分组确定为第三目标内存管理分组;对第三目标内存管理分组进行扫描,对扫描到的第三可回收内存进行回收。这样,当二次回收的内存总量不满足要求的回收量时,可以确定合理的内存范围再一次进行内存回收,能够有效避免内存过度回收,提高整个系统的内存回收效率。
根据第一方面,调整步长为固定值;或者,调整步长按照如下方式确定:根据本轮当前已回收的总内存回收量与预设回收量的差值,确定调整步长,差值越大,确定的调整步长的值越大;或者,根据本轮当前已回收的总内存回收量与预设回收量的差值与预设回收量的比值,确定调整步长,比值越大,确定的调整步长的值越大。这样,可以根据使用需求采用不同的调整步长确定方式,满足不同场景下的需要。
根据第一方面,如果满足内存回收流程触发条件,根据内存回收的历史数据,获取当前电子设备中各个应用对应的内存管理分组的内存回收效率之前,还包括:监测到当前电子设备的空闲内存低于第一值,触发内存回收流程。这样,可以及时触发内存回收流程。
根据第一方面,内存回收效率越高的应用,对应的内存管理分组的回收级别越高,回收级别越高,回收几率越大。这样,通过回收级别的设置控制不同内存管理分组的回收几率,改变所有内存管理分组回收几率相同的情况,使得易于回收的内存管理分组被回收的几率大,难回收的内存管理分组被回收的几率小,从而提高系统整体的内存回收效率。
根据第一方面,回收优先级越高,需要遍历的目标内存管理分组的回收级别越高,在内存管理分组的数量和对应回收级别不变的情况下,目标内存管理分组的数量越少。这样,可以通过回收级别控制回收内存的范围,避免内存的过度回收,提高系统整体的内存回收效率。
根据第一方面,电子设备可以为手机、平板或电视。当然,不限于此,还可以是其他具有内存回收需要的电子设备。
第二方面,本申请提供一种电子设备,包括:存储器和处理器,存储器与处理器耦合;存储器存储有程序指令,当程序指令由处理器执行时,使得电子设备执行第一方面任意一项的内存回收方法。
第三方面,本申请提供一种计算机可读存储介质,包括计算机程序,当计算机程序在电子设备上运行时,使得电子设备执行前述的第一方面任意一项的内存回收方法。
附图说明
图1为示例性示出的电子设备100的结构示意图;
图2为示例性示出的本申请实施例的电子设备100的软件结构框图;
图3为示例性示出的本实施例中内存回收方法的一种流程示例图;
图4为示例性示出的手机中各应用的内存管理分组memcg的内存管理示意图;
图5为示例性示出的每个内存管理分组memcg中链表的管理示意图;
图6为示例性示出的本实施例中内存回收方法的另一种流程示例图;
图7为示例性示出的本实施例中应用白名单的更新及内存管理分组回收级别设置的关系示意图;
图8为示例性示出的本实施例中内存回收方法的又一种流程示例图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一目标对象和第二目标对象等是用于区别不同的目标对象,而不是用于描述目标对象的特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个系统是指两个或两个以上的系统。
相关技术中,Linux在内存回收时会遍历每个memcg,回收可回收的内存。这种方式存在如下问题:
一是,不同memcg的内存回收速率是不同的,比如:有的memcg可以在1ms(毫秒)内回收100MB(兆比特)内存,有的memcg在1ms内只能回收5MB内存;这就导致在某个难回收出内存的memcg里面过度消耗时间,导致系统整体内存回收效率低。
二是,相关技术内存回收需要遍历所有memcg,对memcg的回收没有优先回收策略。然而在正常用户使用过程中,每个APP的使用情况是不一样的,比如:一天中APP1的使用占比大概70%,然而APP2的使用概率可能就只有5%。对APP1和APP2用同样的回收策略,APP1的使用体验会有损失。
三是,相关技术对前台APP和后台APP的内存回收没有区别,对于前台APP的内存回收会导致前台APP的使用体验不佳。
本实施例提供一种内存回收方法及电子设备,基于各应用对应内存管理分组的内存回收效率配置各应用内存回收的顺序,优先回收排序在前的应用的内存,提高内存回收效率。
本实施例可以应用于手机、平板、电视等电子设备,当然不限于此,该电子设备的结构可以如图1所示。
图1为示例性示出的电子设备100的结构示意图。应该理解的是,图1所示电子设备100仅是电子设备的一个范例,并且电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图1中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
请参见图1,电子设备100可以包括:处理器110,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,指示器192,摄像头193等。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。
内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
图2为示例性示出的本申请实施例的电子设备100的软件结构框图。
电子设备100的分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,Android系统可以包括应用程序层、应用程序框架层、系统库以及内核层等。
应用程序层可以包括一系列应用程序包。
如图2所示,应用程序包可以包括相机、日历、地图、WLAN、音乐、短信息、图库、通话、导航、蓝牙、视频等应用程序。当然,这些应用仅为示例性的,在其他实施例中,应用程序层可以包括图2中未示出的应用,也可以不包括图2中示出的一个或多个应用。
如图2所示,应用程序框架层可以包括监控模块,白名单管理模块,白名单配置模块等。
其中,监控模块用于识别前台应用,并将识别结果发送给白名单管理模块。
白名单配置模块,用于根据用户输入的应用配置信息进行初始化配置,生成配置文件。其中,配置文件中可以包括一个或多个应用。
白名单管理模块,用于根据从白名单配置模块中读取的配置文件和/或监控模块发送的前台应用识别结果,更新应用白名单。
安卓运行时(Android Runtime)包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块。如图2所示,例如:系统库可以包括表面管理器(surface manager)等。
表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。
内核层是硬件和软件之间的层。
如图2所示,内核层可以包括音频驱动、显示驱动、蓝牙驱动、内存回收模块、传感器驱动等模块。
其中,内存回收模块用于执行本实施例的内存回收方法。内存回收模块可以从前述的白名单管理模块获取白名单,并将白名单中的应用回收级别设置为预设级别,例如最低回收级别。
可以理解的是,图2示出的软件结构中的层以及各层中包含的部件,并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的层,以及每个层中可以包括更多或更少的部件,本申请不做限定。
下面以手机为例,对本实施例的内存回收方法进行说明。当然,以下实施例也适用于手机外的其他电子设备,例如平板、电视等。
在以下各实施例中,均假设手机中有8个应用,即:应用1(即APP1)至应用8(即APP1)。应用1至应用8对应的内存管理分组依次为:内存管理分组1(即memcg1)至内存管理分组8(即memcg8)。
图3为示例性示出的本实施例中内存回收方法的一种流程示例图。请参见图3,本实施例中,内存回收方法可以包括如下步骤:
S301,如果满足内存回收流程触发条件,根据应用1至应用8的内存管理分组在上一次回收中的内存扫描量和内存回收量,计算应用1至应用8对应的内存管理分组memcg1至memcg8的内存回收效率。
在一个示例中,内存回收流程触发条件可以是:电子设备中当前的空闲内存容量低于第一值。例如,假设设置3个水线值:第一水线值、第二水线值、第三水线值,且第一水线值大于第二水线值,第二水线值大于第三水线值。假设规定:内存回收流程触发条件可以是:电子设备中当前的空闲内存容量低于第二水线值。那么,第二水线值即为第一值。并且,还可以规定,在此情况下的预设回收量等于第一水线值。
当然,以上所列举的内存回收流程触发条件只是一个示例,在其他实施例中,可以设置其他的内存回收流程触发条件。例如,根据系统压力或者指定事件等触发内存回收流程。
满足内存回收流程触发条件后,触发一次内存回收流程。在一次内存回收流程中,可以进行一轮或多轮内存回收。
这里,对内存管理分组memcg的内存回收效率的获取方式进行说明。
图4为示例性示出的手机中各应用的内存管理分组memcg的内存管理示意图。请参见图4,每个应用(即APP)的内存设置为一个内存管理分组memcg,每个memcg中的内存分为两类:文件页和匿名页。
图5为示例性示出的每个内存管理分组memcg中链表的管理示意图。请参见图5,在每个memcg中管理着四条链表:文件页的活跃(active)链表和不活跃(inactive)链表,匿名页的活跃链表和不活跃链表。Linux内核在对该memcg进行内存回收时会遍历扫描这四条链表,将其中可回收的内存回收到buddy系统,其中不可回收的内存返回(rotate)到链表头部。
本文中,定义变量如下:
扫描量(nr_scaned):在一次内存回收中扫描过的内存容量。
回收量(nr_reclaimed):在一次内存回收中回收到buddy系统的内存容量。
返回量(nr_rotated):在一次内存回收中返回到链表头部的内存容量。
内存回收效率(efficiency)。
本实施例中,文件页和匿名页的扫描量、回收量、返回量可以分别记录,文件页的内存回收效率和匿名页的内存回收效率也是分别计算的。
本实施例中,可根据如下的公式(1)计算得到内存回收效率。
(1)
文件页和匿名页是“独立”回收的。利用公式(1),可以分别计算出文件页的内存回收效率(file_efficiency)和匿名页的内存回收效率(anon_efficiency)。即文件页的内存回收效率等于文件页的回收量除以文件页的扫描量所得的商,匿名页的内存回收效率等于匿名页的回收量除以匿名页的扫描量所得的商。
对于一次有效的内存回收来说,在扫描量一定的情况下,回收量越多表明回收效率越高,相反,返回量越高则表明这段时间内该memcg的内存越难回收。
文件页的回收速率与匿名页的回收速率是不同的,并且通常文件页的回收速率是远大于匿名页的回收速率的。因此,本实施例在计算memcg整体的内存回收效率时,并不是简单的将file_efficiency 和anon_efficiency相加,而是配以一定的权重,例如可以按照如下的公式(2)计算一个memcg的整体内存回收效率。
(2)
公式(2)中,参数scale可以配置。例如,参数scale可以根据实际使用中文件页的回收速率与匿名页的回收速率的比值确定。
假设根据前述的公式(1)和公式(2),计算出应用1至应用8对应的内存管理分组memcg1至memcg8的内存回收效率如表1所示。
表1
S302,根据内存管理分组memcg1至memcg8的内存回收效率,设置memcg1至memcg8的回收级别。
在一个示例中,根据内存管理分组的内存回收效率,设置内存管理分组的回收级别,可以按照如下方式进行:
对于每个内存管理分组,确定内存管理分组的内存回收效率所属的第一回收效率范围;
在已配置好的回收效率范围与回收级别的对应关系中,查找与第一回收效率范围对应的第一回收级别;
将内存管理分组的回收级别设置为第一回收级别。
即根据memcg的内存回收效率确定所属回收效率范围,进而根据回收效率范围确定memcg的回收级别。
例如,假设回收效率范围与回收级别的对应关系如表2所示。
表2
其中,level0回收级别最低,level4回收级别最高,level0至level4回收级别逐级增高。
这样,根据表1和表2,可以确定各个回收级别对应的memcg,如表3所示。
表3
需要说明的是,虽然上述列举的示例中有5个回收级别,但是,在其他实施例中,可以设置更多或更少的回收级别,本实施例对回收级别的数量不作限定。此外,回收效率范围与回收级别的对应关系也可以进行调整,不限于表2所示的对应关系。
S303,读取初始回收优先级12,根据回收优先级与回收级别的对应关系,确定初始回收优先级12对应的回收级别为level4。
本实施例中,假设回收优先级的范围是0-12,回收优先级数值越高,回收力度越低。回收粒度越低意味着回收扫描的范围越小。当然,在其他实施例中,可以设置更大或更小的回收优先级范围,而不局限于0-12。
需要说明的是,在一次内存回收流程中可以进行一轮或多轮内存回收,视本次要回收的总内存容量(即预设回收量)而定。本实施例中,初始回收优先级为12,每进行一次回收,如果回收的内存容量没达到要求,就会将回收优先级数值减1,继续下一轮回收,直到回收的内存容量达到要求为止。
假设回收优先级与回收级别的对应关系如表4所示。
表4
根据表4可以查询到,回收优先级12对应的回收级别level4。
在一个示例中,初始优先级可以是固定的。例如,可以设置初始优先级等于回收优先级范围内的最高回收优先级值。
在另一个示例中,初始优先级可以是变化的。例如,可以根据每一次内存回收流程的预设回收量,确定初始回收优先级,预设回收量越大,确定的初始回收优先级越低。这样,基于需要回收的内存量灵活设置初始回收优先级,有利于减少内存回收耗时,提高内存回收效率。
S304,确定回收级别为level4的memcg1和memcg2为本轮扫描的内存管理分组。
本示例中,由于level4是最高回收级别,因此高于或等于level4的回收级别只有level4,因此,将回收级别为level4的memcg确定为本轮扫描的内存管理分组。请参见表3,对应的回收级别高于或等于level4的内存管理分组有memcg1和memcg2这2个分组,因此将memcg1和memcg2确定为本轮扫描的内存管理分组。
S305,扫描memcg1和memcg2,有a1兆比特内存可以回收,将该a1兆比特内存回收到伙伴系统。
本轮中成功回收了a1兆比特内存。
S306,判断本次已回收的内存容量a1是否达到预设回收量b,如果未达到,执行步骤S307,否则结束本次内存回收流程。
S307,将初始回收优先级12减1,得到第一目标回收优先级11。
本实施例中,回收优先级减少的步长为1,在其他实施例中,也可以设置其他的步长。例如,可以根据本轮当前已回收的总内存回收量与预设回收量之间的差值确定本次回收优先级减少的步长,差值越大,步长值也越大。或者,可以按照本轮当前已回收的总内存回收量与预设回收量之间的差值与预设回收量的比值确定步长,比值越大,步长越大。这样,可以更快地扩大回收扫描范围,提高回收效率。
S308,根据回收优先级与回收级别的对应关系,确定第一目标回收优先级11对应的回收级别为level4。
请参见表4,回收优先级11对应的回收级别也是level4。
S309,确定回收级别为level4的memcg1和memcg2为本轮扫描的内存管理分组。
S310,扫描memcg1和memcg2,有a2兆比特内存可以回收,将该a2兆比特内存回收到伙伴系统。
S311,判断本次已回收的内存容量(a1+ a2)是否达到预设回收量b,如果未达到,执行步骤S312,否则结束本次内存回收流程。
S312,将第一目标回收优先级11减1,得到第二目标回收优先级10。
S313,根据回收优先级与回收级别的对应关系,确定第二目标回收优先级10对应的回收级别为level4,确定回收级别为level4的memcg1和memcg2为本轮扫描的内存管理分组,扫描memcg1和memcg2,回收可回收的a3兆比特内存到伙伴系统。
S314,判断本次已回收的内存容量(a1+ a2+ a3)是否达到预设回收量b,如果未达到,执行步骤S315,否则结束本次内存回收流程。
S315,将第二目标回收优先级10减1,得到第三目标回收优先级9。
S316,根据回收优先级与回收级别的对应关系,确定第三目标回收优先级9对应的回收级别为level3,确定回收级别等于或高于level3的 memcg1、memcg2和memcg3为本轮扫描的内存管理分组,扫描memcg1、memcg2和memcg3,回收可回收的a4兆比特内存到伙伴系统。
请参见表4,回收优先级9对应的回收级别是level3。
本示例中,高于或等于level3的回收级别有level3和level4两个级别,因此,将回收级别为level3的memcg以及回收级别为level4的memcg确定为本轮扫描的内存管理分组。请参见表3,对应的回收级别高于或等于level3的内存管理分组有memcg1、memcg2和memcg3这3个分组,因此将memcg1、memcg2和memcg3确定为本轮扫描的内存管理分组。
S317,判断出本次已回收的内存容量(a1+ a2+ a3+ a4)大于或等于预设回收量b,结束本次内存回收流程。
需要说明的是,如果本次已回收的内存容量(a1+ a2+ a3+ a4)仍然小于预设回收量b,就需要继续减小回收优先级,按照减小后的回收优先级再次确定扫描的内存管理分组memcg,继续进行内存回收,直到已回收的内存容量大于或等于预设回收量b。
在本次内存回收流程中,可以将各个内存管理分组的回收量和扫描量记录并保存,并且可以对同一内存管理分组中文件页和匿名页的回收量和扫描量分别进行记录和保存,以便在下一次内存回收流程中计算各个内存管理分组的内存回收效率。
由上述实施例可见,本实施例的内存回收方法,基于各应用对应内存管理分组的内存回收效率配置各应用内存回收的级别,控制不同内存管理分组的回收几率,改变所有内存管理分组回收几率相同的情况,使得易于回收的内存管理分组排序靠前,实现了优先回收易于回收的内存管理分组,在易于回收的内存管理分组的内存回收量达到要求的情况下,不再对其他难以回收的内存进行回收处理,能有效避免内存过度回收的情况,从而减少了内存回收处理的耗时,提高了系统的整体内存回收效率。
图6为示例性示出的本实施例中内存回收方法的另一种流程示例图。请参见图6,本实施例中,内存回收方法可以包括如下步骤:
S601,如果满足内存回收流程触发条件,根据应用1至应用8的内存管理分组在上一次回收中的内存扫描量和内存回收量,计算应用1至应用8对应的内存管理分组memcg1至memcg8的内存回收效率。
假设计算出的内存管理分组memcg1至memcg8的内存回收效率仍然如表1所示。
S602,获取应用白名单。
假设该应用白名单中记录有应用1、应用5和应用7。
需要说明的是,应用白名单中可以记录至少一个应用。本实施例中为应用白名单中的应用对应的内存管理分组设置较低的回收级别,以降低应用白名单中的应用对应的内存管理分组被进行内存回收的几率。
在一个示例中,获取应用白名单,可以包括:从已有的配置文件读取第一白名单。其中,配置文件是图2中的白名单配置模块生成的。
本实施例中,第一白名单中的应用就是配置文件中的应用。配置文件中的应用可以是预先配置好的。
在一个示例中,获取应用白名单,可以包括:
识别前台应用;
根据识别出的前台应用生成第二白名单,第二白名单中的应用为前台应用。
本实施例中,第二白名单中的应用是当前的前台应用。在手机界面上没有悬浮窗的情况下,手机当前主界面上的应用为前台应用。在手机界面上有悬浮窗的情况下,手机当前主界面上的应用和悬浮窗中的应用都是前台应用。
在一个示例中,获取应用白名单,可以包括:从已有的配置文件读取第一白名单;
识别前台应用;
将前台应用添加到第一白名单中,得到第三白名单。
本实施例中,第三白名单中的应用包括配置文件中的应用和当前的前台应用。也即,第三白名单中的应用包括前述第一白名单中的应用和第二白名单中的应用。
S603,根据内存管理分组memcg1至memcg8的内存回收效率和应用白名单,设置memcg1至memcg8的回收级别。
本实施例中,回收级别是基于内存管理分组的内存回收效率和应用白名单共同设置的。下面举例说明基于内存管理分组的内存回收效率和应用白名单共同设置回收级别的方式。
图7为示例性示出的本实施例中应用白名单的更新及内存管理分组回收级别设置的关系示意图。请参见图7,本实施例中,回收级别的设置过程可以包括:
1、白名单配置模块根据用户输入的应用配置信息进行初始化配置,生成配置文件。
配置文件中包括应用名称,例如应用1和应用5。
需要说明的是,配置文件可以配置一次以后不再更改。这样,配置文件中的应用就是固定的了。开发人员可以根据各应用使用情况的统计数据,将最常用的一个或多个应用写到配置文件中,以便在后续将这些最常用应用的内存管理分组的回收级别设置为较低级别,例如最低级level0,从而降低这些最常用应用的内存管理分组被进行内存回收的几率。这样,这些最常用应用的内存管理分组被进行内存回收的次数就减少了,进而可以减少内存回收对于这些最常用应用的使用的影响,例如减少因内存回收导致的卡顿情况,提升用户的使用体验。
2、白名单管理模块从白名单配置模块读取配置文件。
3、白名单管理模块根据配置文件更新应用白名单,此次更新后的应用白名单为第一白名单。
假设此次更新后的应用白名单中包括两个应用,即应用1和应用5。
4、监控模块识别前台应用。
假设前台应用为应用7。
5、监控模块将识别出的前台应用发送给白名单管理模块。
6、白名单管理模块根据前台应用对应用白名单进行更新,此次更新后得到的应用白名单为第三白名单。
本步骤中,白名单管理模块将前台应用添加到前述步骤3更新后得到的第一白名单中,即得到第三白名单。
此次更新后的应用白名单中包括3个应用,即应用1、应用5和应用7。
这样,通过将前台应用添加到应用白名单中,可以在后续将这些前台应用的内存管理分组的回收级别设置为较低级别,例如最低级level0,从而降低这些前台应用的内存管理分组被进行内存回收的几率。这样,前台应用的内存管理分组被进行内存回收的次数就减少了,进而可以减少内存回收对于前台应用的使用的影响,例如减少因内存回收导致前台应用的卡顿情况,提升用户的使用体验。
7、内存回收模块从白名单管理模块读取应用白名单。
在此步骤之前,内存回收模块已根据memcg的内存回收效率设置了回收级别,如前述的表3所示。表3中回收级别的详细设置过程请参见前述步骤S302中的说明,此处不再赘述。
8、根据应用白名单调整回收级别。
例如,假设调整策略是将应用白名单中应用对应的memcg的回收级别调整为最低级别level0,那么调整后,各个回收级别对应的memcg,如表5所示。
表5
需要说明的是,上述示例是根据配置文件和前台应用共同生成应用白名单,在其他实施例中,也可以只根据配置文件生成应用白名单,或者只根据前台应用生成应用白名单。
在只根据配置文件生成应用白名单的情况下,应用白名单为前述的第一白名单(第一白名单中包括应用1和应用5),此时回收级别的设置过程可以不包括图7中的步骤4至步骤6,这种情况下调整后的回收级别如表6所示。
表6
在只根据前台应用生成应用白名单的情况下,应用白名单为前述的第二白名单(第二白名单中包括前台应用7),此时回收级别的设置过程可以不包括图7中的步骤1至步骤3,这种情况下调整后的回收级别如表7所示。
表7
S604,读取初始回收优先级12,根据回收优先级与回收级别的对应关系,确定初始回收优先级12对应的回收级别为level4。
根据表4可以查询到,回收优先级12对应的回收级别level4。
S605,确定回收级别为level4的memcg2为本轮扫描的内存管理分组。
本示例中,由于level4是最高回收级别,因此高于或等于level4的回收级别只有level4,因此,将回收级别为level4的memcg确定为本轮扫描的内存管理分组。请参见表5,对应的回收级别高于或等于level4的内存管理分组有memcg2这一个分组,因此将memcg2确定为本轮扫描的内存管理分组。
S606,扫描memcg2,有c1兆比特内存可以回收,将该c1兆比特内存回收到伙伴系统。
本轮中成功回收了c1兆比特内存。
S607,判断本次已回收的内存容量c1是否达到预设回收量b,如果未达到,执行步骤S608,否则结束本次内存回收流程。
S608,将初始回收优先级12减1,得到第一目标回收优先级11。
在本实施例中,仍然假设回收优先级减少的步长为1,在其他实施例中,也可以设置其他的步长,或者根据已回收的总内存量与预设回收量差值确定回收优先级减少的步长。
S609,根据回收优先级与回收级别的对应关系,确定第一目标回收优先级11对应的回收级别为level4。
请参见表4,回收优先级11对应的回收级别也是level4。
S610,确定回收级别为level4的memcg2为本轮扫描的内存管理分组。
S611,扫描memcg2,有c2兆比特内存可以回收,将该c2兆比特内存回收到伙伴系统。
S612,判断本次已回收的内存容量(c1+ c2)是否达到预设回收量b,如果未达到,执行步骤S613,否则结束本次内存回收流程。
S613,将第一目标回收优先级11减1,得到第二目标回收优先级10。
S614,根据回收优先级与回收级别的对应关系,确定第二目标回收优先级10对应的回收级别为level4,确定回收级别为level4的memcg2为本轮扫描的内存管理分组,扫描memcg2,回收可回收的c3兆比特内存到伙伴系统。
S615,判断本次已回收的内存容量(c1+ c2+ c3)是否达到预设回收量b,如果未达到,执行步骤S616,否则结束本次内存回收流程。
S616,将第二目标回收优先级10减1,得到第三目标回收优先级9。
S617,根据回收优先级与回收级别的对应关系,确定第三目标回收优先级9对应的回收级别为level3,确定回收级别等于或高于level3的 memcg2和memcg3为本轮扫描的内存管理分组,扫描memcg2和memcg3,回收可回收的a4兆比特内存到伙伴系统。
请参见表4,回收优先级9对应的回收级别是level3。
本示例中,高于或等于level3的回收级别有level3和level4两个级别,因此,将回收级别为level3的memcg以及回收级别为level4的memcg确定为本轮扫描的内存管理分组。请参见表5,对应的回收级别高于或等于level3的内存管理分组有memcg2和memcg3这2个分组,因此将memcg2和memcg3确定为本轮扫描的内存管理分组。
S618,判断出本次已回收的内存容量(c1+ c2+ c3+c4)大于或等于预设回收量b,结束本次内存回收流程。
需要说明的是,如果本次已回收的内存容量(c1+ c2+c3+ c4)仍然小于预设回收量b,就需要继续减小回收优先级,按照减小后的回收优先级再次确定扫描的内存管理分组memcg,继续进行内存回收,直到已回收的内存容量大于或等于预设回收量b。
在本次内存回收流程中,可以将各个内存管理分组的回收量和扫描量记录并保存,并且可以对同一内存管理分组中文件页和匿名页的回收量和扫描量分别进行记录和保存,以便在下一次内存回收流程中计算各个内存管理分组的内存回收效率。
由上述实施例可见,本实施例的内存回收方法,基于各应用对应内存管理分组的内存回收效率和应用使用情况配置各应用内存回收的级别,控制不同内存管理分组的回收几率,改变所有内存管理分组回收几率相同的情况,使得易于回收的内存管理分组级别排序靠前,优先得到回收,常用应用和/前台应用级别排序靠后,这样,就可以优先回收易于回收的内存管理分组,,能有效避免内存过度回收的情况,从而减少了内存回收处理的耗时,提高了系统的整体内存回收效率。并且,本实施例的内存回收方法,实现了对不常用的APP的内存多回收,对常用的重要的APP少回收,降低了对常用应用和/前台应用的内存管理分组进行内存回收的几率,从而减少了内存回收对于常用应用和/前台应用的使用的影响,提高了用户的使用体验。
图8为示例性示出的本实施例中内存回收方法的又一种流程示例图。请参见图8,本实施例中,内存回收方法可以包括如下步骤:
S801,如果满足内存回收流程触发条件,根据内存回收的历史数据,获取电子设备中各个应用对应的内存管理分组的内存回收效率。
S802,根据获取的内存回收效率,设置各个应用对应的内存管理分组的回收级别。
S803,基于回收优先级和各内存管理分组的回收级别,确定需要遍历的目标内存管理分组,对目标内存管理分组进行扫描,对扫描到的可回收内存进行回收。
本申请实施例还提供一种电子设备,该电子设备包括存储器和处理器,存储器与处理器耦合,存储器存储有程序指令,当程序指令由所述处理器执行时,使得电子设备前述电子设备所执行的内存回收方法。
可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的内存回收方法。
本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的内存回收方法。
另外,本申请实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的内存回收方法。
其中,本实施例提供的电子设备、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
本申请各个实施例的任意内容,以及同一实施例的任意内容,均可以自由组合。对上述内容的任意组合均在本申请的范围之内。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
结合本申请实施例公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(Random Access Memory,RAM)、闪存、只读存储器(Read Only Memory,ROM)、可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)、电可擦可编程只读存储器(Electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。

Claims (23)

1.一种内存回收方法,其特征在于,应用于电子设备,所述方法包括:
如果满足内存回收流程触发条件,根据内存回收的历史数据,获取当前所述电子设备中各个应用对应的内存管理分组的内存回收效率;
根据获取的内存回收效率,设置所述各个应用对应的内存管理分组的回收级别;
基于回收优先级和各内存管理分组的回收级别,确定需要遍历的目标内存管理分组,对所述目标内存管理分组进行扫描,对扫描到的可回收内存进行回收。
2.根据权利要求1所述的方法,其特征在于,根据获取的内存回收效率,设置所述各个应用对应的内存管理分组的回收级别,包括:
对于每个内存管理分组,确定所述内存管理分组的内存回收效率所属的第一回收效率范围;
在已配置好的回收效率范围与回收级别的对应关系中,查找与所述第一回收效率范围对应的第一回收级别;
将所述内存管理分组的回收级别设置为所述第一回收级别。
3.根据权利要求1所述的方法,其特征在于,根据获取的内存回收效率,设置所述各个应用对应的内存管理分组的回收级别,包括:
获取应用白名单,所述应用白名单中记录有至少一个第一应用;
根据获取的内存回收效率和所述应用白名单,设置所述各个应用对应的内存管理分组的回收级别。
4.根据权利要求3所述的方法,其特征在于,获取应用白名单,包括:
从已有的配置文件读取第一白名单;
根据获取的内存回收效率和所述应用白名单,设置所述各个应用对应的内存管理分组的回收级别,包括:
对于每个内存管理分组,确定所述内存管理分组的内存回收效率所属的第一回收效率范围;
在已配置好的回收效率范围与回收级别的对应关系中,查找与所述第一回收效率范围对应的第一回收级别;
将所述内存管理分组的回收级别设置为所述第一回收级别;
将所述第一白名单中的第一应用对应的内存管理分组的回收级别调整为第二回收级别。
5.根据权利要求3所述的方法,其特征在于,获取应用白名单,包括:
识别前台应用;
根据识别出的所述前台应用生成第二白名单,所述第二白名单中的应用为所述前台应用;
根据获取的内存回收效率和所述应用白名单,设置所述各个应用对应的内存管理分组的回收级别,包括:
对于每个内存管理分组,确定所述内存管理分组的内存回收效率所属的第一回收效率范围;
在已配置好的回收效率范围与回收级别的对应关系中,查找与所述第一回收效率范围对应的第一回收级别;
将所述内存管理分组的回收级别设置为所述第一回收级别;
将所述前台应用对应的内存管理分组的回收级别调整为第二回收级别。
6.根据权利要求3所述的方法,其特征在于,获取应用白名单,包括:
从已有的配置文件读取第一白名单;
识别前台应用;
将所述前台应用添加到所述第一白名单中,得到第三白名单;
根据获取的内存回收效率和所述应用白名单,设置所述各个应用对应的内存管理分组的回收级别,包括:
对于每个内存管理分组,确定所述内存管理分组的内存回收效率所属的第一回收效率范围;
在已配置好的回收效率范围与回收级别的对应关系中,查找与所述第一回收效率范围对应的第一回收级别;
将所述内存管理分组的回收级别设置为所述第一回收级别;
将所述第三白名单中的各个应用对应的内存管理分组的回收级别调整为第二回收级别。
7.根据权利要求4至6任一项所述的方法,其特征在于,所述第二回收级别为最低回收级别。
8.根据权利要求2、4至6任一项所述的方法,其特征在于,所述回收效率范围与回收级别的对应关系中,回收效率范围对应的回收效率数值越高,回收效率范围对应的回收级别越高。
9.根据权利要求1所述的方法,其特征在于,根据内存回收的历史数据,获取当前所述电子设备中各个应用对应的内存管理分组的内存回收效率,包括:
对于每个应用,获取所述应用对应的内存管理分组在上一次回收中的内存扫描量和内存回收量;
根据所述内存扫描量和所述内存回收量,确定所述应用对应的内存管理分组的内存回收效率。
10.根据权利要求9所述的方法,其特征在于,根据所述内存扫描量和所述内存回收量,确定所述应用对应的内存管理分组的内存回收效率,包括:
根据所述应用对应的内存管理分组的文件页在上一次回收中的第一内存扫描量和第一内存回收量,确定所述内存管理分组的文件页的第一内存回收效率;
根据所述应用对应的内存管理分组的匿名页在上一次回收中的第二内存扫描量和第二内存回收量,确定所述内存管理分组的匿名页的第二内存回收效率;
根据所述第一内存回收效率和所述第二内存回收效率,确定所述应用对应的内存管理分组的内存回收效率。
11.根据权利要求10所述的方法,其特征在于,所述应用对应的内存管理分组的内存回收效率等于所述第一内存回收效率与第一系数之积,与所述第二内存回收效率的和。
12.根据权利要求11所述的方法,其特征在于,所述第一系数是根据文件页的回收速率与匿名页的回收速率的比值确定的。
13.根据权利要求1所述的方法,其特征在于,基于回收优先级和各内存管理分组的回收级别,确定需要遍历的目标内存管理分组,对所述目标内存管理分组进行扫描,对扫描到的可回收内存进行回收,包括:
根据回收优先级与回收级别的对应关系,确定初始回收优先级对应的第一目标回收级别;
将对应的回收级别等于或高于所述第一目标回收级别的内存管理分组确定为第一目标内存管理分组;
对所述第一目标内存管理分组进行扫描,对扫描到的第一可回收内存进行回收。
14.根据权利要求13所述的方法,其特征在于,根据回收优先级与回收级别的对应关系,确定初始回收优先级对应的第一目标回收级别之前,还包括:
根据本次回收的预设回收量,确定初始回收优先级,所述预设回收量越大,确定的初始回收优先级越低。
15.根据权利要求13所述的方法,其特征在于,还包括:
如果所述第一可回收内存小于预设回收量,根据所述初始回收优先级和调整步长,确定第一目标回收优先级,所述第一目标回收优先级低于所述初始回收优先级;
根据回收优先级与回收级别的对应关系,确定所述第一目标回收优先级对应的第二目标回收级别,所述第二目标回收级别等于或低于所述第一目标回收级别;
将对应的回收级别等于或高于所述第二目标回收级别的内存管理分组确定为第二目标内存管理分组;
对所述第二目标内存管理分组进行扫描,对扫描到的第二可回收内存进行回收。
16.根据权利要求15所述的方法,其特征在于,还包括:
如果所述第一可回收内存与所述第二可回收内存之和小于所述预设回收量,根据所述第一目标回收优先级和所述调整步长,确定第二目标回收优先级,所述第二目标回收优先级低于所述第一目标回收优先级;
根据回收优先级与回收级别的对应关系,确定所述第二目标回收优先级对应的第三目标回收级别,所述第三目标回收级别等于或低于所述第二目标回收级别;
将对应的回收级别等于或高于所述第三目标回收级别的内存管理分组确定为第三目标内存管理分组;
对所述第三目标内存管理分组进行扫描,对扫描到的第三可回收内存进行回收。
17.根据权利要求15或16所述的方法,其特征在于,所述调整步长为固定值;或者,所述调整步长按照如下方式确定:
根据本轮当前已回收的总内存回收量与所述预设回收量的差值,确定调整步长,所述差值越大,确定的调整步长的值越大;或者,根据本轮当前已回收的总内存回收量与所述预设回收量的差值与所述预设回收量的比值,确定调整步长,所述比值越大,确定的调整步长的值越大。
18.根据权利要求1所述的方法,其特征在于,如果满足内存回收流程触发条件,根据内存回收的历史数据,获取当前所述电子设备中各个应用对应的内存管理分组的内存回收效率之前,还包括:
监测到当前所述电子设备的空闲内存低于第一值,触发内存回收流程。
19.根据权利要求1所述的方法,其特征在于,内存回收效率越高的应用,对应的内存管理分组的回收级别越高,回收级别越高,回收几率越大。
20.根据权利要求1所述的方法,其特征在于,回收优先级越高,需要遍历的目标内存管理分组的回收级别越高,在内存管理分组的数量和对应回收级别不变的情况下,目标内存管理分组的数量越少。
21.根据权利要求1所述的方法,其特征在于,所述电子设备为手机、平板或电视。
22.一种电子设备,其特征在于,包括:
存储器和处理器,所述存储器与所述处理器耦合;
所述存储器存储有程序指令,当所述程序指令由所述处理器执行时,使得所述电子设备执行如权利要求1至21任一项所述的内存回收方法。
23.一种计算机可读存储介质,包括计算机程序,其特征在于,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1至21任一项所述的内存回收方法。
CN202310442272.6A 2023-04-23 2023-04-23 内存回收方法及电子设备 Active CN116185890B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310442272.6A CN116185890B (zh) 2023-04-23 2023-04-23 内存回收方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310442272.6A CN116185890B (zh) 2023-04-23 2023-04-23 内存回收方法及电子设备

Publications (2)

Publication Number Publication Date
CN116185890A CN116185890A (zh) 2023-05-30
CN116185890B true CN116185890B (zh) 2023-09-19

Family

ID=86440645

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310442272.6A Active CN116185890B (zh) 2023-04-23 2023-04-23 内存回收方法及电子设备

Country Status (1)

Country Link
CN (1) CN116185890B (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103713882A (zh) * 2013-12-20 2014-04-09 华为技术有限公司 一种数据换入内存的方法和装置
CN108205498A (zh) * 2017-08-01 2018-06-26 珠海市魅族科技有限公司 内存回收方法及装置、计算机装置及计算机可读存储介质
US10346313B1 (en) * 2017-01-21 2019-07-09 Virtuozzo International Gmbh Memory reclaim management for virtual machines
CN110134652A (zh) * 2019-05-10 2019-08-16 Oppo广东移动通信有限公司 缓存文件的回收方法、装置、电子设备及存储介质
CN110727606A (zh) * 2019-09-27 2020-01-24 Oppo(重庆)智能科技有限公司 内存回收方法、装置以及电子设备
CN110727607A (zh) * 2019-09-27 2020-01-24 Oppo(重庆)智能科技有限公司 内存回收方法、装置以及电子设备
CN111782397A (zh) * 2020-07-01 2020-10-16 浪潮云信息技术股份公司 一种Linux页面替换机制的屏蔽方法
CN111831440A (zh) * 2020-07-01 2020-10-27 Oppo广东移动通信有限公司 内存回收方法、装置、存储介质及电子设备
CN111949564A (zh) * 2020-08-13 2020-11-17 青岛海信传媒网络技术有限公司 一种内存交换方法及显示设备
CN113392037A (zh) * 2020-03-12 2021-09-14 深圳市万普拉斯科技有限公司 内存回收方法、装置、计算机设备和存储介质
CN113778662A (zh) * 2021-07-28 2021-12-10 荣耀终端有限公司 内存回收方法及装置

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103713882A (zh) * 2013-12-20 2014-04-09 华为技术有限公司 一种数据换入内存的方法和装置
US10346313B1 (en) * 2017-01-21 2019-07-09 Virtuozzo International Gmbh Memory reclaim management for virtual machines
CN108205498A (zh) * 2017-08-01 2018-06-26 珠海市魅族科技有限公司 内存回收方法及装置、计算机装置及计算机可读存储介质
CN110134652A (zh) * 2019-05-10 2019-08-16 Oppo广东移动通信有限公司 缓存文件的回收方法、装置、电子设备及存储介质
CN110727606A (zh) * 2019-09-27 2020-01-24 Oppo(重庆)智能科技有限公司 内存回收方法、装置以及电子设备
CN110727607A (zh) * 2019-09-27 2020-01-24 Oppo(重庆)智能科技有限公司 内存回收方法、装置以及电子设备
CN113392037A (zh) * 2020-03-12 2021-09-14 深圳市万普拉斯科技有限公司 内存回收方法、装置、计算机设备和存储介质
CN111782397A (zh) * 2020-07-01 2020-10-16 浪潮云信息技术股份公司 一种Linux页面替换机制的屏蔽方法
CN111831440A (zh) * 2020-07-01 2020-10-27 Oppo广东移动通信有限公司 内存回收方法、装置、存储介质及电子设备
CN111949564A (zh) * 2020-08-13 2020-11-17 青岛海信传媒网络技术有限公司 一种内存交换方法及显示设备
CN113778662A (zh) * 2021-07-28 2021-12-10 荣耀终端有限公司 内存回收方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
进程级差异化动态内存管理;左泽;中国优秀硕士学位论文全文数据库 信息科技辑;I137-22 *

Also Published As

Publication number Publication date
CN116185890A (zh) 2023-05-30

Similar Documents

Publication Publication Date Title
CN109992402B (zh) 内存处理方法和装置、电子设备、计算机可读存储介质
CN111966492B (zh) 内存回收方法、装置、电子设备及计算机可读存储介质
CN109992523B (zh) 内存处理方法和装置、电子设备、计算机可读存储介质
CN111158910A (zh) 内存管理方法、装置、存储介质及电子设备
CN108205473B (zh) 内存处理方法及装置、计算机装置及计算机可读存储介质
CN113722087B (zh) 虚拟内存管理方法和电子设备
CN108205498B (zh) 内存回收方法及装置、计算机装置及计算机可读存储介质
CN105511806B (zh) 处理写请求的方法和移动终端
CN111078586B (zh) 内存回收方法、装置、存储介质及电子设备
CN108205471B (zh) 内存回收方法及装置、计算机装置及计算机可读存储介质
CN110764906A (zh) 内存回收处理方法、装置、电子设备以及存储介质
CN114730288A (zh) 一种内存的管理方法及电子设备
CN110727605B (zh) 内存回收方法、装置以及电子设备
CN116185890B (zh) 内存回收方法及电子设备
CN111459410A (zh) 内存空间分配方法、装置、电子设备及存储介质
CN114253737B (zh) 电子设备及其内存回收方法、介质
CN116166573B (zh) 控制内存回收的方法、电子设备及存储介质
CN116049021B (zh) 存储空间管理方法、电子设备及计算机可读存储介质
CN116737350A (zh) 一种管理对象的方法以及装置
CN116049113B (zh) 文件系统的整理方法、电子设备及计算机可读存储介质
CN116661678B (zh) 数据转储方法及电子设备
CN116049025B (zh) 动态调整内存回收gc参数的方法、电子设备及存储介质
CN117130458A (zh) 数据处理方法、电子设备及存储介质
CN117724826A (zh) 进程间通信的内存分配方法、电子设备及存储介质
CN116719752A (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