CN108073520A - 一种内存控制方法及装置 - Google Patents

一种内存控制方法及装置 Download PDF

Info

Publication number
CN108073520A
CN108073520A CN201610991706.8A CN201610991706A CN108073520A CN 108073520 A CN108073520 A CN 108073520A CN 201610991706 A CN201610991706 A CN 201610991706A CN 108073520 A CN108073520 A CN 108073520A
Authority
CN
China
Prior art keywords
memory
threshold value
amount
stage
invasion
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
Application number
CN201610991706.8A
Other languages
English (en)
Other versions
CN108073520B (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.)
Shenzhen Yayue Technology Co ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201610991706.8A priority Critical patent/CN108073520B/zh
Publication of CN108073520A publication Critical patent/CN108073520A/zh
Application granted granted Critical
Publication of CN108073520B publication Critical patent/CN108073520B/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
    • 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/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/5022Mechanisms to release resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System (AREA)

Abstract

本发明提供一种内存控制方法及装置,所述方法包括:创建内存检查器,所述内存检查器运行于独立线程;接收内存检查请求,触发内存检查事件;判断应用是否处于前台运行状态,若是,比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值的大小关系,根据比较结果,进行内存控制;所述预设分阶段阈值基于应用内存目标阶段曲线设立;若否,依据系统内存事件级别做出相应强度的内存回收。本发明依据应用内存目标阶段曲线实现对前台应用实现更加精细的内存管理,能够在应用层面上解决应用不断索要系统内存与系统内存总量有限的矛盾,能够有效利用硬件资源,同时提升用户体验。

Description

一种内存控制方法及装置
技术领域
本发明属于智能设备管理技术领域,具体涉及一种内存控制方法及装置。
背景技术
内存作为应用运行的基本资源,影响着应用的性能、稳定性、流畅度等用户可感知指标。一方面应用为了达成用户满意的可感知指标,不断的向系统索要内存;另一方面系统内存总量总是有限的,这就构成了一个矛盾。系统为了保障高优先级应用的运行,在内存不足的时候总是需要杀掉一部分低优先级应用以使得可用内存维持在必要范围内。因此,内存需要得到控制,以避免应用被系统所杀,保障应用本身的合理内存使用,防止应用物理内存膨胀而导致系统杀掉其他低优先级应用甚至应用本身,防止应用逻辑内存膨胀引发崩溃。
但是,现有技术中,系统内存的清理事件是对所有应用进行统一地清理,清理不包含对某一个应用的内存管理操作,当系统内存占用过多时,会启动系统清理内存事件,系统的内存事件是依据系统全局的物理内存状态来发出的,并不能反映应用本身的逻辑内存占用情况,这的实际上无法满足对内存的精细管理要求,无法平衡应用不断索要内存与内存总量有限之间的矛盾。
发明内容
发明人在不断实践和摸索过程中,发现应用内存随着使用阶段不同,对于内存用量具有不同的需求,需求量可以通过目标阶段曲线来体现,这条曲线将应用内存控制分为四个阶段:侵略增长阶段、和缓增长阶段、前后台切换阶段以及后台阶段,每个阶段实施不同的内存控制策略,以达到不同的内存控制企图。
申请人基于上述发现提出一种内存控制方法,所述方法包括如下步骤:
创建内存检查器,所述内存检查器运行于独立线程;接收内存检查请求,触发内存检查事件;判断应用是否处于前台运行状态,若应用处于前台运行状态,比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值的大小关系,根据比较结果,进行内存控制;所述预设分阶段阈值基于应用内存目标阶段曲线设立;若应用不处于前台运行状态,依据系统内存事件级别做出相应强度的内存回收。
优选地,所述预设分阶段阈值包括:侵略增长阈值、和缓增长阈值、剩余内存阈值;所述比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值,根据比较结果,进行内存控制步骤包括:比较所述当前应用占用内存量与侵略增长阈值、和缓增长阈值的大小关系;比较系统剩余内存量、系统剩余内存量与系统剩余虚拟内存量的大小关系;根据比较结果判断是否进行内存回收。
优选地,所述比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值,根据比较结果,进行内存控制步骤包括如下子步骤:比较当前应用占用内存量与和缓增长阈值,若所述当前应用占用内存量大于所述和缓增长阈值,则进行内存回收;若所述当前应用占用内存量小于所述和缓增长阈值,则比较当前应用占用内存量与侵略增长阈值;比较当前应用占用内存量与侵略增长阈值;若当前应用占用内存量大于侵略增长阈值,则比较系统剩余内存量与剩余内存阈值;若当前应用占用内存量小于侵略增长阈值,则比较剩余虚拟内存值与剩余内存阈值;比较系统剩余内存量与剩余内存阈值,若系统剩余内存量小于剩余内存阈值,则进行内存回收;若系统剩余内存量大于剩余内存阈值,则比较剩余虚拟内存值与剩余内存阈值;比较剩余虚拟内存值与剩余内存阈值,若剩余虚拟内存值大于剩余内存阈值则不进行内存回收;否则,进行内存回收;比较剩余虚拟内存值与剩余内存阈值,若剩余虚拟内存值大于剩余内存阈值则不进行内存回收;否则,进行内存回收。
优选地,在进行所述内存回收或内存不回收操作后,跳转到比较所述当前应用占用内存量与所述和缓增长阈值步骤,并循环重复执行之后的比较步骤。
优选地,所述依据系统内存事件级别做出相应强度的内存回收步骤包括:根据系统内存事件的轻度级别、中度级别、重度级别,对应地进行轻度级别、中度级别和重度级别的内存回收。
优选地,所述根据系统内存事件的轻度级别、中度级别、重度级别,对应地进行轻度级别、中度级别和重度级别的内存回收过程为:判断所述系统内存事件是否是轻度级别,若是则进行轻度级别的内存回收;若否则判断所述系统内存事件是否是中度级别,若是则进行中度级别的内存回收;若否则进行重度级别的内存回收。
优选地,在进行所述创建内存检查进程步骤之前,还包括:依据所述目标阶段曲线设定所述预设分阶段阈值步骤。
优选地,所述预设分阶段阈值包括:侵略增长阈值、和缓增长阈值、剩余内存阈值;所述步骤包含如下子步骤:根据目标阶段曲线的侵略增长阶段设定侵略增长阈值;根据目标阶段曲线的侵略增长阶段设定和缓增长阈值;根据系统内存情况设定剩余内存阈值。
优选地,当应用从前台转向后台时,触发前后台切换步骤;所述前后台切换步骤包括:应用禅让出显示相关内存,等待接收系统内存事件,并在接收到内存事件时释放内存。
优选地,所述接收内存检查请求,触发内存检查事件步骤中,接收到的内存检查请求包括:接收内存检查器接收到的系统内存事件;内存检查器自身的定时检查事件;内存检查器接收到的应用内模块的内存检查请求事件。
本发明还提出一种内存控制装置,所述装置包括如下模块:
内存检查器创建模块,用于创建内存检查器,所述内存检查器运行于独立线程;内存检查触发模块,用于接收内存检查请求,触发内存检查事件;应用状态判断模块,用于判断所述应用是否处于前台运行状态;前台内存控制模块,用于比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值的大小关系,根据比较结果,进行内存控制;所述预设分阶段阈值基于应用内存目标阶段曲线设立;后台内存控制模块,用于依据系统内存事件级别做出相应强度的内存回收。
优选地,所述预设分阶段阈值包括:侵略增长阈值、和缓增长阈值、剩余内存阈值;前台内存控制模块,用于比较所述当前应用占用内存量与侵略增长阈值、和缓增长阈值的大小关系;比较系统剩余内存量、系统剩余内存量与系统剩余虚拟内存量的大小关系;根据比较结果判断是否进行内存回收。
优选地,所述前台内存控制模块包括如下子模块:和缓增长阈值比较模块,用于比较当前应用占用内存量与和缓增长阈值,若所述当前应用占用内存量大于所述和缓增长阈值,则进行内存回收;若所述当前应用占用内存量小于所述和缓增长阈值,则比较当前应用占用内存量与侵略增长阈值;侵略增长阈值比较模块,用于比较当前应用占用内存量与侵略增长阈值;若当前应用占用内存量大于侵略增长阈值,则比较系统剩余内存量与剩余内存阈值;若当前应用占用内存量小于侵略增长阈值,则比较剩余虚拟内存值与剩余内存阈值;第一剩余内存阈值比较模块,用于比较系统剩余内存量与剩余内存阈值,若系统剩余内存量小于剩余内存阈值,则进行内存回收;若系统剩余内存量大于剩余内存阈值,则比较剩余虚拟内存值与剩余内存阈值;第二剩余内存阈值比较模块,用于比较剩余虚拟内存值与剩余内存阈值,若剩余虚拟内存值大于剩余内存阈值则不进行内存回收;否则,进行内存回收。
优选地,前台内存控制模块还包含跳转子模块,用于在前台内存控制模块进行所述内存回收或内存不回收操作后,跳转到和缓增长阈值比较模块。
优选地,所述后台内存控制模块根据系统内存事件的轻度级别、中度级别、重度级别,对应地进行轻度级别、中度级别和重度级别的内存回收。
优选地,所述后台内存控制模块包括:轻度内存回收子模块,用于判断所述系统内存事件是否是轻度级别,若是则进行轻度级别的内存回收;中度内存回收子模块,用于判断所述系统内存事件是否是中度级别,若是则进行中度级别的内存回收;重度内存回收子模块,用于判断所述系统内存事件是否是中度级别,若是则进行中度级别的内存回收。
优选地,所述装置还包括分阶段阈值预设定模块,用于依据所述目标阶段曲线设定所述预设分阶段阈值。
优选地,所述分阶段阈值预设定模块包括:侵略增长阈值设定子模块、和缓增长阈值设定子模块、剩余内存阈值设定子模块;侵略增长阈值设定子模块,用于根据目标阶段曲线的侵略增长阶段设定侵略增长阈值;和缓增长阈值设定子模块,用于根据目标阶段曲线的侵略增长阶段设定和缓增长阈值;剩余内存阈值设定子模块,用于根据系统内存情况设定剩余内存阈值。
优选地,所述装置包括切换子模块,用于在所述内存检查触发模块,接收到前后台切换的系统事件时,关闭前台内存控制模块,禅让前台内存控制模块所占用的显示内存,并开启后台内存控制模块。
优选地,内存检查触发模块,接收到的内存检查请求包括:来自系统内存事件的内存检查请求;内存检查器自身的定时检查事件;来自应用内模块的内存检查请求。
本发明能够达到的有益效果:
本发明依据应用内存目标阶段曲线实现对前台应用实现更加精细的内存管理,能够在应用层面上解决应用不断索要系统内存与系统内存总量有限的矛盾,能够有效利用硬件资源,同时提升用户体验。
附图说明
下面结合附图对本发明的具体实施方式作进一步详细的说明;
图1是本发明实施例提供的内存目标阶段曲线图。
图2是本发明实施例一提供的内存控制方法示意图。
图3是本发明实施例二提供的内存控制方法流程示意图。
图4是本发明实施例二提供的内存控制方法的子步骤流程示意图。
图5是本发明实施例二提供的内存控制方法的子步骤流程示意图。
图6是本发明实施例三提供的内存控制装置结构示意图。
图7是本发明实施例三提供的内存控制装置子模块结构示意图。
图8是本发明实施例三提供的内存控制装置子模块结构示意图。
图9是本发明实施例四提供的内存控制方法流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明涉及的技术术语解释如下:
前台应用:用户当前正在操作的应用,当用户不使用时,其切换为后台应用切换。
后台应用:被用户打开,未处于被操作状态,但是也未关闭的应用,当用户操作时,其切换为前台应用。
内存回收:系统对分配到应用的内存全部或者部分收回的操作。
内存回收粒度:系统在内存回收时的最小单位,例如对某些应用而言,回收的内存可以是应用某个页面的内存,也可以是应用某个页面中的某类元素。
轻度内存回收,根据系统事件级别进行内存回收的程度,轻度级别对应系统回收内存量较少。
中度内存回收,根据系统事件级别进行内存回收的程度,中度级别对应系统回收内存量适中。
重度内存回收,根据系统事件级别进行内存回收的程度,中度级别对应系统回收内存量适中。
轻度内存回收、重度内存回收和重度内存回收都是应用处于后台事发生的事件,回收的主要目的是为了保证前台应用具有足够的剩余内存量,同时后台应用不会由于占用过多的内存而被系统事件强行关闭。
逐步内存回收,逐步内存回收不同于轻度内存回收、重度内存回收和重度内存回收,其发生于前台应用,回收的主要目的是使当前应用内存符合内存目标阶段曲线的对应阶段。逐步内存回收是一个实时的、动态的过程,回收量也与应用所处的阶段有关。
内存目标阶段曲线:本发明发明人提出的指导应用内存控制的目标曲线,应用内存控制的目的是使得应用的实际内存曲线贴合目标阶段曲线。依据应用所处的目标位置,包括四个阶段。
线程:有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
本发明实施例提供的内存控制方法,基于应用内存的目标阶段曲线实现对内存的控制。如图1所示,应用内存的目标阶段曲线包括四个阶段,分别为:
阶段一,为侵略增长阶段,在这个阶段忽略系统内存事件,确保应用自身的内存占用达到可接受水平。
阶段二,为和缓增长阶段,在这个阶段保证一定的剩余内存水平,确保第优先级应用不会因为内存不足被系统所杀。
阶段三,为前后台切换阶段,在这个阶段禅让出显示相关内存,保障前台应用的内存占用。
阶段四,为后台阶段,在这个阶段接收系统内存事件并释放足够多的内存,以免应用被系统所杀。
本发明实施例提供的内存控制方法,适用于包括Windows系统、Android系统以及IOS系统等具有前后台应用程序的系统。
实施例1:
本实施例提供一种内存控制方法,如图2所示,方法包括如下步骤:
步骤S100,系统进行参数初始化,初始化主要是基于目标阶段曲线的各个阶段设定阈值,阈值包括侵略增长阈值、和缓增长阈值、剩余内存阈值。
侵略增长阈值、和缓增长阈值用于划分目标阶段曲线的侵略增长阶段以及和缓增长阶段,当应用占用的内存值小于侵略增长阈值时,应用处于目标阶段曲线的侵略增长阶段。即,当应用处于前台,并且内存占用低于这个阈值时,为侵略增长阶段。
当应用的内存值大于侵略增长阈值,且小于所述和缓增长阈值时,应用处于目标阶段曲线的和缓增长阶段。即,当应用处于前台,内存占用高于侵略增长阈值并且低于和缓增长阈值,为和缓增长阶段。
剩余内存阈值,则是为了保证在和缓增加阶段,不会出现由于剩余内存过低而“杀死”低优先级应用,因此,在和缓增加阶段,系统的剩余内存量与剩余内存比较,一旦剩余内存低于这个阈值,触发内存回收以保证剩余内存高于这个阈值。
上述方法可以弥补单纯依赖系统内存事件的不足,因为系统内存事件不能反映应用的逻辑内存占用情况,前台应用接收到系统内存事件可能意味着已经有后台应用被系统所杀。
步骤S101,创建内存检查器,所述内存检查器运行于独立线程。
步骤S102,接收内存检查请求,触发内存检查事件。
创建一个内存检查器,该内存检查器运行在独立线程,并且接收应用内各模块以及系统的内存检查请求。
内存检查器主要响应三类事件,从而触发内存检查事件:
第一类事件,内存检查器接收到的系统内存事件。当内存检查器接收到系统内存事件时会触发内存检查事件。
第二类事件,内存检查器自身的定时检查事件。内存检查器自身会按照预定时序触发内存检查事件。
第三类事件,内存检查器接收到的应用内模块的内存检查请求事件。当应用内模块出现内存使用需求时,会发出内存检查请求,内存检查器接收到来自应用内模块的内存检查请求会触发内存检查事件。
步骤S103,判断应用是否处于前台,根据判断结果使用不同的内存回收方法。如果应用处于后台,则进行步骤S104,按照应用接收到的系统内存事件级别来进行相应级别的回收;如果应用处于前台,则进行步骤S105,根据应用所占用内存量处于目标阶段曲线的具体阶段,进行内存回收。
在内存检查器触发内存检查事件后,判断应用是否处于前台运行,若否,即应用目前在后台运行,则依据时间级别做出相应强度的回收;若是,即应用目前在前台运行,则进入阈值比较阶段以判断内存回收方法。
步骤S104,如果应用处于后台,那么按照应用接收到的系统内存事件级别来进行相应级别的回收,如果系统内存事件级别为轻度级别,则进行轻度回收;如果系统内存事件级别为中度级别,则进行中度回收;如果系统内存事件级别为重度级别,则进行重度回收。
步骤S105,根据应用所占用内存量处于目标阶段曲线的具体阶段,进行内存回收。
如果目前应用处于前台,触发内存检查时,根据应用所占用内存量处于目标阶段曲线的具体阶段采取不同的内存回收方法。
如果当前内存值低于侵略增长阈值,即处于目标阶段曲线的侵略增长阶段,不做任何内存回收动作。
如果当前内存值高于侵略增长阈值、但是低于和缓增长阈值,即处于目标阶段曲线的和缓增长阶段;此时,需要再判断剩余内存值是否小于剩余内存阈值;若是,需要做适量的回收直到当前剩余内存值不小于剩余内存阈值;若否,不做任何内存回收动作。
如果当前内存值高于和缓增长阈值,则进行内存回收动作,直到当前内存值小于和缓增长阈值。
在步骤S105中,内存回收是逐步回收的过程,逐步回收是将应用占用的内存进行最小回收粒度的分割,例如可以分割应用显示页面的元素级别,并对分割后的内存按照最小回收粒度地回收。
实施例2:
本实施例提供一种应用内存控制方法,如图3所示,方法包括如下步骤:
S201,创建内存检查器,所述内存检查器运行于独立线程。
S202,接收内存检查请求,触发内存检查事件。
S203,判断所述应用是否处于前台运行状态,若是,进行步骤S204,若否,进行步骤S205。
S204,比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值的大小关系,根据比较结果,进行内存控制;所述预设分阶段阈值基于应用内存目标阶段曲线设立。
S205,依据系统内存事件级别做出相应强度的内存回收。
在所述步骤S201之前还包括,系统初始化步骤S200。
S200,依据所述目标阶段曲线设定所述预设分阶段阈值。所述预设分阶段阈值包括:侵略增长阈值、和缓增长阈值、剩余内存阈值。当所述应用占用的内存值小于侵略增长阈值时,应用处于目标阶段曲线的侵略增长阶段;当所述应用的内存值大于侵略增长阈值,小于所述和缓增长阈值时,应用处于目标阶段曲线的和缓增长阶段;剩余内存阈值,在和缓增长阶段,系统的剩余内存量与剩余内存阈值比较,一旦剩余内存低于这个阈值,触发内存回收以保证剩余内存高于这个阈值。
S202,在所述步骤S202中内存检查器接收内存检查请求,内存检查请求包括如下几类:接收内存检查器接收到的系统内存事件;内存检查器自身的定时检查事件;内存检查器接收到的应用内模块的内存检查请求事件。
步骤S204中,预设分阶段阈值包括:侵略增长阈值、和缓增长阈值、剩余内存阈值。比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值,根据比较结果,进行内存控制包括:比较所述当前应用占用内存量与侵略增长阈值、和缓增长阈值的大小关系;比较系统剩余内存量、系统剩余内存量与系统剩余虚拟内存量的大小关系;根据比较结果判断是否进行内存回收。
如图4所示,步骤S204可具体分为如下子步骤:
S2041,比较当前应用占用内存量与和缓增长阈值,若所述当前应用占用内存量大于所述和缓增长阈值,则进行内存回收;之后跳转至所述步骤S2041;若所述当前应用占用内存量小于所述和缓增长阈值,则进行步骤S2042。
S2042,比较当前应用占用内存量与侵略增长阈值。若当前应用占用内存量大于侵略增长阈值,则进行步骤S2043;若当前应用占用内存量小于侵略增长阈值,则进行步骤S2045。
S2043,比较系统剩余内存量与剩余内存阈值,若系统剩余内存量小于剩余内存阈值,则进行内存回收,之后跳转至所述步骤S2041;若系统剩余内存量大于剩余内存阈值,则跳转至步骤S2044。
S2044,比较剩余虚拟内存值与剩余内存阈值,若大于则不进行内存回收,若小于,则进行内存回收;之后跳转至所述步骤S2041。
S2045,比较剩余虚拟内存值与剩余内存阈值,若大于则不进行内存回收,若小于,则进行内存回收;之后跳转至所述步骤S2041。
所述步骤S2041-S2045可以是一个循环的执行的过程,在进行内存回收之后,跳转至步骤S2041以继续循环检测。
在步骤S204中,内存回收是逐步回收的过程,逐步回收是将应用占用的内存进行最小回收粒度的分割,例如可以分割应用显示页面的元素级别,并对分割后的内存按照最小回收粒度地回收。
步骤S205中,根据系统内存事件的轻度级别、中度级别、重度级别,对应地进行轻度级别、中度级别和重度级别的内存回收。
如图5所示,步骤S205可具体分为如下子步骤:
S2051,判断所述系统内存事件是否是轻度级别,若是则进行轻度级别的内存回收。
S2052,若否,则判断所述系统内存事件是否是中度级别,若是则进行中度级别的内存回收。
S2053,若否,则进行重度级别的内存回收。
在系统执行步骤S204的过程中,内存检查器会接收系统事件,当出现应用从前台转向后台的事件时,会响应该事件,触发前后台切换步骤S206。
S206,应用由前台转向后台,禅让出显示相关内存,结束步骤S204对应的线程,创建步骤S205所对应的线程,并在该线程内等待接收系统内存事件,并在接收到内存事件时释放内存。在上述过程中,步骤S204和步骤S205是分别实施于独立线程的,它们和内存管理器之间的线程单独进行,只有当接收到系统事件触发时,才会发生对应的操作。
在一些实施例中,在步骤S205进行的过程中,内存检查器会接收系统事件,当出现应用从后台转向前台的事件时,会响应该事件,触发后前台切换步骤S207。
S207,应用由后台转向前台,分配显示相关内存,结束步骤S205对应的线程,创建步骤S204所对应的线程,并开启步骤S204所对应的分支步骤。
实施例3:
本实施例提供一种内存控制装置,如图6所示,所述装置包括如下模块:
内存检查器创建模块,用于创建内存检查器,所述内存检查器运行于独立线程;
内存检查触发模块,用于接收内存检查请求,触发内存检查事件;
应用状态判断模块,用于判断所述应用是否处于前台运行状态;
前台内存控制模块,用于比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值的大小关系,根据比较结果,进行内存控制;所述预设分阶段阈值基于应用内存目标阶段曲线设立;
后台内存控制模块,用于依据系统内存事件级别做出相应强度的内存回收。
在具体的实施过程中,所述预设分阶段阈值包括:侵略增长阈值、和缓增长阈值、剩余内存阈值。前台内存控制模块,用于比较所述当前应用占用内存量与侵略增长阈值、和缓增长阈值的大小关系;比较系统剩余内存量、系统剩余内存量与系统剩余虚拟内存量的大小关系;根据比较结果判断是否进行内存回收。
在一个具体的实施过程中,如图7所示,所述前台内存控制模块包括如下子模块:
和缓增长阈值比较模块,用于比较当前应用占用内存量与和缓增长阈值,若所述当前应用占用内存量大于所述和缓增长阈值,则进行内存回收;若所述当前应用占用内存量小于所述和缓增长阈值,则比较当前应用占用内存量与侵略增长阈值;
侵略增长阈值比较模块,用于比较当前应用占用内存量与侵略增长阈值;若当前应用占用内存量大于侵略增长阈值,则比较系统剩余内存量与剩余内存阈值;若当前应用占用内存量小于侵略增长阈值,则比较剩余虚拟内存值与剩余内存阈值;
第一剩余内存阈值比较模块,用于比较系统剩余内存量与剩余内存阈值,若系统剩余内存量小于剩余内存阈值,则进行内存回收;若系统剩余内存量大于剩余内存阈值,则比较剩余虚拟内存值与剩余内存阈值;
第二剩余内存阈值比较模块,用于比较剩余虚拟内存值与剩余内存阈值,若剩余虚拟内存值大于剩余内存阈值则不进行内存回收;否则,进行内存回收。
在一个具体的实施过程中,所述前台内存控制模块包括如下子模块:跳转子模块,用于在前台内存控制模块进行所述内存回收或内存不回收操作后,跳转到和缓增长阈值比较模块。
在一个具体的实施过程中,后台内存控制模块根据系统内存事件的轻度级别、中度级别、重度级别,对应地进行轻度级别、中度级别和重度级别的内存回收。
在一个具体的实施过程中,如图8所示,后台内存控制模块包括:
轻度内存回收子模块,用于判断所述系统内存事件是否是轻度级别,若是则进行轻度级别的内存回收;
中度内存回收子模块,用于判断所述系统内存事件是否是中度级别,若是则进行中度级别的内存回收;
重度内存回收子模块,用于判断所述系统内存事件是否是中度级别,若是则进行中度级别的内存回收。
在一个具体的实施过程中,装置还包括分阶段阈值预设定模块,用于依据所述目标阶段曲线设定所述预设分阶段阈值。
在一个具体的实施过程中,所述分阶段阈值预设定模块包括:侵略增长阈值设定子模块、和缓增长阈值设定子模块、剩余内存阈值设定子模块;
侵略增长阈值设定子模块,用于根据目标阶段曲线的侵略增长阶段设定侵略增长阈值;
和缓增长阈值设定子模块,用于根据目标阶段曲线的侵略增长阶段设定和缓增长阈值;
剩余内存阈值设定子模块,用于根据系统内存情况设定剩余内存阈值。
在一个具体的实施过程中,所述前台内存控制模块运行于独立的线程。
在一个具体的实施过程中,内存检查触发模块,接收到的内存检查请求包括:来自系统内存事件的内存检查请求;内存检查器自身的定时检查事件;来自应用内模块的内存检查请求。
实施例4:
本实施例提供一种内存控制方法,如图9所示,内存控制方法包括如下步骤:
设定侵略增长阀值,当应用处于前台,并且内存占用低于这个阀值时,为侵略增长阶段。
设定和缓增长阀值,当应用处于前台,内存占用高于侵略增长阀值并且低于和缓增长阀值,为和缓增长阶段
设定剩余内存阀值,当应用处于和缓增长阶段时,一旦剩余内存低于这个阀值,可能造成系统内存不足因而杀掉低优先级应用,因此需要触发内存回收以保证剩余内存高于这个阀值。
创建一个运行在独立线程的内存检查器,当应用处于前台时主动检查应用内存情况并且接受应用内各模块以及系统的内存检查请求。这可以弥补单纯依赖系统内存事件的不足:系统内存事件不能反映应用的逻辑内存占用情况;前台应用接受到系统内存事件可能意味着已经有后台应用被系统所杀。
当应用处于前台,并且内存检查器接受到系统内存事件、或者定时检查事件、或者应用内模块的内存检查请求时,触发内存检查。
应用处于前台触发内存检查时,如果当前内存值低于侵略增长阀值,不做任何内存回收动作。
应用处于前台触发内存检查时,如果当前内存值大于侵略增长阀值并且小于和缓增长阀值,如果此时的剩余内存值小于剩余内存阀值,需要做适量的回收直到当前剩余内存值不小于剩余内存阀值,否则不做任何内存回收动作。
应用处于前台触发内存检查时,如果当前内存值大于和缓增长阀值,需要做适量内存回收直到当前内存值小于和缓增长阀值。
应用处于前台触发内存检查时,如果当前逻辑内存剩余值小于剩余内存阀值,需要做适量内存回收直到当前逻辑内存剩余值不小于剩余内存阀值。
应用切换到后台时,回收显示相关内存。
应用处于后台时,由于对前台应用对于内存的需求并不了解,应用本身对于内存的申请也并不活跃,不再进行主动内存检查,转而响应系统内存事件并释放出足够多的内存以避免被系统所杀。
根据上述步骤,可以解决现有技术中的如下内存管理问题:
如果应用身处前台,本身内存占用较少却由于后台应用占用内存过多接收到系统内存事件,进行相应强度的内存回收。这会导致不能充分使用系统内存,影响用户的流畅度等可感受指标。
如果应用身处前台,接受到系统事件时不做相应的内存回收,可能会导致应用本身内存的过分膨胀而导致其他低优先级应用被杀。这会导致用户切换到其他应用时的负面体验。
如果应用身处前台,因本身内存占用过多,接受到系统事件并做相应的内存回收。由于应用的回收粒度和系统内存事件的级别是等同的,当系统发出重度级别的内存事件,应用便做重度的内存回收。应用在回收内存时缺乏对本身内存占用情况的判断,这可能会导致对内存的过度回收,影响用户体验。
系统的内存事件是依据系统全局的物理内存状态来发出的,并不能反映应用本身的逻辑内存占用情况,有可能出现应用的物理内存占用不高却因为逻辑内存空间不足而崩溃的情形。
在上述过程中,还可以设定两个不同的内存检查器,分别工作于不同的线程,并且用于单独检查前台应用和后台应用。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (14)

1.一种内存控制方法,其特征在于,所述方法包括如下步骤:
创建内存检查器,所述内存检查器运行于独立线程;
接收内存检查请求,触发内存检查事件;
判断应用是否处于前台运行状态;
若应用处于前台运行状态,比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值的大小关系,根据比较结果,进行内存控制;所述预设分阶段阈值基于应用内存目标阶段曲线设立;
若应用不处于前台运行状态,依据系统内存事件级别做出相应强度的内存回收。
2.根据权利要求1所述的内存控制方法,其特征在于,在进行所述创建内存检查进程步骤之前,还包括:依据所述目标阶段曲线设定所述预设分阶段阈值。
3.根据权利要求1所述的内存控制方法,其特征在于,所述预设分阶段阈值包括:侵略增长阈值、和缓增长阈值、剩余内存阈值;
所述比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值,根据比较结果,进行内存控制步骤包括:
比较所述当前应用占用内存量与侵略增长阈值、和缓增长阈值的大小关系;比较系统剩余内存量、系统剩余内存量与系统剩余虚拟内存量的大小关系;根据比较结果判断是否进行内存回收。
4.根据权利要求3所述的内存控制方法,其特征在于,所述比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值,根据比较结果,进行内存控制步骤包括如下子步骤:
比较当前应用占用内存量与和缓增长阈值,若所述当前应用占用内存量大于所述和缓增长阈值,则进行内存回收;若所述当前应用占用内存量小于所述和缓增长阈值,则比较当前应用占用内存量与侵略增长阈值;
比较当前应用占用内存量与侵略增长阈值;若当前应用占用内存量大于侵略增长阈值,则比较系统剩余内存量与剩余内存阈值;若当前应用占用内存量小于侵略增长阈值,则比较剩余虚拟内存值与剩余内存阈值;
比较系统剩余内存量与剩余内存阈值,若系统剩余内存量小于剩余内存阈值,则进行内存回收;若系统剩余内存量大于剩余内存阈值,则比较剩余虚拟内存值与剩余内存阈值;
比较剩余虚拟内存值与剩余内存阈值,若剩余虚拟内存值大于剩余内存阈值则不进行内存回收;否则,进行内存回收;
比较剩余虚拟内存值与剩余内存阈值,若剩余虚拟内存值大于剩余内存阈值则不进行内存回收;否则,进行内存回收。
5.根据权利要求4所述的内存控制方法,其特征在于,在进行所述内存回收或内存不回收操作后,跳转到比较所述当前应用占用内存量与所述和缓增长阈值步骤,并循环重复执行之后的比较步骤。
6.根据权利要求1所述的内存控制方法,其特征在于,所述预设分阶段阈值包括:侵略增长阈值、和缓增长阈值、剩余内存阈值;所述依据所述目标阶段曲线设定所述预设分阶段阈值步骤包括如下子步骤:
根据目标阶段曲线的侵略增长阶段设定侵略增长阈值;
根据目标阶段曲线的侵略增长阶段设定和缓增长阈值;
根据系统内存情况设定剩余内存阈值。
7.根据权利要求1所述的内存控制方法,其特征在于:当应用从前台转向后台时,触发前后台切换步骤;所述前后台切换步骤包括:应用禅让出显示相关内存,等待接收系统内存事件,并在接收到内存事件时释放内存。
8.一种内存控制装置,其特征在于,所述装置包括如下模块:
内存检查器创建模块,用于创建内存检查器,所述内存检查器运行于独立线程;
内存检查触发模块,用于接收内存检查请求,触发内存检查事件;
应用状态判断模块,用于判断所述应用是否处于前台运行状态;
前台内存控制模块,用于比较应用占用内存量、系统剩余内存量、系统剩余虚拟内存量与预设分阶段阈值的大小关系,根据比较结果,进行内存控制;所述预设分阶段阈值基于应用内存目标阶段曲线设立;
后台内存控制模块,用于依据系统内存事件级别做出相应强度的内存回收。
9.根据权利要求8所述的内存控制装置,其特征在于,所述装置还包括分阶段阈值预设定模块,用于依据所述目标阶段曲线设定所述预设分阶段阈值。
10.根据权利要求8所述的内存控制装置,其特征在于,所述预设分阶段阈值包括:侵略增长阈值、和缓增长阈值、剩余内存阈值;
前台内存控制模块,用于比较所述当前应用占用内存量与侵略增长阈值、和缓增长阈值的大小关系;比较系统剩余内存量、系统剩余内存量与系统剩余虚拟内存量的大小关系;根据比较结果判断是否进行内存回收。
11.根据权利要求10所述的内存控制装置,其特征在于,所述前台内存控制模块包括如下子模块:
和缓增长阈值比较模块,用于比较当前应用占用内存量与和缓增长阈值,若所述当前应用占用内存量大于所述和缓增长阈值,则进行内存回收;若所述当前应用占用内存量小于所述和缓增长阈值,则比较当前应用占用内存量与侵略增长阈值;
侵略增长阈值比较模块,用于比较当前应用占用内存量与侵略增长阈值;若当前应用占用内存量大于侵略增长阈值,则比较系统剩余内存量与剩余内存阈值;若当前应用占用内存量小于侵略增长阈值,则比较剩余虚拟内存值与剩余内存阈值;
第一剩余内存阈值比较模块,用于比较系统剩余内存量与剩余内存阈值,若系统剩余内存量小于剩余内存阈值,则进行内存回收;若系统剩余内存量大于剩余内存阈值,则比较剩余虚拟内存值与剩余内存阈值;
第二剩余内存阈值比较模块,用于比较剩余虚拟内存值与剩余内存阈值,若剩余虚拟内存值大于剩余内存阈值则不进行内存回收;否则,进行内存回收。
12.根据权利要求11所述的内存控制装置,其特征在于,所述前台内存控制模块还包括:
跳转子模块,用于在前台内存控制模块进行所述内存回收或内存不回收操作后,跳转到和缓增长阈值比较模块。
13.根据权利要求8所述的内存控制装置,其特征在于,所述分阶段阈值预设定模块包括:侵略增长阈值设定子模块、和缓增长阈值设定子模块、剩余内存阈值设定子模块;
侵略增长阈值设定子模块,用于根据目标阶段曲线的侵略增长阶段设定侵略增长阈值;
和缓增长阈值设定子模块,用于根据目标阶段曲线的侵略增长阶段设定和缓增长阈值;
剩余内存阈值设定子模块,用于根据系统内存情况设定剩余内存阈值。
14.根据权利要求8所述的内存控制装置,其特征在于:所述装置包括切换子模块,用于在所述内存检查触发模块,接收到前后台切换的系统事件时,关闭前台内存控制模块,禅让前台内存控制模块所占用的显示内存,并开启后台内存控制模块。
CN201610991706.8A 2016-11-10 2016-11-10 一种内存控制方法及装置 Active CN108073520B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610991706.8A CN108073520B (zh) 2016-11-10 2016-11-10 一种内存控制方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610991706.8A CN108073520B (zh) 2016-11-10 2016-11-10 一种内存控制方法及装置

Publications (2)

Publication Number Publication Date
CN108073520A true CN108073520A (zh) 2018-05-25
CN108073520B CN108073520B (zh) 2021-09-14

Family

ID=62154643

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610991706.8A Active CN108073520B (zh) 2016-11-10 2016-11-10 一种内存控制方法及装置

Country Status (1)

Country Link
CN (1) CN108073520B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109857556A (zh) * 2019-01-15 2019-06-07 Oppo广东移动通信有限公司 内存回收方法及装置、存储介质和电子设备
WO2020097925A1 (en) * 2018-11-16 2020-05-22 Intel Corporation Dynamic memory deduplication to increase effective memory capacity
CN111625351A (zh) * 2020-05-12 2020-09-04 Oppo(重庆)智能科技有限公司 文件页的回收方法和装置、终端和可读存储介质
WO2020221068A1 (zh) * 2019-04-30 2020-11-05 华为技术有限公司 一种资源管理方法、装置和设备
CN111984413A (zh) * 2020-08-20 2020-11-24 Oppo(重庆)智能科技有限公司 内存回收方法、装置、电子设备及存储介质
CN112948208A (zh) * 2021-02-24 2021-06-11 视若飞信息科技(上海)有限公司 一种内存监测和回收方法、系统、设备及存储介质
EP3977292A4 (en) * 2019-05-31 2023-01-04 Intel Corporation AVOIDING STORAGE CLEANING IN HIGH-PERFORMANCE STORAGE MANAGEMENT SYSTEMS

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102479213A (zh) * 2010-11-25 2012-05-30 北大方正集团有限公司 数据缓冲方法和装置
US20130124802A1 (en) * 2008-12-08 2013-05-16 David B. Glasco Class Dependent Clean and Dirty Policy
CN104850423A (zh) * 2015-01-16 2015-08-19 中国矿业大学 识别android系统下应用程序启动阶段的方法
CN105512050A (zh) * 2015-11-25 2016-04-20 小米科技有限责任公司 内存管理方法及装置
CN105893153A (zh) * 2016-03-31 2016-08-24 北京百纳威尔无线通信设备有限公司 移动终端的内存清理方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130124802A1 (en) * 2008-12-08 2013-05-16 David B. Glasco Class Dependent Clean and Dirty Policy
CN102479213A (zh) * 2010-11-25 2012-05-30 北大方正集团有限公司 数据缓冲方法和装置
CN104850423A (zh) * 2015-01-16 2015-08-19 中国矿业大学 识别android系统下应用程序启动阶段的方法
CN105512050A (zh) * 2015-11-25 2016-04-20 小米科技有限责任公司 内存管理方法及装置
CN105893153A (zh) * 2016-03-31 2016-08-24 北京百纳威尔无线通信设备有限公司 移动终端的内存清理方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
YU CAI ET AL.: "Data retention in MLC NAND flash memory: Characterization, optimization, and recovery", 《 2015 IEEE 21ST INTERNATIONAL SYMPOSIUM ON HIGH PERFORMANCE COMPUTER ARCHITECTURE (HPCA)》 *
姜仲秋 等: "面向Android系统的动态内存管理策略", 《测控技术》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020097925A1 (en) * 2018-11-16 2020-05-22 Intel Corporation Dynamic memory deduplication to increase effective memory capacity
US11625167B2 (en) 2018-11-16 2023-04-11 Intel Corporation Dynamic memory deduplication to increase effective memory capacity
CN109857556A (zh) * 2019-01-15 2019-06-07 Oppo广东移动通信有限公司 内存回收方法及装置、存储介质和电子设备
CN109857556B (zh) * 2019-01-15 2021-01-08 Oppo广东移动通信有限公司 内存回收方法及装置、存储介质和电子设备
WO2020221068A1 (zh) * 2019-04-30 2020-11-05 华为技术有限公司 一种资源管理方法、装置和设备
EP3977292A4 (en) * 2019-05-31 2023-01-04 Intel Corporation AVOIDING STORAGE CLEANING IN HIGH-PERFORMANCE STORAGE MANAGEMENT SYSTEMS
CN111625351A (zh) * 2020-05-12 2020-09-04 Oppo(重庆)智能科技有限公司 文件页的回收方法和装置、终端和可读存储介质
CN111984413A (zh) * 2020-08-20 2020-11-24 Oppo(重庆)智能科技有限公司 内存回收方法、装置、电子设备及存储介质
CN112948208A (zh) * 2021-02-24 2021-06-11 视若飞信息科技(上海)有限公司 一种内存监测和回收方法、系统、设备及存储介质

Also Published As

Publication number Publication date
CN108073520B (zh) 2021-09-14

Similar Documents

Publication Publication Date Title
CN108073520A (zh) 一种内存控制方法及装置
CN104079503B (zh) 一种资源分配方法及装置
CN103514102B (zh) 一种Java虚拟机实现内存垃圾回收的方法及装置
CN107272535B (zh) 一种智能楼宇管理系统的联动装置及联动方法
CN109828833A (zh) 一种神经网络训练任务的排队系统及其方法
CN106330770A (zh) 一种共享缓存分配方法及装置
CN105897484A (zh) 一种流量管理装置、服务器和方法
CN103744723A (zh) 一种线程池的管理方法和管理系统
CN106790565A (zh) 一种网络附属存储集群系统
CN107766145A (zh) 双系统下的内存管理方法和装置
CN101370236B (zh) 一种基于话务量触发载频调度的方法
CN107888689A (zh) 基于共享存储的加锁资源配置方法
CN113867959A (zh) 一种训练任务资源调度方法、装置、设备及介质
CN105373434A (zh) 资源管理系统及方法
CN112732441B (zh) 一种多元动态连接池的连接方法、装置及系统
CN108769045A (zh) Acl规则配置方法、装置及网络设备
CN108595259B (zh) 一种基于全局管理的内存池管理方法
CN109800261A (zh) 双数据库连接池的动态控制方法、装置及相关设备
CN104376096A (zh) 基于缓冲区的异步更新的方法
CN108540356A (zh) 处理方法与处理设备
CN108255608A (zh) 一种内存池的管理方法
CN105141589B (zh) 一种多实例的token共享与维护的方法及系统
CN104731683A (zh) 一种手机内存监控的方法及系统
CN106464541B (zh) 基于网络功能虚拟化的故障处理方法及设备
CN109522113B (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
TR01 Transfer of patent right

Effective date of registration: 20221116

Address after: 1402, Floor 14, Block A, Haina Baichuan Headquarters Building, No. 6, Baoxing Road, Haibin Community, Xin'an Street, Bao'an District, Shenzhen, Guangdong 518100

Patentee after: Shenzhen Yayue Technology Co.,Ltd.

Address before: 518000 Room 403, East Building 2, SEG Science Park, Zhenxing Road, Futian District, Shenzhen, Guangdong

Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd.

TR01 Transfer of patent right