具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
内存页回收(Page Reclaim):是现代操作系统虚拟内存管理的核心特性之一,可以通过内存回收特性实现。
内存工作集(Memroy Working Set):是指应用、容器、或虚拟机等实例正在使用的内存集合。
内存页的闲置值(Idle Age):又称为闲置年龄,可以通过跟踪内存页的访问情况统计每个内存页的闲置值,其中,闲置值的具体时间间隔由内存扫描算法周期来决定。
冷内存页,一般指预定时间段内未被访问的内存页,即,若内存页的闲置值大于回收阈值,则确定该内存页为冷内存页。
热内存页,一般指预定时间段内被访问过的内存页,即,若内存页的闲置值小于(或等于)回收阈值,则确定该内存页为热内存页。
内存利用率,一般意义上的内存利用率指已分配内存在整机内存所占比例,可以通过排除掉已分配但长期闲置的内存,来确定真实的内存利用率。
内存颠簸(Page Threshing),指内存页回收算法反复回收和置换相同内存页面的行为,这通常会引发严重的操作系统的服务质量的问题。
主动内存回收器(Proactive reclaimer,简称PR),指内存压力较小时主动回收内存的内存回收器。
被动内存回收器(Reactive reclaimer,简称RR),指内存压力较大时被动回收内存的内存回收器。
混合式内存回收,指结合主动内存回收与被动内存回收的内存回收方式。
实施例1
根据本申请实施例,还提供了一种内存回收方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例1所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1示出了一种用于实现内存回收方法的计算机终端(或移动设备)的硬件结构框图,如图1所示,计算机终端10(或移动设备10)可以包括一个或多个(图中采用102a、102b,……,102n来示出)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104。除此以外,还可以包括:传输模块、显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器102和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端10(或移动设备)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器104可用于存储应用软件的软件程序以及模块,如本申请实施例中的内存回收方法对应的程序指令/数据存储装置,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的内存回收方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
上述传输模块用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输模块包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输模块可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端10(或移动设备)的用户界面进行交互。
在上述运行环境下,本申请提供了如图2所示的一种内存回收方法,图2是根据本申请实施例的一种内存回收方法的流程图,如图2所示,上述方法包括以下步骤:
步骤S202,获取系统的内存使用量;
步骤S204,在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
可选的,上述系统可以为操作系统,例如,Windows系列操作系统、Unix操作系统、Linux操作系统、Mac操作系统、安卓操作系统、IOS操作系统等;上述内存使用量可以但不限于为操作系统的虚拟内存的使用量;上述内存容量阈值可以为内存容量的上限值;上述冷内存页与热内存页的概念相对应,一般可以指预定时间段内未被访问的内存页,例如,若某一内存页未被访问的闲置值大于回收阈值,则确定该内存页为冷内存页。
其中,上述内存容量阈值用于限定主动内存回收与被动内存回收的分界线,上述回收阈值用于限定主动回收的回收力度;在一种可选的实施例中,上述内存容量阈值和回收阈值可以由用户预先确定和设置。
需要说明的是,内存页回收(Page Reclaim)是操作系统的虚拟内存管理的核心特性之一,基于性能及内存利用角度考虑,操作系统倾向于将所有空闲内存用于文件系统页缓存(page Cache),当操作系统的空闲内存不足时,即触发内存回收。
此外,操作系统可以利用动态随机存取存储器DRAM及磁盘介质来组成一个分层的存储层次结构,进而实现通过低价介质对DRAM的逻辑扩容,并在磁盘和内存之间构建了复杂的预读算法和回写算法,利用内存完成文件输入输出的加速。
在本申请实施例中,通过新增内存容量阈值这一参数,当系统的内存使用量低于内存容量阈值时,实现以较低开销识别并主动回收冷内存页,即主动回收器工作;当系统的内存使用量高于内存容量阈值时,停止对上述冷内存页进行的主动回收,对使用的内存页进行被动回收,即主动回收器停止工作且被动回收器开始工作,以提高内存命中率。
其中,上述被动回收器与主动回收器属于互补关系,但应避免由于两者同时工作所导致的资源竞争问题。在本申请实施例中,主动回收器的优先级低于被动回收器,当被动回收器被激活时,主动回收器应立即停止工作,对于操作系统中任意时刻而言,应最多只有一个回收器处于工作状态。
值得注意的是,本申请方案中的内存容量阈值可以防止恶意实例占用过多的内存容量。并且,与传统方案中设置内存容量的区别是,本申请中的内存容量阈值并非仅可以为一个精确值,而且还可以为一个大约值,例如,可以但不限于设置得相对大一些。对于理想状态下的特定实例而言,其大部分生命周期里的内存使用量应并低于内存容量上限,即系统的内存使用量低于内存容量阈值,在此情况下主动回收器处于工作状态,积极主动地回收冷内存页。
在上述可选的实施例中,若系统的内存使用量低于内存容量阈值,则被动回收器不工作,主动回收器处于工作状态,该主动回收器可以以时间间隔定期扫描回收阈值的元标签(meta标签)并回收冷内存页。其中,判断某内存页是否为冷内存页依赖于控制参数:回收阈值idle age threshold,其取值范围为[1,MAX_IDLE_AGE],若某一内存页未被访问的闲置值大于回收阈值,则该内存页为冷内存页。其中,MAX_IDLE_AGE,即回收阈值的最大值可以取值为255,但本申请实施例中并不具体限定,可根据硬件以及系统物理内存大小进行调整。
在本申请实施例中,通过设置上述回收阈值可以实现内存使用按需分配的效果,当内存使用量高于内存容量阈值时,则可以通过传统的页回收算法对使用的内存页进行被动回收,此时主动回收器停止工作,被动回收器开始工作。
本申请实施例中所提供的混合式内存回收的主动回收主要工作原理是依据内存工作集进行回收,由于主动回收只需关注冷内存页,只需识别出实例所用内存中的冷内存子集,不需关注剩下子集中的内存冷热排序。因此通过低频扫描过滤出冷内存即可,避免了现有技术中通过WSClock的相对高频扫描方案带来的高开销。
需要说明的是,由于低频扫描无法给出非冷内存页的相对排序,因此需要主动回收器与被动回收器相配合进行内存回收工作。
在本申请实施例中,采用内存容量阈值定义系统的实际所需内存的方式,通过获取系统的内存使用量;在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
容易注意到的是,通过提出新的控制参数:内存容量阈值,通过内存容量阈值定义系统的实际所需内存,由于在内存容量阈值固定的前提下,某一特定实例的内存使用量与其实际工作负载相关,进而可以控制内存使用量随时间动态变化,从而实现自适应工作集回收的效果。
由此,本申请实施例提高了依据内存页的访问情况自适应内存回收能力,达到了有效提升内存利用率和内存服务质量的目的,从而实现了平衡内存利用率和内存服务质量的技术效果,进而解决了现有的内存回收方法无法兼顾内存利用率和内存服务质量的技术问题。
图3是根据本申请实施例的一种可选的混合式内存回收框架图,如图3所示,内存回收器可以分为主动内存回收器(PR)与被动内存回收器(RR),二者由控制器(controller)进行统一协调控制,并且,在本申请实施例中,上述控制器可以支持并接收第三方外部输入的控制策略进行策略设置,调整控制参数,本申请实施例中可以但不限于包括以下两个可调控制参数:内存容量阈值以及回收阈值。
在一种可选的实施例中,可以通过以下方式获取上述内存页的闲置值:统计预定时间段内上述内存页未被访问的次数为上述闲置值。
在一种可选的实施例中,统计预定时间段内上述内存页未被访问的次数为上述闲置值包括:
步骤S302,将上述预定时间段划分为多个时间间隔;
步骤S304,按照时间顺序依次统计上述多个时间间隔内上述内存页是否被访问,得到上述内存页未被访问的次数;
步骤S306,依据上述内存页未被访问的次数确定上述闲置值。
可选的,上述访问可以为读访问、写访问等,上述预定时间段可以为24H,12H等,时间间隔可以为1H,2H等等,但本申请中并不限于此,可以根据具体情况进行确定和更新。
在本申请实施例中,每一内存页均具有闲置值属性,闲置值可以用于标识内存页在预定时间段内是否被访问过;闲置值的取值范围可以但不限于为0-MAX_IDLE_AGE(即0-255)。
在一种可选的实施例中,按照时间顺序依次统计上述多个时间间隔内上述内存页是否被访问,得到上述内存页未被访问的次数包括:
按照时间顺序依次对上述多个时间间隔内中的任一时间间隔内上述内存页是否未被访问进行处理:在内存页未被访问的情况下,将上述内存页未被访问的次数加1,在内存页被访问的情况下,将上述内存页未被访问的次数清零,直到上述多个时间间隔中的最后一个时间间隔。
作为一种可选的实施例,设T为当前时间,若上述内存页在任一时间间隔(T-scan_period,T]内未被访问过,则其相应闲置值加1,即将上述内存页未被访问的次数加1;若上述内存页在任一时间间隔内被访问过,则将其闲置值清零,即,将上述内存页未被访问的次数清零,直到上述多个时间间隔中的最后一个时间间隔。
在一种可选的实施例中,按照时间顺序依次统计上述多个时间间隔内上述内存页是否被访问,得到上述内存页未被访问的次数包括:
步骤S402,确定上述多个时间间隔内每个时间间隔的扫描次数,其中,每扫描一次得到一个上述内存页是否被访问的结果;
步骤S404,依据上述扫描次数,按照时间顺序依次统计上述多个时间间隔内上述内存页是否被访问,得到上述内存页未被访问的次数。
在一种可选的实施例中,如图3所示,工作集扫描器分别与回收阈值的元标签、内存池连接,工作集扫描器可以以时间间隔scan_period为周期,周期性地扫描实例已申请的内存页,进而可以确定上述多个时间间隔内每个时间间隔的扫描次数,并依据上述扫描次数统计上述多个时间间隔内上述内存页是否被访问,得到上述内存页未被访问的次数,依据上述内存页未被访问的次数确定上述闲置值。
此外,上述工作集扫描器可以自适应降频扫描,以降低高频扫描带来的额外开销。
在本申请实施例中,若闲置值处于[0,1)或[4,8)区间,则扫描周期为1/2时间间隔(scan_period/2);若闲置值处于[1,4)区间,则扫描周期不变;若闲置值处于[8,16)区间,则扫描周期为1/4时间间隔(scan_period/4);若闲置值处于[16,MAX_IDLE_AGE)区间,则扫描周期为1/16时间间隔(scan_period/16)。
仍如图3所示,回收阈值的元标签分别与主动回收器、被动回收器连接,本申请实施例中,可以将内存页未被访问的次数作为统计数据存放于回收阈值的元标签中,供主动回收器与被动回收器使用。并且,主动回收器与内存池连接,可以在上述内存使用量低于内存容量阈值的情况下,对内存池中的冷内存页进行主动回收;被动回收器与内存池连接,可以在上述内存使用量高于内存容量阈值的情况下,对内存池中的使用的内存页进行被动回收。
在一种可选的实施例中,可以依据上述内存页的历史未被访问的次数,确定上述多个时间间隔内每个时间间隔的扫描次数,例如,采用历史未被访问的次数区间与扫描次数之间的对应关系,依据上述内存页的历史未被访问的次数,确定上述多个时间间隔内每个时间间隔的扫描次数。
需要说明的是,为避免主动回收器周期性扫描回收阈值的元标签带来的开销,工作集扫描器可适当提供一些加工处理后的统计数据(例如,当前实例的冷内存页的数目)供主动回收器参考,避免无效扫描。
在一种可选的实施例中,对冷内存页进行主动回收包括:
步骤S502,确定回收的内存页数目阈值;
步骤S504,对不超过上述内存页数目阈值的冷内存页进行主动回收。
在一种可选的实施例中,通过以下因素至少之一,确定回收的内存页数目阈值:中央处理器CPU的资源利用率,回收内存页的磁盘的输入输出压力。
在本申请实施例中,主动回收器需避免短时间段内突然回收大量的内存页,所导致系统性能抖动的问题,故此处需要进行平滑处理。例如,设置单次回收的页数目上限,即回收的内存页数目阈值;并对不超过上述内存页数目阈值的冷内存页进行主动回收,以避免在短时间内突然回收大量的内存页,导致操作系统的性能抖动。
此外,本申请实施例中可以但不限于考虑CPU的资源利用率(例如,主动回收进程的优先级低于业务进程)以及磁盘的输入输出I/O压力(例如,若回收冷内存页时需回写磁盘)等。
在一种可选的实施例中,还包括:在对冷内存页进行主动回收之后,如果系统的内存使用量高于上述内存容量阈值,则停止对上述冷内存页进行的主动回收,对使用的内存页进行被动回收。
可选的,在内存使用量等于内存容量阈值时,则主动回收器停止工作,混合式内存回收退化为传统的内存回收,若系统的内存使用量高于内存容量阈值时,则控制被动回收器开始工作,并通知主动回收器立即停止工作。
需要说明的是,在本申请实施例中,被动回收的实现可直接参考已有的LRU/2Q/CLOCK-主动回收等公开算法,例如,Linux操作系统的LRU内存置换算法实现,此处不详细展开描述其细节。另外,被动回收的实现也可适当参考回收阈值的元标签,辅助决策。
本申请实施例提出一种混合式内存回收算法,在已有的内存回收算法的基础之上,新增周期性地主动回收冷内存页的方案。其中,内存回收算法可以用于在内存压力较大时被动回收内存页,即被动回收;本申请用于实现周期性的主动回收冷内存页,即主动回收。
需要说明的是,由于主动回收与被动回收是一种互补而非取缔的关系,因而实现难度较低。混合式内存回收算法在保持传统算法的优点的同时,具备了依据内存冷热而自适应回收的能力,能有效提升内存利用率,减少内存服务质量的问题,进而可以在内存利用率和内存服务质量之间寻找到最佳平衡。
以下通过一种可选的实施例,对本申请实施例中的内存回收方法进行解释说明,图4是根据本申请实施例的一种可选的内存回收方法的流程图,如图4所示,在本申请实施例所提供的内存回收方法中,可以包括如下方法步骤:
步骤S40,开始。
步骤S41,判断实例是否损坏。
其中,上述实例为操作系统中的实例;在上述步骤S41的判断结果为是的情况下,执行步骤S47;在上述步骤S41的判断结果为否的情况下,执行步骤S42。
步骤S42,判断被动回收器是否在工作状态。
在上述步骤S42的判断结果为是的情况下,执行步骤S46;在上述步骤S42的判断结果为否的情况下,执行步骤S43。
步骤S43,判断当前时间间隔是否结束。
在上述步骤S43的判断结果为是的情况下,执行步骤S46;在上述步骤S43的判断结果为否的情况下,执行步骤S44。
步骤S44,判断闲置值是否大于回收阈值。
在上述步骤S44的判断结果为是的情况下,执行步骤S45;在上述步骤S44的判断结果为否的情况下,执行步骤S41。
步骤S45,主动回收冷内存页。
步骤S46,检测下一时间间隔。
其中,在上述步骤S46中,在检测到当前时间间隔的下一时间间隔之后,返回执行步骤S41。
步骤S47,结束。
以下通过另一种可选的实施例,对本申请实施例中的内存回收方法进行解释说明,图5是根据本申请实施例的一种可选的内存回收方法的流程图,如图5所示,在本申请实施例所提供的内存回收方法中,可以包括如下方法步骤:
步骤S50,开始。
步骤S51,判断实例是否损坏。
其中,上述实例为操作系统中的实例;在上述步骤S51的判断结果为是的情况下,执行步骤S57;在上述步骤S51的判断结果为否的情况下,执行步骤S52。
步骤S52,按照时间顺序依次统计多个时间间隔内内存页是否被访问,得到内存页未被访问的次数。
可选的,上述访问可以为读访问、写访问等,上述预定时间段可以为24H,12H等,时间间隔可以为1H,2H等等,但本申请中并不限于此,可以根据具体情况进行确定和更新。
步骤S53,依据内存页未被访问的次数确定闲置值。
本申请实施例中,每一内存页均具有闲置值属性,闲置值可以用于标识内存页在预定时间段内是否被访问过;闲置值的取值范围可以但不限于为0-MAX_IDLE_AGE。
步骤S54,判断闲置值是否大于回收阈值。
步骤S55,确定回收的内存页数目阈值。
步骤S56,对不超过内存页数目阈值的冷内存页进行主动回收。
在本申请实施例中,为避免在短时间内突然回收大量的内存页,导致操作系统的性能抖动,可以但不限于设置回收的内存页数目阈值;并控制主动回收器对不超过上述内存页数目阈值的冷内存页进行主动回收。
步骤S57,结束。
以下通过又一种可选的实施例,对本申请实施例中的内存回收方法进行解释说明,图6是根据本申请实施例的一种可选的内存回收方法的流程图,如图6所示,在本申请实施例所提供的内存回收方法中,可以包括如下方法步骤:
步骤S60,开始。
步骤S61,判断实例是否损坏。
其中,上述实例为操作系统中的实例;在上述步骤S61的判断结果为是的情况下,执行步骤S65;在上述步骤S61的判断结果为否的情况下,执行步骤S62。
步骤S62,获取系统的内存使用量。
可选的,上述内存使用量可以但不限于为操作系统的虚拟内存的使用量;上述内存容量阈值可以为内存容量的上限值;上述冷内存页一般指预定时间段内未被访问的内存页,即,若内存页未被访问的闲置值大于回收阈值,则确定该内存页为冷内存页。
步骤S63,在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收。
其中,上述内存容量阈值用于限定主动内存回收与被动内存回收的分界线,上述回收阈值用于限定主动回收的回收力度;在可选的实际实施例中,上述内存容量阈值和回收阈值可以由用户预先确定。
步骤S64,在内存使用量高于上述内存容量阈值的情况下,则停止对冷内存页进行的主动回收,对使用的内存页进行被动回收。
在上述步骤S64中,当系统的内存使用量高于内存容量阈值时,停止对上述冷内存页进行的主动回收,对使用的内存页进行被动回收,即主动回收器停止工作且被动回收器开始工作,以提高内存命中率。
步骤S65,结束。
实施例2
根据本申请实施例,还提供了另一种内存回收方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图7是根据本申请实施例的另一种内存回收方法的流程图,如图7所示,上述方法包括以下步骤:
步骤S702,接收内存回收请求;
步骤S704,响应于上述内存回收请求,在内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
可选的,上述内存回收请求可以为操作系统发送的内存回收请求,主动内存回收器在接收到内存回收请求之后,响应于内存回收请求,并内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收。
在本申请实施例中,采用内存容量阈值定义系统的实际所需内存的方式,通过接收内存回收请求;响应于上述内存回收请求,在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
容易注意到的是,通过提出新的控制参数:内存容量阈值,通过内存容量阈值定义系统的实际所需内存,由于在内存容量阈值固定的前提下,某一特定实例的内存使用量与其实际工作负载相关,进而可以控制内存使用量随时间动态变化,从而实现自适应工作集回收的效果。
由此,本申请实施例提高了依据内存页的访问情况自适应内存回收能力,达到了有效提升内存利用率和内存服务质量的目的,从而实现了平衡内存利用率和内存服务质量的技术效果,进而解决了现有的内存回收方法无法兼顾内存利用率和内存服务质量的技术问题。
需要说明的是,本实施例的可选或优选实施方式可以参见实施例1中的相关描述,此处不再赘述。
实施例3
根据本申请实施例,还提供了又一种内存回收方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图8是根据本申请实施例的又一种内存回收方法的流程图,如图8所示,上述方法包括以下步骤:
步骤S802,接收内存请求;
步骤S804,响应于上述内存请求,在内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
可选的,上述内存请求可以为操作系统发送的内存请求,内存请求可以但不限于为内存回收请求;主动内存回收器在接收到内存请求之后,响应于内存请求,并内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收。
在本申请实施例中,采用内存容量阈值定义系统的实际所需内存的方式,通过接收内存请求;响应于上述内存请求,在内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
容易注意到的是,通过提出新的控制参数:内存容量阈值,通过内存容量阈值定义系统的实际所需内存,由于在内存容量阈值固定的前提下,某一特定实例的内存使用量与其实际工作负载相关,进而可以控制内存使用量随时间动态变化,从而实现自适应工作集回收的效果。
由此,本申请实施例提高了依据内存页的访问情况自适应内存回收能力,达到了有效提升内存利用率和内存服务质量的目的,从而实现了平衡内存利用率和内存服务质量的技术效果,进而解决了现有的内存回收方法无法兼顾内存利用率和内存服务质量的技术问题。
需要说明的是,本实施例的可选或优选实施方式可以参见实施例1中的相关描述,此处不再赘述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例上述的方法。
实施例4
根据本申请实施例,还提供了一种用于实施上述内存回收方法的装置实施例,图9是根据本申请实施例的一种内存回收装置的示意图,如图9所示,该装置900包括:获取模块902和回收模块904,其中:
获取模块902,用于获取系统的内存使用量;回收模块904,用于在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
在本申请实施例中,采用内存容量阈值定义系统的实际所需内存的方式,通过获取系统的内存使用量;在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
容易注意到的是,通过提出新的控制参数:内存容量阈值,通过内存容量阈值定义系统的实际所需内存,由于在内存容量阈值固定的前提下,某一特定实例的内存使用量与其实际工作负载相关,进而可以控制内存使用量随时间动态变化,从而实现自适应工作集回收的效果。
由此,本申请实施例提高了依据内存页的访问情况自适应内存回收能力,达到了有效提升内存利用率和内存服务质量的目的,从而实现了平衡内存利用率和内存服务质量的技术效果,进而解决了现有的内存回收方法无法兼顾内存利用率和内存服务质量的技术问题。
此处需要说明的是,上述获取模块902和回收模块904对应于实施例1中的步骤S202至步骤S204,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例1所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例1提供的计算机终端10中。
需要说明的是,本实施例的可选或优选实施方式可以参见实施例1中的相关描述,此处不再赘述。
实施例5
根据本申请实施例,还提供了一种计算设备的实施例,包括:存储器和处理器,其中,上述存储器存储有计算机程序,上述处理器,用于执行上述存储器中存储的计算机程序,上述计算机程序运行时执行任意一项上述的内存回收方法。
在本申请实施例中,采用内存容量阈值定义系统的实际所需内存的方式,通过获取系统的内存使用量;在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
容易注意到的是,通过提出新的控制参数:内存容量阈值,通过内存容量阈值定义系统的实际所需内存,由于在内存容量阈值固定的前提下,某一特定实例的内存使用量与其实际工作负载相关,进而可以控制内存使用量随时间动态变化,从而实现自适应工作集回收的效果。
由此,本申请实施例提高了依据内存页的访问情况自适应内存回收能力,达到了有效提升内存利用率和内存服务质量的目的,从而实现了平衡内存利用率和内存服务质量的技术效果,进而解决了现有的内存回收方法无法兼顾内存利用率和内存服务质量的技术问题。
需要说明的是,本实施例的可选或优选实施方式可以参见实施例1中的相关描述,此处不再赘述。
实施例6
根据本申请的实施例,还提供一种计算机终端的实施例,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行内存回收方法中以下步骤的程序代码:获取系统的内存使用量;在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
可选地,图10是根据本申请实施例的一种计算机终端的结构框图,如图10所示,该计算机终端1000可以包括:一个或多个(图中仅示出一个)处理器1002、存储器1004、以及外设接口1006。
其中,存储器可用于存储软件程序以及模块,如本申请实施例中的内存回收方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的内存回收方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端1000。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
可选的,上述处理器还可以执行如下步骤的程序代码:获取系统的内存使用量;在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
可选的,上述处理器还可以执行如下步骤的程序代码:统计预定时间段内上述内存页未被访问的次数为上述闲置值。
可选的,上述处理器还可以执行如下步骤的程序代码:将上述预定时间段划分为多个时间间隔;按照时间顺序依次统计上述多个时间间隔内上述内存页是否被访问,得到上述内存页未被访问的次数;依据上述内存页未被访问的次数确定上述闲置值。
可选的,上述处理器还可以执行如下步骤的程序代码:按照时间顺序依次对上述多个时间间隔内中的任一时间间隔内上述内存页是否未被访问进行处理:在内存页未被访问的情况下,将上述内存页未被访问的次数加1,在内存页被访问的情况下,将上述内存页未被访问的次数清零,直到上述多个时间间隔中的最后一个时间间隔。
可选的,上述处理器还可以执行如下步骤的程序代码:确定上述多个时间间隔内每个时间间隔的扫描次数,其中,每扫描一次得到一个上述内存页是否被访问的结果;依据上述扫描次数,按照时间顺序依次统计上述多个时间间隔内上述内存页是否被访问,得到上述内存页未被访问的次数。
可选的,上述处理器还可以执行如下步骤的程序代码:依据上述内存页的历史未被访问的次数,确定上述多个时间间隔内每个时间间隔的扫描次数。
可选的,上述处理器还可以执行如下步骤的程序代码:采用历史未被访问的次数区间与扫描次数之间的对应关系,依据上述内存页的历史未被访问的次数,确定上述多个时间间隔内每个时间间隔的扫描次数。
可选的,上述处理器还可以执行如下步骤的程序代码:确定回收的内存页数目阈值;对不超过上述内存页数目阈值的冷内存页进行主动回收。
可选的,上述处理器还可以执行如下步骤的程序代码:在对冷内存页进行主动回收之后,如果系统的内存使用量高于上述内存容量阈值,则停止对上述冷内存页进行的主动回收,对使用的内存页进行被动回收。
可选的,上述处理器还可以执行如下步骤的程序代码:接收内存回收请求;响应于上述内存回收请求,在内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
可选的,上述处理器还可以执行如下步骤的程序代码:接收内存请求;响应于上述内存请求,在内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
采用本申请实施例,提供了一种内存回收的方案。通过获取系统的内存使用量;在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页,达到了依据内存页的访问情况自适应内存回收能力,有效提升内存利用率和内存服务质量的目的,从而实现了平衡内存利用率和内存服务质量的技术效果,进而解决了现有的内存回收方法无法兼顾内存利用率和内存服务质量的技术问题。
本领域普通技术人员可以理解,图10所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图10其并不对上述电子装置的结构造成限定。例如,计算机终端1000还可包括比图10中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图10所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例7
根据本申请的实施例,还提供了一种存储介质的实施例,可选地,在本实施例中,上述存储介质可以用于保存上述实施例1至3中所提供的内存回收方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取系统的内存使用量;在上述内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:统计预定时间段内上述内存页未被访问的次数为上述闲置值。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:将上述预定时间段划分为多个时间间隔;按照时间顺序依次统计上述多个时间间隔内上述内存页是否被访问,得到上述内存页未被访问的次数;依据上述内存页未被访问的次数确定上述闲置值。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:按照时间顺序依次对上述多个时间间隔内中的任一时间间隔内上述内存页是否未被访问进行处理:在内存页未被访问的情况下,将上述内存页未被访问的次数加1,在内存页被访问的情况下,将上述内存页未被访问的次数清零,直到上述多个时间间隔中的最后一个时间间隔。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:确定上述多个时间间隔内每个时间间隔的扫描次数,其中,每扫描一次得到一个上述内存页是否被访问的结果;依据上述扫描次数,按照时间顺序依次统计上述多个时间间隔内上述内存页是否被访问,得到上述内存页未被访问的次数。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:依据上述内存页的历史未被访问的次数,确定上述多个时间间隔内每个时间间隔的扫描次数。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:采用历史未被访问的次数区间与扫描次数之间的对应关系,依据上述内存页的历史未被访问的次数,确定上述多个时间间隔内每个时间间隔的扫描次数。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:确定回收的内存页数目阈值;对不超过上述内存页数目阈值的冷内存页进行主动回收。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:在对冷内存页进行主动回收之后,如果系统的内存使用量高于上述内存容量阈值,则停止对上述冷内存页进行的主动回收,对使用的内存页进行被动回收。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:接收内存回收请求;响应于上述内存回收请求,在内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:接收内存请求;响应于上述内存请求,在内存使用量低于内存容量阈值的情况下,对冷内存页进行主动回收,其中,上述冷内存页为未被访问的闲置值大于回收阈值的内存页。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。