CN116049025A - 动态调整内存回收gc参数的方法、电子设备及存储介质 - Google Patents

动态调整内存回收gc参数的方法、电子设备及存储介质 Download PDF

Info

Publication number
CN116049025A
CN116049025A CN202310043341.6A CN202310043341A CN116049025A CN 116049025 A CN116049025 A CN 116049025A CN 202310043341 A CN202310043341 A CN 202310043341A CN 116049025 A CN116049025 A CN 116049025A
Authority
CN
China
Prior art keywords
memory
foreground
mode
parameters
threshold
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
CN202310043341.6A
Other languages
English (en)
Other versions
CN116049025B (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 CN202310043341.6A priority Critical patent/CN116049025B/zh
Publication of CN116049025A publication Critical patent/CN116049025A/zh
Application granted granted Critical
Publication of CN116049025B publication Critical patent/CN116049025B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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)
  • Memory System (AREA)

Abstract

本申请提供了一种动态调整内存回收GC参数的方法、电子设备及存储介质,涉及存储器内存回收技术领域。通过本方案,周期性地根据剩余空间和堆段状态综合判断内存空间可用率的变化,以此检测GC效果,并根据GC效果来动态调整GC参数,然后按照GC参数执行GC。在GC效果不佳时,可以将内存回收模式调整为前台GC以快速触发GC,增大内存回收所需时长以充分GC,和/或降低内存回收的阈值以更容易触发GC;在内存回收效果有所改善时,维持或重置GC参数。本方案通过周期性执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。

Description

动态调整内存回收GC参数的方法、电子设备及存储介质
技术领域
本申请涉及存储器内存回收技术领域,尤其涉及一种动态调整GC参数的方法、电子设备及存储介质。
背景技术
内存回收(garbage collection,GC),是一种存储器管理机制,通过GC线程对内存堆中的孤立对象进行回收,以释放内存空间。内存回收的目的在于清除不再使用的对象,通过回收被无用对象占用的内存空间,使内存空间可被程序再次使用,减少内存碎片,提高内存可用率。
目前的内存回收方式,由于内存回收不及时,导致电子设备的使用性能受到极大影响。因此,如何提升内存回收效果是亟待解决的技术问题。
发明内容
本申请提供一种动态调整GC参数的方法、电子设备及存储介质,通过周期性执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC,因此能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
为达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供一种动态调整GC参数的方法,所述GC参数包括GC模式、前台GC时长和GC阈值,所述GC模式包括前台GC模式以及后台GC模式,所述后台GC模式为系统默认模式,所述前台GC时长为在所述前台GC模式下完成内存回收所需的时长,所述GC阈值为触发执行GC的门限值,所述方法包括:
周期性地获取剩余内存占比和空闲堆段占比,并根据所述剩余内存占比和所述空闲堆段占比,确定电子设备的内存空间可用率;其中,所述剩余内存占比为所述电子设备的剩余内存与总内存之间的比例,所述空闲堆段占比为所述电子设备的空闲堆段与待回收堆段之间的比例;
根据第二周期的内存空间可用率与第一周期的内存空间可用率之间的差值,确定所述内存空间可用率是否变化;其中,所述第二周期为所述第一周期之后相邻的一个周期;
当所述内存空间可用率变小时,调整GC参数,并按照调整后的GC参数进行内存回收;其中,所述调整GC参数包括以下至少一项:将所述GC模式从所述后台GC模式切换为所述前台GC模式,增大所述前台GC时长,减小所述GC阈值;
当所述内存空间可用率变大时,维持所述第一周期的GC参数,并按照维持的GC参数进行内存回收;
当所述内存空间可用率不变时,将所述GC参数重置为默认值,并按照重置后的GC参数进行内存回收。
通过本申请实施例提供的动态调整GC参数的方法,周期性地根据剩余空间和堆段状态综合判断内存空间可用率的变化,以此检测GC效果,并根据GC效果来动态调整GC参数,然后按照调整后的GC参数执行GC。在GC效果不佳时,可以将内存回收模式调整为前台GC以快速触发GC,也可以增大内存回收所需时长以充分GC,还可以降低内存回收的阈值以更容易触发GC;在内存回收效果有所改善时,维持或重置GC参数。本方案通过周期性执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
其中,第一周期的时长和第二周期的时长相等,时长的具体取值可以根据实际使用需求进行确定。示例性地,周期的时长可以取1小时,即每隔1个小时检测一次GC效果。
本申请实施例中,可以周期地检测内存回收效果,然后根据内存回收效果动态地调整与内存回收相关的参数。与内存回收相关的参数可以包括:
内存回收模式,对应地采用needGC表示;
内存回收所需时长,对应地采用gc_urgent_sleep_time表示;
内存回收的阈值,对应地采用DIRTY_SEGMENTS_THRESHOLD表示。
例如,在内存回收效果不佳时,可以将内存回收模式调整为前台GC以快速触发回收内存,增大内存回收所需时长以充分回收内存,和/或降低内存回收的阈值以更容易触发回收内存。
再例如,在内存回收效果有所改善时,可以将内存回收模式调整为后台GC,保持或者重置内存回收所需时长,和/或保持或者重置内存回收的阈值。
其中,Java虚拟机JVN中存在有Java的垃圾回收GC线程。当APP或服务使用的堆内存不足时,JVM将启动GC线程,执行GC,以回收不再继续被使用的堆内存,使这部分内存可以被其他应用程序使用,提高内存的使用率。
在一些实施例中,所述根据所述剩余内存占比和所述空闲堆段占比,确定所述电子设备的内存空间可用率,包括:
采用下述等式,确定所述电子设备的内存空间可用率:
其中,F表示电子设备的内存空间可用率,P表示电子设备的剩余内存占比,f /(d+1)表示电子设备的空闲堆段占比,f表示电子设备的总内存中的空闲堆段的数量,d表示总内存中的待回收堆段的数量。
其中,采用∆F表示内存空间可用率的变化量。下面说明如何基于∆F判断GC效果。
时,表示内存空间可用率减小,GC效果较差。可选地,在此情况下,可以按照紧急模式(前台GC)进行内存回收,及时快速地回收内存,还可以增大前台GC时长,充分地回收内存,还可以降低GC阈值,降低GC的触发门槛。由此可以提升GC效果。
时,表示内存空间可用率增大,GC效果良好。相应地,可以按照常规模式(后台GC)进行内存回收。
时,表示内存空间可用率没有变化,GC效果不明显。相应地,可以恢复为常规模式(后台GC)进行内存回收。
其中,前台GC模式指应用程序在前台运行时执行GC,而后台GC模式指应用程序在后台运行时执行GC。通常默认执行后台GC模式,在紧急情况下会转为前台GC模式。换言之,当系统没有进行IO操作时,将启动后台GC线程。
通过本申请方案,能够周期性地检测GC效果,然后根据GC效果来动态调整GC参数,例如在GC效果满足预设条件时将needGC更改为true,以及增大GC所需时长,并降低GC阈值,因此本申请方案可以在合适的时机执行GC,以及在合适的时机结束GC,并且能够保证合理的GC执行频率。
在一些实施例中,所述方法还包括:
每当检测到所述内存空间可用率变小时,第一计数器累计加一,得到所述内存空间可用率变小的累计次数;
根据内存空间可用率变小的累计次数,确定所述前台GC时长的调整量,以及所述GC阈值的调整量。
在一些实施例中,所述方法还包括:
当检测到所述内存空间可用率不变时,将所述第一计数器清零。
在一些实施例中,所述增大所述前台GC时长,包括:
将所述前台GC时长的默认值与所述前台GC时长的调整量求和,得到调整后的前台GC时长;
其中,采用下述等式,得到调整后的前台GC时长:
其中,T´为调整后的前台GC时长,T表示所述前台GC时长的默认值,表示所述前台GC时长的调整量,N表示所述内存空间可用率变小的累计次数,α表示第一预设系数。
示例性地,前台GC时长的默认值可以取5秒。第一预设系数α可以取10。
在一些实施例中,所述减小所述GC阈值,包括:
将所述GC阈值的默认值与所述GC阈值的调整量求差,得到减小后的GC阈值;
其中,采用下述等式,得到调整后的减小后的GC阈值:
其中,S´为减小后的GC阈值,S表示所述GC阈值的默认值,表示所述GC阈值的调整量,N表示所述内存空间可用率变小的累计次数,表示第二预设系数。
示例性地,GC阈值的默认值可以取100。第二预设系数可以取5。
在一些实施例中,所述当所述内存空间可用率不变时,将所述GC参数重置为默认值,并按照重置后的GC参数进行内存回收,包括:
每当所述内存空间可用率不变时,第二计数器累计加一,得到所述内存空间可用率不变的累计次数;
在所述内存空间可用率不变的累计次数大于或等于预设累计次数时,将所述GC参数重置为默认值,并按照重置后的GC参数进行内存回收;
将所述第二计数器清零。
示例性地,预设累计次数可以取2。
需要说明的是,在GC垃圾回收过程中会进行内存整理,以减少内存碎片,提高内存使用率。本申请实施例中,可以周期性地循环执行下述步骤:计算内存空间可用率的变化,根据内存空间可用率的变化确定GC效果,即检测GC效果;然后根据GC效果,动态调整GC参数;然后按照GC参数执行GC。
在一些实施例中,所述调整GC参数包括减小所述GC阈值,所述调整后的GC参数包括减小后的GC阈值;
所述按照调整后的GC参数进行内存回收,包括:
当所述总内存中的待回收堆段的数量大于所述减小后的GC阈值时,确定已满足触发执行GC的条件;
若所述GC模式为所述后台GC模式,则等到系统没有进行IO操作时,启动后台GC线程,对所述总内存中的待回收堆段进行内存回收;
若所述GC模式为所述前台GC模式,则直接对所述总内存中的待回收堆段进行内存回收。
时,表明内存空间可用率减小,GC效果不佳。对此,本申请方案的调整策略为:相应地减小GC阈值,通过降低GC触发门槛,及时识别需要GC的场景。例如将GC阈值从默认值100减小为90,即当待回收堆段的数量大于90时,就触发执行GC。可以理解,在内存空间可用率减小的情况下,通过将GC阈值下调,降低了GC触发门槛,更容易触发执行GC。
本申请实施例可以根据内存空间可用率的变化,判断GC效果,然后根据GC效果动态调整GC阈值。需要说明的是,“动态调整GC阈值”包括降低GC阈值,保持GC阈值不变,或者GC阈值恢复默认值。
可以理解,在内存空间可用率减小的情况下,通过将GC阈值下调,降低了GC触发门槛,更容易触发执行GC,以更灵敏地识别需要GC的场景。
在一些实施例中,在所述调整GC参数包括将所述GC模式从所述后台GC模式切换为所述前台GC模式的情况下,所述按照调整后的GC参数进行内存回收,包括:
在所述前台GC模式下,监听所述总内存中的待回收堆段的数量是否大于所述GC阈值;
当所述总内存中的待回收堆段的数量大于所述GC阈值时,对所述总内存中的待回收堆段进行内存回收。
在一些实施例中,所述调整GC参数包括增大所述前台GC时长,所述调整后的GC参数包括增大后的前台GC时长;
所述按照调整后的GC参数进行内存回收,包括:
监听所述前台GC模式是否已启动,以及所述总内存中的待回收堆段的数量大于所述GC阈值;
在所述前台GC模式已启动,且所述总内存中的待回收堆段的数量满足触发执行GC的条件时,对所述总内存中的待回收堆段进行内存回收,并且在所述增大后的前台GC时长内完成内存回收。
本申请实施例可以根据内存空间可用率的变化,判断GC效果,然后根据GC效果动态调整GC所需时长。需要说明的是,“动态调整GC所需时长”包括增大GC所需时长,保持GC所需时长不变,或者将GC所需时长恢复为默认值。
本申请实施例中,能够周期性地检测GC效果,根据GC效果动态地调整GC所需时长,每当检测到GC效果不佳时,可以增大GC所需时长,并且在连续多次检测到GC效果不佳时,可以基于检测次数以递增方式调整GC所需时长。通过延长内存回收时长,这样能够充分进行内存回收,保证电子设备实时具有充足的内存空间。相应地,当检测到GC效果良好时保持之前的GC所需时长,当检测到GC效果不明显时恢复GC所需时长的默认值。
在一些实施例中,所述将所述GC模式从所述后台GC模式切换为所述前台GC模式,包括:
通过将参数needGC值置为true,触发将GC模式代码置为3;
当所述GC模式代码为3时,启用所述前台GC模式。
在一些实施例中,所述将所述GC参数重置为默认值,包括:
通过将参数needGC值置为false,触发将GC模式代码置为0;
当所述GC模式代码为0时,启用所述后台GC模式。
本申请实施例可以根据内存空间可用率的变化,判断GC效果,然后根据GC效果动态调整needGC。需要说明的是,“动态调整needGC”包括将needGC调整为true,或者将needGC调整为false。
其中,在启用后台GC模式后,当系统没有进行IO操作时,将启动后台GC线程,执行GC。在启用所述前台GC模式后,当没有足够的空闲堆段(free_segments)时,需要向系统申请分配内存空间,将启动前台GC线程,执行GC。相比而言,前台GC线程的优先级最高,在启动前台GC线程的情况下,其他正在运行的所有线程会被挂起,在前台GC线程结束后,其他线程恢复运行。
本申请实施例提供的动态调整GC参数的方法,能够周期性地检测GC效果,然后根据GC效果来动态调整GC参数,例如在GC效果满足预设条件时将needGC更改为true,以及增大GC所需时长,并降低GC阈值,因此本申请方案可以在合适的时机执行GC,以及在合适的时机结束GC,并且能够保证合理的GC执行频率。
本申请实施例中,可以周期性地循环执行下述步骤:计算内存空间可用率的变化,根据内存空间可用率的变化确定GC效果,即检测GC效果;然后根据GC效果,动态调整GC参数;然后按照GC参数执行GC。
第二方面,本申请提供一种动态调整GC参数的装置,该装置包括用于执行上述第一方面中的方法的单元。该装置可对应于执行上述第一方面中描述的方法,该装置中的单元的相关描述请参照上述第一方面的描述,为了简洁,在此不再赘述。
其中,上述第一方面描述的方法可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块或单元。例如,处理模块或单元、显示模块或单元等。
第三方面,本申请提供一种电子设备,所述电子设备包括处理器,处理器与存储器耦合,存储器用于存储计算机程序或指令,处理器用于执行存储器存储的计算机程序或指令,使得第一方面中的方法被执行。例如,处理器用于执行存储器存储的计算机程序或指令,使得该装置执行第一方面中的方法。
第四方面,本申请提供一种计算机可读存储介质,其上存储有用于实现第一方面中的方法的计算机程序(也可称为指令或代码)。例如,该计算机程序被计算机执行时,使得该计算机可以执行第一方面中的方法。
第五方面,本申请提供一种芯片,包括处理器。处理器用于读取并执行存储器中存储的计算机程序,以执行第一方面及其任意可能的实现方式中的方法。可选地,所述芯片还包括存储器,存储器与处理器通过电路或电线连接。
第六方面,本申请提供一种芯片系统,包括处理器。处理器用于读取并执行存储器中存储的计算机程序,以执行第一方面及其任意可能的实现方式中的方法。可选地,所述芯片系统还包括存储器,存储器与处理器通过电路或电线连接。
第七方面,本申请提供一种计算机程序产品,所述计算机程序产品包括计算机程序(也可称为指令或代码),所述计算机程序被电子设备执行时使得所述电子设备实现第一方面中的方法。
可以理解的是,上述第二方面至第七方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
图1为本申请实施例提供的动态调整GC参数所采用的电子设备的结构示意图;
图2为本申请实施例公开的动态调整GC参数所采用的软件架构示意图;
图3为本申请实施例公开的GC参数的示意图;
图4为本申请实施例公开的动态调整GC参数的策略示意图;
图5为本申请实施例公开的周期性地检测GC效果的示意图;
图6为本申请实施例公开的动态调整needGC的流程示意图;
图7为本申请实施例公开的动态调整needGC的示意图;
图8为本申请实施例公开的动态调整前台GC时长的流程示意图;
图9为本申请实施例公开的动态调整前台GC时长的示意图;
图10为本申请实施例公开的动态调整GC阈值的流程示意图;
图11为本申请实施例公开的动态调整GC阈值的示意图;
图12为本申请实施例公开的一种动态调整GC参数的方法的流程图;
图13为本申请实施例公开的一种动态调整GC参数的装置的示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文中术语“和/或”,是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。本文中符号“/”表示关联对象是或者的关系,例如A/B表示A或者B。
本文中的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或者两个以上,例如,多个处理单元是指两个或者两个以上的处理单元等;多个元件是指两个或者两个以上的元件等。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
为便于理解本申请实施例,此处先对本申请实施例可能涉及到的一些概念或关键词进行说明:
堆:内存中用于存放对象(对象实例)的区域,若该内存托管技术使用的是JAVA语言,则堆是JAVA虚拟机所管理的内存中最大的一块区域,该区域是被所有线程共享的一块内存区域,在JAVA虚拟机启动时就会创建堆,几乎所有的对象都是在堆中分配内存。
GC:内存回收,也称为垃圾回收,指通过GC线程对堆中的孤立对象进行回收,以释放内存空间的一种内存回收机制。其中,GC线程用于管理堆中的对象,可以对堆中的对象进行标记、整理以及删除孤立对象等,用于释放那些不再使用的对象所占用的内存。内存回收的目的在于清除不再使用的对象,通过回收被无用对象占用的内存空间,使该内存空间可被程序再次使用。
其中,GC采用分配器(allocator)和收集器(collector)。分配器负责获取更多的内存并且在适当的时机触发收集器。收集器负责回收不再被程序使用的对象内存(称为垃圾内存)。
开源flash文件系统(flash friendly filesystem,F2FS):是专门为闪存设备设计的一个日志追加型文件系统。相比于传统的日志型文件系统,F2FS在GC的高时间开销等问题上有一定的改进和优化。F2FS针对闪存设备的特性而设计了基本数据单位,例如堆块(block)、堆段(segment)和堆区(section)。
其中,F2FS的基本单位是block,一般情况下也称为page,大小为4KB,很多数据结构被设计为4KB的大小,这是因为很多flash设备单次输入输出(IO)的读写都是基于4KB的倍数进行。连续的block集成为segment,一个segment的大小是512个block,也就是2M。连续的segment集成为section,section是内存回收的基本单位,每次内存回收都会从section中选出特定的segment进行回收。
具体到本申请实施例,分配器向系统申请内存时采用的基本单位是segment,同样地,收集器回收垃圾内存时采用的基本单位是segment。
在实际实现时,GC会影响系统整体吞吐量和性能。比如,在用户线程运行过程中,通常会占用CPU的一半资源去执行GC,因此在GC阶段,系统性能的反应速度就下降一半。为了提升F2FS的GC机制,会综合衡量GC带来的各种影响。相应地,需要在合适的时机进行GC,而不能在内存空间快被占满时再清理,也不能由于执行GC而导致频繁停顿。例如在并行清理的过程中内存空间不足以容纳应用产生的垃圾时,则会提示错误,导致所有应用线程被暂停,停顿时间变长。
因此,需要合理设置GC的相关参数,以及时充分地执行GC,减少内存碎片,提高内存可用率,并尽可能减少GC导致的应用线程停顿。
为了提升F2FS的GC能力,本申请实施例提供了一种动态调整GC参数的方法及电子设备,通过在手机系统底层的改进,以提高用户体验。通过本申请方案,能够周期性地检测GC效果,然后根据GC效果来动态调整GC参数,例如在GC效果满足预设条件时将needGC更改为true,以及增大前台GC时长,并降低GC阈值,因此本申请方案可以在合适的时机执行GC,以及在合适的时机结束GC,并且能够保证合理的GC执行频率。
本申请实施例提供的动态调整GC参数的方法,可以应用于电子设备。电子设备即为本申请实施例提供的动态调整GC参数的方法的执行主体,本申请实施例对电子设备的具体类型不作任何限制。示例性地,电子设备包括手机(mobile phone)、智能电视、穿戴式设备、平板电脑(Pad)、带无线收发功能的电脑、虚拟现实(virtual reality,VR)终端设备、增强现实(augmentedreality,AR)终端设备、工业控制(industrialcontrol)中的无线终端、无人驾驶(self-driving)中的无线终端、远程手术(remote medical surgery)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端等等。本申请的实施例对电子设备所采用的具体技术和具体设备形态不做限定。
参见图1,为本申请实施例提供的一种电子设备的结构示意图。电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universalserialbus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,触摸传感器180K,环境光传感器180L等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signalprocessor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-networkprocessing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。例如,处理器110用于执行本申请实施例中的动态调整内存回收GC参数的方法。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
外部存储器120一般指外存储器,在本申请实施例中,外部存储器是指除电子设备的内存及处理器的高速缓存以外的储存器,该储存器一般为非易失性存储器。
内部存储器121,也可以称为“内存”,可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。
本申请实施例中,处理器110可以周期地检测内存回收效果,然后处理器110根据内存回收效果动态地调整内部存储器121中的与内存回收相关的参数。与内存回收相关的参数包括:
内存回收模式,对应地采用needGC表示;
内存回收所需时长,对应地采用gc_urgent_sleep_time表示;
内存回收的阈值,对应地采用DIRTY_SEGMENTS_THRESHOLD表示。
例如,在内存回收效果不佳时,可以将内存回收模式调整为前台GC模式以快速触发回收内存,增大内存回收所需时长以充分回收内存,和/或降低内存回收的阈值以更容易触发回收内存。
再例如,在内存回收效果有所改善时,可以将内存回收模式调整为后台GC模式,维持或者重置内存回收所需时长,和/或维持或者重置内存回收的阈值。
以上是以电子设备100为例对本申请实施例作出的具体说明。应该理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
本申请实施例提供的电子设备可以是用户设备(user equipment,UE),例如可以为移动终端(例如用户手机)、平板电脑、桌面型、膝上型笔记本电脑、手持计算机、上网本、个人数字助理(personal digital assistant,PDA)等设备。
另外,在上述部件之上,运行有操作系统。例如苹果公司所开发的iOS操作系统,谷歌公司所开发的Android开源操作系统,微软公司所开发的Windows操作系统等。在该操作系统上可以安装运行应用程序。
电子设备100的操作系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的Android系统为例,示例性说明电子设备100的软件结构。
图2是本申请实施例的电子设备100的软件结构框图。
分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层(applications),应用程序框架层(application framework),安卓运行时(AndroidRuntime)和系统库,以及内核层(kernel)。
其中,应用程序层可以包括一系列应用程序包。例如,应用程序层可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息、运动健康、智慧生活等应用程序(应用程序可以简称为应用),本申请实施例对此不做任何限制。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。应用程序框架层可以包括窗口管理器,内容提供器,视图系统,资源管理器,通知管理器等,活动管理器,剪贴板管理器等,本申请实施例对此不做任何限制。
系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(media libraries),三维图形处理库(例如:openGLES),二维图形引擎(例如:SGL)等。表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了二维图层和三维图层的融合。
Android Runtime包括核心库和虚拟机。Android Runtime负责安卓系统的调度和管理。核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及内存回收等功能。
具体到本申请实际的内存回收,内存回收指的是对用户空间中的堆段和文件映射段进行回收(用户使用 malloc、mmap 等分配出去的空间)。用户可以手动地使用free()等进行内存释放。当没有空闲的物理内存时,内核就会开始自动地进行回收内存工作。回收的方式主要是两种:后台内存回收(后台GC)和直接内存回收(前台GC)。
后台内存回收:在物理内存不足的时候,会唤醒kswapd内核线程来回收内存,这个回收内存的过程异步的,不会阻塞进程的执行。
直接内存回收:如果后台异步回收跟不上进程内存申请的速度,就会开始直接回收,这个回收内存的过程是同步的,会阻塞进程的执行。
如果直接内存回收后,空闲的物理内存仍然无法满足此次物理内存的申请,那么内核就会触发内存溢出(out of memory,OOM)机制,根据算法选择一个占用物理内存较高的进程,然后将其杀死,释放内存资源,直到释放足够的内存。
这是因为,虽然在编程语言层面就已经提供了垃圾回收机制,但是当程序申请内存的速度远远大于内存回收的速度,还是会发生内存不足,所以还需要操作系统实现内存回收。
在本申请实施例中,电子设备上可安装使用例如Java语言编写的各种各样的应用程序(application,APP)或服务(service)。因为Java语言的跨平台性以及开放性,为了在多种平台上实现兼容,电子设备在运行使用Java语言编写的APP时,需要创建Java虚拟机(virtual machine,JVM),JVN中存在有Java的内存回收GC线程。当APP或服务使用的堆内存不足时,JVM将启动GC线程,执行GC,以回收不再继续被使用的堆内存,使这部分内存可以被其他应用程序使用,提高内存的使用率。
以具备安卓系统的电子设备运行购物应用为例进行说明。当电子设备运行购物应用时,通过会启动购物应用的一个或多个进程(如购物应用的界面对应的进程1,购物应用后台更新服务对应的进程2),每个进程都将对应一个虚拟机,且每个进程中都包含一个堆任务程序HeapTaskDaemon线程,该线程可以实现垃圾回收(GC)的功能,相应地可以将该线程称为GC线程。该GC线程负责监控本进程对应的虚拟机堆内存的使用情况,并根据本进程对应的堆内存的使用情况确定是否启动GC过程。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。
需要说明的是,本申请实施例虽然以Android系统为例进行说明,但是其基本原理同样适用于基于iOS或Windows等操作系统的电子设备。
本申请实施例提供的动态调整GC参数的方法的执行主体可以为上述的电子设备,也可以为该电子设备中能够实现该动态调整GC参数的方法的功能模块和/或功能实体,并且本申请方案能够通过硬件和/或软件的方式实现,具体的可以根据实际使用需求确定,本申请实施例不作限定。下面以电子设备为例,结合附图对本申请实施例提供的动态调整GC参数的方法进行示例性的说明。
首先需要说明的是,关于F2FS的GC机制,通常会考虑到1)哪些内存需要回收?2)什么时候回收?3)如何回收?这三个问题。需要说明的是,本申请实施例重点关注2)什么时候回收的问题,将在下文实施例中着重说明周期性地监测GC效果,然后基于GC效果动态地调整GC参数,由于调整GC参数会影响GC回收的时机,因此可以根据调整后的GC参数确定何时执行GC。关于1)哪些内存需要回收以及3)如何回收的问题,具体可以参见相关技术中的详细描述,本申请实施例中不予赘述。
还需要说明的是,在本申请实施例中,F2FS GC可以包括后台GC模式和前台GC模式,前台GC模式指应用程序在前台运行时执行GC,而后台GC模式指应用程序在后台运行时执行GC。通常默认执行后台GC模式,在紧急情况下会转为前台GC模式。换言之,当系统没有进行IO操作时,将启动后台GC线程。当没有足够的空闲堆段(free segment)时,需要向系统申请分配内存空间,将启动前台GC线程。相比而言,前台GC线程的优先级最高,在启动前台GC线程的情况下,其他正在运行的所有线程会被挂起,在前台GC线程结束后,其他线程恢复运行。
其中,后台GC模式还被称为常规模式或默认模式(GC_NORMAL),前台GC模式还被称为紧急模式(GC_URGENT)。
为了更好地理解本申请实施例,以下先对本申请实施例进行简要说明:
本申请实施例提供的动态调整GC参数的方法,周期性地根据剩余空间和堆段状态综合判断内存空间可用率的变化,以此检测GC效果,并根据GC效果来动态调整GC参数,然后按照调整后的GC参数执行GC。在GC效果不佳时,可以将内存回收模式调整为前台GC模式以快速触发GC,也可以增大内存回收所需时长以充分GC,还可以降低内存回收的阈值以更容易触发GC;在内存回收效果有所改善时,维持或重置GC参数。本方案通过周期性执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
通过本申请方案能够周期性地检测GC效果,然后根据GC效果来动态调整GC参数,例如在GC效果满足预设条件时将needGC更改为true,以及增大前台GC时长,并降低GC阈值,因此本申请方案可以在合适的时机执行GC,以及在合适的时机结束GC,并且能够保证合理的GC执行频率。
下面通过三部分介绍本申请实施例提供的动态调整GC参数的方法。首先说明GC参数具体包括哪些参数,然后再说明周期性地检测GC效果,然后再说明根据GC效果来动态调整GC参数的判断逻辑过程。
第一部分:GC参数
在本申请实施例中,参照图3所示,GC参数可以包括:
(1)DIRTY_SEGMENTS_THRESHOLD:待回收堆段阈值,用于判断是否满足内存回收条件,该阈值简称为GC阈值,记为S。
需要说明的是,GC阈值是由收集器设置的阈值,收集器回收垃圾内存时采用的基本单位是segment。为了便于说明,采用d表示电子设备实时获取的总内存空间中的待回收堆段或垃圾段(dirty_segments)的数量。
若d>S,表示待回收堆段的数量已经超过GC阈值,也就是说,电子设备没有足够的空闲堆段(free_segments),需要向系统申请分配内存空间,则需要触发并执行GC,及时进行内存回收。
若d≤S,表示待回收堆段的数量未超过GC阈值,也就是说,表示电子设备有足够的空闲堆段(free_segments),无需执行GC。可以理解的是,在未执行GC的情况下,若d≤S,则不启动GC线程;在已执行GC的情况下,若d≤S,则结束GC线程。
需要说明的是,GC阈值的取值具体可以根据实际使用需求进行设置,本申请实施例不作限定。示例性地,S可以取100。为了便于说明,以下实施例中均以GC阈值取100为例进行示例性说明。
举例来说,假设总内存空间中的待回收堆段(dirty_segments)的数量为1500,大于GC阈值100,在此情况下需要执行GC。再例如,假设总内存空间中的待回收堆段(dirty_segments)的数量为90,小于GC阈值100,在此情况下无需执行GC。
(2)needGC:用于确定GC模式。
如果needGC置为true,那么GC_MODE标记为3,表示启用紧急模式(GC_URGENT)。将needGC置为true,相应地会在执行GC时优先采用紧急模式(GC_URGENT)。其中,在紧急模式下,当没有足够的空闲堆段(free_segments)时,需要向系统申请分配内存空间,启动前台GC线程,及时进行内存回收。
如果needGC置为false,那么GC_MODE标记为0,表示启用常规模式(GC_NORMAL)。将needGC置为false,相应地会在执行GC时优先采用常规模式(GC_NORMAL)。其中,在常规模式下,当系统没有进行IO操作时,启动后台GC线程。
(3)gc_urgent_sleep_time:按照紧急模式执行GC所需的时长,简称前台GC时长,记为T。
其中,待回收堆段也称为待回收堆段,空闲堆段也称为空闲堆段。
下面结合原生策略和本申请实施例提供的改进策略进行比对说明。
参考图4所示,在原生策略中,在确认是否需要GC以及确定GC模式时只考虑segment状态,该segment状态包括待回收堆段dirty_segments的数量,例如当待回收堆段dirty_segments的数量小于GC阈值时,通常会确定无需执行GC,但是由于原生策略未考虑剩余空间的情况,因此可能出现在内存空间快被占满时还不会触发GC的问题,进而会导致内存不足,影响用户使用体验。
举例来说,表1和表2分别给出了两种内存空间占用状态。
在表1的A状态下,剩余空间为380M,空闲堆段(free_segments)的数量为1005个,待回收堆段dirty_segments的数量为90个。按照原生策略,在判断是否需要GC时只考虑segment状态(即待回收堆段dirty_segments的数量),由于dirty_segments的数量90个,小于GC阈值100个,因此按照原生策略可以确定A状态不需要GC。
表1
在表2的B状态下,剩余空间为1.4G,空闲堆段(free_segments)的数量为857个,待回收堆段dirty_segments的数量为1406个。按照原生策略,在判断是否需要GC时只考虑segment状态,由于dirty_segments的数量1406个,大于GC阈值100个,因此按照原生策略可以确定B状态需要GC。
表2
也就是说,按照原生策略,只能识别出B状态需要GC,不能识别出A状态需要GC。然而,对于A状态而言,剩余空间非常小,内存空间快被占满,电子设备已处于末端状态,需要及时进行内存回收,但是由于原生策略只考虑segment状态,并没有考虑剩余空间,因此无法识别出A状态也需要GC。
需要说明的是,本申请实施例中,根据实验老化后的场景分析发现,电子设备的状态同时会受剩余内存空间和segment的影响,在确认是否需要GC时应该综合考虑两个因素的影响。而原生策略中执行GC时的参数值是固定的,设置之后不再改变。即使根据电子设备的剩余空间或segment的状态设置不同的参数值,但是参数给定的是固定值,无法保证设置参数值的合理性,这样可能导致内存回收不及时以及不够彻底的问题。鉴于此,本申请实施例提出了改进策略:周期性地检测GC效果,并根据GC效果动态地调整GC参数。
再参考图4所示,与上述原生策略相比较,本申请实施例提供了针对GC参数的改进策略:在确认是否需要GC以及确定GC模式时,既考虑堆段(segment)状态,还考虑剩余空间,这样可以更灵敏地识别出需要GC的场景。
具体地,根据堆段状态和剩余空间等因素确定GC效果是较差还是有改善,然后根据GC效果动态地调整GC参数,例如在GC效果较差时调整GC参数以改善GC效果,在GC效果有所改善后维持GC参数以维持GC效果,在GC效果不明显的情况下将GC参数重置为默认值。
需要说明的是,如上所述,GC参数包括GC阈值、needGC值以及前台GC时长,相应地可以根据GC效果,动态调整GC阈值、needGC值以及前台GC时长中的至少一项,具体调整策略将在下文中描述。
以上说明了GC参数,下面详细说明如何周期性地检测GC效果,然后再说明如何根据GC效果来动态调整GC参数的过程。
第二部分:周期性地检测GC效果
在本申请实施例中,可以根据本申请实施例提供的GC效果检测算法来实现检测GC效果的目的。示例性地,下面给出了该GC效果检测算法:
(等式1)
(等式2)
(等式3)
其中,F表示在第一周期,根据P、f和d计算得到的电子设备的内存空间可用率,P、f和d是在第一周期同时获取的关于电子设备内存空间的使用情况的参数值。P表示在第一周期阶段,剩余内存空间与总内存空间之间的比例(left_space_percentage),f表示在第一周期阶段,总内存空间中的空闲堆段(free_segments)的数量,d表示在第一周期阶段,总内存空间中的待回收堆段(dirty_segments)的数量。
相应地,F´表示在第二周期,根据P´、f´和d´计算得到的内存空间可用率,P´、f´和d´是在第二周期同时获取的关于电子设备内存空间的使用情况的参数值。P´表示在第二周期阶段,剩余内存空间与总内存空间之间的比例(left_space_percentage),f´表示在第二周期阶段,总内存空间中的空闲堆段(free_segments)的数量,d´表示在第二周期阶段,总内存空间中的待回收堆段(dirty_segments)的数量。
其中,∆F表示内存空间可用率的变化量。下面说明如何基于∆F判断GC效果。
1)当时,表示内存空间可用率减小,GC效果较差。
可选地,在此情况下,可以按照紧急模式(前台GC模式)进行内存回收,及时快速地回收内存,还可以增大前台GC时长,充分地回收内存,还可以降低GC阈值,降低GC的触发门槛。由此可以提升GC效果。
2)当时,表示内存空间可用率增大,GC效果良好。
相应地,可以按照常规模式(后台GC模式)进行内存回收。
3)当时,表示内存空间可用率没有变化,GC效果不明显。
相应地,可以恢复为常规模式(后台GC模式)进行内存回收。
其中,第二周期是在第一周期之后的一个周期。第一周期的时长和第二周期的时长相等,时长的具体取值可以根据实际使用需求进行确定,本申请实施例不作限定。
示例性地,周期的时长可以取1小时,即每隔1个小时检测一次GC效果。图5示出了本申请实施例提供的周期性地检测GC效果的示意图。
在本申请实施例中,基于上述等式1、等式2和等式3,周期性地检测GC效果的过程可以包括:
在第一周期,实时获取P、f和d,然后将P、f和d代入上述等式1,计算得到第一周期阶段的内存空间可用率F(记为F1)。
在第二周期,实时获取P´、f´和d´,然后将P´、f´和d´代入上述等式2,计算得到第二周期阶段的内存空间可用率F´(记为F2)。然后将F1和F2代入上述等式3,计算得到内存空间可用率的变化量∆F=F2 - F1。然后根据该∆F值的大小检测GC效果。
在第三周期,同样实时获取P´、f´和d´,为了区分,这里分别记为P〞、f〞和d〞,然后将P〞、f〞和d〞代入上述等式2,计算得到第三周期阶段的内存空间可用率F´(记为F3)。然后将F2和F3代入上述等式3,计算得到内存空间可用率的变化量∆F=F3 - F2。然后根据该∆F值的大小检测GC效果。
以此类推,周期性地执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,这样能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
第三部分:如何根据GC效果来动态调整GC参数
如第二部分所述,可以在周期性地获取关于电子设备内存空间的使用情况的参数值:总内存空间中的空闲堆段(free_segments)的数量f,总内存空间中的待回收堆段(dirty_segments)的数量d,以及剩余内存空间与总内存空间之间的比例P。其中,f和d代表了电子设备内存空间的堆段状态,P代表了电子设备内存空间的剩余空间状态。
然后,可以根据第一周期获取的P、f和d计算得到第一周期阶段电子设备的内存空间可用率,相应地可以在第二周期获取P、f和d,并根据第二周期获取的P、f和d计算得到第二周期阶段电子设备的内存空间可用率。
然后,将本周期的内存空间可用率与上一周期的内存空间可用率进行比较。如果本周期的内存空间可用率小于上一周期的内存空间可用率,那么表明内存空间可用率减小,GC效果较差;相应地可以调整GC参数,以改善GC效果。如果本周期的内存空间可用率大于上一周期的内存空间可用率,那么表明内存空间可用率增大,GC效果有所改善;相应地可以维持GC参数,以维持GC效果。如果本周期的内存空间可用率等于上一周期的内存空间可用率,那么表明内存空间可用率不变,GC效果不明显;相应地可以将GC参数恢复为默认值。
如上所述,GC参数包括needGC值、前台GC时长以及GC阈值,相应地可以根据GC效果,动态调整GC阈值、needGC值以及前台GC时长中的至少一项,下面整体介绍GC参数的动态调整策略。
1)当根据剩余空间和堆段状态判断出内存空间可用率减小,GC效果较差时,可以优先采用紧急模式,在此情况下可以将参数needGC调整为true。
当根据剩余空间和堆段状态判断出内存空间可用率增大或者不变,GC效果有所改善时,可以优先采用默认模式,在此情况下可以将参数needGC调整为false。
由此,本申请实施例可以根据GC效果动态调整参数needGC。
本申请实施例可以通过调整参数needGC,调整GC模式在紧急模式和常规模式之间进行切换。例如,在将needGC从false调整为true的情况下,将GC模式从常规模式切换为紧急模式,快速进行GC,及时清理内存垃圾。
2)当根据剩余空间和堆段状态判断出内存空间可用率减小,GC效果较差时,可以增大前台GC时长,以充分进行GC。
当根据剩余空间和堆段状态判断出内存空间可用率增大,GC效果有所改善时,可以维持前台GC时长,以维持GC效果。
当根据剩余空间和堆段状态判断出内存空间可用率不变,GC效果不明显时,可以将GC恢复到默认值。
由此,本申请实施例可以根据GC效果,动态调整参数前台GC时长。
3)当根据剩余空间和堆段状态判断出内存空间可用率减小,GC效果较差时,可以降低GC阈值,以降低GC触发门槛,及时并充分地进行GC。
当根据剩余空间和堆段状态判断出内存空间可用率增大,GC效果有所改善时,可以维持GC阈值,以维持GC效果。
当根据剩余空间和堆段状态判断出内存空间可用率不变,GC效果不明显时,可以将GC阈值恢复到默认值。
由此,本申请实施例可以根据GC效果,动态调整GC阈值。
本申请可以通过调整GC阈值,例如可以降低GC阈值,以降低GC触发门槛,能够在内存空间可用率减小的情况下,快速识别出地需要进行GC的场景。
需要说明的是,在GC垃圾回收过程中会进行内存整理,以减少内存碎片,提高内存使用率。本申请实施例中,可以周期性地循环执行下述步骤:计算内存空间可用率的变化,根据内存空间可用率的变化确定GC效果,即检测GC效果;然后根据GC效果,动态调整GC参数;然后按照GC参数执行GC。
以上介绍了针对GC参数的改进策略,下面详细说明如何根据GC效果来动态调整GC参数的过程。
实施例一:根据GC效果动态调整needGC值。
首先结合图6示例性地说明根据GC效果动态调整needGC值的过程。
如图6所示,调用函数SetGCUrgentPace(),周期性地检测GC效果,即根据上述等式1、等式2和等式3计算∆F,然后基于∆F来检测GC效果。
时,表明内存空间可用率增大,GC效果较好,无需切换到前台GC模式进行内存回收,因此维持上一周期的needGC值即可,例如当上一周期needGC值为false时,本周期needGC值维持false。如上所述,若needGC为false,则在执行GC时可以优先采用常规模式(GC_NORMAL)。其中,常规模式即采用后台GC模式,即当系统没有进行IO操作时,将启动后台GC线程。
时,表明内存空间可用率减小GC效果不佳,需要切换到前台GC模式,及时进行内存回收,因此可以设置needGC=true。如上所述,若needGC为true,则在执行GC时可以优先采用紧急模式(GC_URGENT)。其中,紧急模式即采用前台GC模式,当待回收堆段(dirty_segments)的数量已经超过GC阈值时,将启动前台GC线程,因此能够及时进行内存回收,保证电子设备实时具有充足的内存空间。
此外,本申请实施例还提供了逃生方案,如果检测到,表明内存空间可用率不变,那么可以将needGC值恢复为初始的默认参数值false。或者,如果内存空间可用率一直不变,例如持续预设时长(如1分钟)状态不变,那么可以将needGC值恢复为初始的默认参数值false。
也就是说,本申请实施例可以根据内存空间可用率的变化,判断GC效果,然后根据GC效果动态调整needGC。需要说明的是,“动态调整needGC”包括将needGC调整为true,或者将needGC调整为false。
需要说明的是,关于调用函数SetGCUrgentPace()的过程将在下文中描述。
下面举例来说周期性地检测GC效果并根据GC效果动态调整needGC值的过程。其中,假设needGC值初始的默认参数值为false。
如图7所示,首先在第一周期检测到GC效果为,表示内存空间可用率减小,GC效果较差,在此情况下可以将needGC值从false修改为true,即GC处理模式从后台GC模式切换到前台GC模式。若触发并执行GC,则优先采用前台GC模式。
然后在第二周期检测到GC效果为,表示GC效果有所改善,在此情况下needGC值维持为true,即GC处理模式仍然采用前台GC模式。若触发并执行GC,则优先采用前台GC模式。
然后在第三周期检测到GC效果为,表示内存空间可用率不变,在此情况下可以将needGC值从true恢复为false,即GC处理模式从前台GC模式切换到后台GC模式。若触发并执行GC,则优先采用后台GC模式。
然后在第四周期检测到GC效果为,表示内存空间可用率减小,GC效果较差,在此情况下可以将needGC值从false修改为true,即GC处理模式从后台GC模式切换到前台GC模式。若触发并执行GC,则优先采用前台GC模式。
以此类推,周期性地执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,这样能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
实施例二:根据GC效果动态调整前台GC时长T(gc_urgent_sleep_time)值。
下面再结合图8示例性地说明根据GC效果动态调整前台GC时长的过程。
如图8所示,调用函数SetGCUrgentPace(),周期性地检测GC效果,即根据上述等式1、等式2和等式3计算∆F,然后基于∆F来检测GC效果。
场景1:当时,表示内存空间可用率减小,GC效果不佳,需要充分进行内存回收。对此,本申请方案的调整策略为:将前台GC时长值从T增大为T´,以充分进行GC。例如将前台GC时长增大为15秒,即在15秒内完成GC。
示例性地,如何调整前台GC时长,具体可以根据下述等式4进行计算:
(等式4)
其中,T表示系统默认设置的前台GC时长,T´为本次调整后的前台GC时长,N表示第N次检测到,α表示预设的系数,具体取值可以根据实际使用需求进行确定,本申请实施例不作限定,例如α可以取10。相应地,上述等式4可以表示为:
(等式5)
需要说明的是,若在本周期检测到,则N开始计数,记为1。若在下一周期仍然检测到,则N继续累计加1。
示例性地,假设默认值T=5秒,若在本周期检测到,则N=1,S´=5+10×1=15。若在下一周期仍然检测到,则N=2,S´=5+10×2=25。
场景2:当时,表示内存空间可用率增大,GC效果较好,无需调整前台GC时长,例如,当时,如果上一周期计算得到前台GC时长为15秒,那么本周期前台GC时长可以维持为15秒,即前台GC在15秒内完成。
场景3:本申请实施例还提供了逃生方案,如果检测到,状态一直不变,例如持续预设时长(如1分钟)状态不变,那么可以将前台GC时长恢复为初始的默认参数值(例如5秒)。
并且,在检测到的情况下,如果N大于零,那么将N清零。
也就是说,本申请实施例可以根据内存空间可用率的变化,判断GC效果,然后根据GC效果动态调整前台GC时长。需要说明的是,“动态调整前台GC时长”包括增大前台GC时长,维持前台GC时长不变,或者将前台GC时长恢复为默认值。
下面通过两个示例举例来说周期性地检测GC效果,并根据GC效果动态调整前台GC时长T的过程。其中,假设前台GC时长初始的默认参数值为5秒。
示例1:
如图9中的(a)所示,首先在第一周期检测到,表明内存空间可用率增大,GC效果良好,相应地前台GC时长采用默认T值,例如5秒。在需要执行GC时,在5秒内完成内存回收。
然后,在第二周期检测到GC效果为,表明内存空间可用率减小,GC效果不佳,此时是第一次检测出,因此N取1。相应地,可以根据上述等式5计算出前台GC时长T´=5+10×1=15秒。在需要执行GC时,在15秒内完成内存回收,通过增加前台GC时长,使得内存回收更充分。
然后,在第三周期仍然检测到GC效果为,内存空间可用率仍然减小,GC效果仍然不佳。在此情况下第二次检测出,N取2。相应地,可以根据上述等式5计算出前台GC时长T´=5+10×2=25秒。在需要执行GC时,在25秒内完成内存回收,再次增加前台GC时长,以更充分地进行内存回收。
然后,在第四周期检测到GC效果为,表明内存空间可用率增大,GC效果有所改善。在此情况下维持之前的前台GC时长T´=25秒。
然后,在第五周期检测到GC效果为,或者检测到GC效果为且在1分钟内一直为,即内存空间可用率不变或者长时间不变,在此情况下将N清零。相应地,gc_urgent_sleep_time值调整为默认的T值,即5秒。在需要执行GC时,在5秒内完成内存回收,通过将前台GC时长恢复为默认值,以快速完成GC。
示例2:
如图9中的(b)所示,在第一周期检测到GC效果为,表明内存空间可用率减小,GC效果不佳,此时是第一次检测出,因此N取1,相应地可以根据上述等式5计算出前台GC时长T´=5+10×1=15秒。在需要执行GC时,在15秒内完成内存回收,通过增加前台GC时长,使得内存回收更充分。
然后在第二周期检测到GC效果为,表明内存空间可用率增大,GC效果有所改善。在此情况下维持之前的前台GC时长T´=15秒。在需要执行GC时,在15秒内完成内存回收。
然后在第三周期检测到GC效果为,表明内存空间可用率仍然增大,GC效果有所改善。在此情况下维持之前的前台GC时长T´=15秒。在需要执行GC时,在15秒内完成内存回收。
然后在第四周期检测到GC效果为,表明内存空间可用率减小,GC效果不佳,此时是第二次检测出,因此N取2,相应地可以根据上述等式5计算出前台GC时长T´=5+10×2=25秒。在需要执行GC时,在25秒内完成内存回收,通过增加前台GC时长,使得内存回收更充分。
然后在第五周期检测到GC效果为,或者检测到GC效果为且在1分钟内一直为,即内存空间可用率不变或者长时间不变,在此情况下将N清零,相应地gc_urgent_sleep_time值调整为默认的T值,即5秒。在需要执行GC时,在5秒内完成内存回收,通过将前台GC时长恢复为默认值,以快速完成GC。
以此类推,周期性地执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,这样能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
本申请实施例中,能够周期性地检测GC效果,根据GC效果动态地调整前台GC时长,每当检测到GC效果不佳时,可以增大前台GC时长,并且在连续多次检测到GC效果不佳时,可以基于检测次数以递增方式调整前台GC时长。通过延长内存回收时长,这样能够充分进行内存回收,保证电子设备实时具有充足的内存空间。相应地,当检测到GC效果良好时维持上一周期的前台GC时长,当检测到GC效果不明显时恢复前台GC时长的默认值。
实施例三:根据GC效果动态调整GC阈值(DIRTY_SEGMENTS_THRESHOLD)。
下面再结合图10示例性地说明根据GC效果动态调整GC阈值的过程。
如图10所示,调用函数SetGCUrgentPace(),周期性地检测GC效果,即根据上述等式1、等式2和等式3计算∆F,然后基于∆F来检测GC效果。
场景1:当时,表明内存空间可用率减小,GC效果不佳。对此,本申请方案的调整策略为:相应地减小GC阈值,通过降低GC触发门槛,及时识别需要GC的场景。例如将GC阈值从默认值100减小为95,即当待回收堆段的数量大于95时,就触发执行GC。可以理解,在内存空间可用率减小的情况下,通过将GC阈值下调,降低了GC触发门槛,更容易触发执行GC。
示例性地,如何调整GC阈值,具体可以根据下述等式6,基于当前GC阈值进行计算:
(等式6)
其中,S表示系统默认设置的GC阈值,S´为本次调整后的GC阈值,N表示第N次检测到,β表示预设的系数,具体取值可以根据实际使用需求进行确定,本申请实施例不作限定,例如β可以取5。相应地,上述等式6可以表示为:
(等式7)
需要说明的是,若在本周期检测到,则N开始计数,记为1;若在下一周期仍然检测到,N继续累计加1。
示例性地,假设默认值S=100,若在本周期检测到,则N=1,S´=100-5×1=95。若在下一周期仍然检测到,则N=2,S´=100-5×2=90。
场景2:当时,表明内存空间可用率增大,GC效果较好或者有所改善。对此,本申请方案不调整GC阈值,即GC阈值维持上一周期的S值。例如,假设在上一周期GC阈值为100,当时,本周期将GC阈值维持100,在此情况下,当待回收堆段的数量大于100时,就触发执行GC。
场景3:本申请实施例还提供了逃生方案,如果检测到,状态一直不变,例如持续预设时长(如1分钟)状态不变,那么可以将GC阈值恢复为初始的默认参数值(例如100)。
并且,在检测到的情况下,如果N大于零,那么将N清零。
也就是说,本申请实施例可以根据内存空间可用率的变化,判断GC效果,然后根据GC效果动态调整GC阈值。需要说明的是,“动态调整GC阈值”包括降低GC阈值,维持GC阈值不变,或者GC阈值恢复默认值。
在动态调整GC阈值之后,将总内存空间中的待回收堆段(dirty_segments)的数量与GC阈值进行比较,判断是否大于GC阈值。如果总内存空间中的待回收堆段(dirty_segments)的数量大于GC阈值,那么启动GC线程,执行GC,直到GC结束为止。
下面通过示例举例来说周期性地检测GC效果,并根据GC效果动态调整GC阈值的过程。其中,假设GC阈值初始的默认参数值为100,即总内存空间中如果待回收堆段(dirty_segments)超过100个,那么触发启动GC线程,进行内存回收。
如图11所示,首先在第一周期检测到,表明内存空间可用率减小,GC效果不佳。此时是第一次检测出,因此N取1。相应地,可以根据上述的等式7计算出GC阈值S´=100-5×1=95。当总内存空间中的待回收堆段(dirty_segments)的数量大于GC阈值95时,可以识别出该状态需要执行GC,在启动GC线程后执行GC。可以理解,在内存空间可用率减小的情况下,通过将GC阈值下调,降低了GC触发门槛,更容易触发执行GC,以更灵敏地识别需要GC的场景。
然后,在第二周期仍然检测到GC效果为,表明内存空间可用率仍然减小,GC效果仍然不佳。此时是第二次检测出,因此N取2。相应地,可以根据上述的等式7计算出GC阈值S´=100-5×2=90。当总内存空间中的待回收堆段(dirty_segments)的数量大于GC阈值90时,可以识别出该状态需要执行GC,在启动GC线程后执行GC。可以理解,在内存空间可用率减小的情况下,通过将GC阈值下调,降低了GC触发门槛,更容易触发执行GC,以更灵敏地识别需要GC的场景。
然后,在第三周期仍然检测到GC效果为,表明内存空间可用率仍然减小,GC效果仍然不佳。此时是第三次检测出,因此N取3。相应地,可以根据上述的等式7计算出GC阈值S´=100-5×3=85。当总内存空间中的待回收堆段(dirty_segments)的数量大于GC阈值85时,可以识别出该状态需要执行GC,在启动GC线程后执行GC。可以理解,在内存空间可用率减小的情况下,通过将GC阈值下调,降低了GC触发门槛,更容易触发执行GC,以更灵敏地识别需要GC的场景。
然后,在第四周期检测到GC效果为,表明内存空间可用率增大,GC效果有所改善。在此情况下维持之前的GC阈值S´=85。
然后,在第五周期检测到GC效果为,或者检测到GC效果为且在1分钟内一直为,即内存空间可用率不变或者长时间不变,在此情况下将N清零。相应地,GC阈值调整为默认值,即100。当总内存空间中的待回收堆段(dirty_segments)的数量大于GC阈值100时,可以识别出该状态需要执行GC,在启动GC线程后执行GC。
以此类推,周期性地执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,这样能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
图12为本申请实施例提供的一种动态调整GC参数的方法的示意性流程图,该方法可以由电子设备执行。电子设备的硬件结构图可以如图1所示,电子设备的软件结构框图可以如图2所示,但本申请实施例并不限于此。其中,涉及存储管理服务、定时智能检测模块、参数调整模块以及F2FS_GC线程模块等功能模块。其中,存储管理服务和定时智能检测模块位于软件架构的应用框架层,参数调整模块位于软件架构的系统库Native层,F2FS_GC线程模块位于软件架构的内核层。
参照图12所示,该方法包括下述的步骤S201-S209。
S201,存储管理服务(StorageManagerService)启动一个定时任务scheduleSmartIdlePass(),并指示定时智能检测模块执行该定时任务。
S202,在接收到指示后,定时智能检测模块周期性地执行函数runSmartIdleMaint(),并向存储管理服务反馈。
示例性地,周期时长可以为1小时。函数runSmartIdleMaint()为一个定时器。
S203,在接收到反馈后,存储管理服务指示参数调整模块执行函数setGCUrgentPace()。
其中,函数setGCUrgentPace()为用于周期性地检测GC效果并根据GC效果调整GC参数的函数。存储管理服务可以通过调用函数setGCUrgentPace()来设置GC参数。
S204,在接收到指示后,参数调整模块开始执行函数setGCUrgentPace()。
S205,参数调整模块周期性地检测GC效果。
其中,周期性地检测GC效果的过程,具体参见上述实施例中有关周期性地检测GC效果的详细描述,此处不再赘述。
S206,参数调整模块根据GC效果调整GC参数。如将needGC调整为true,增大前台GC时长,减小GC阈值。
其中,根据GC效果调整GC参数的过程,具体参见上述实施例中有关根据GC效果调整GC参数的详细描述,此处不再赘述。
S207,根据needGC可以确定GC模式。
如果needGC为true,GC模式(GC_MODE)为3,其中3代表GC紧急模式(GC_URGENT)。如果needGC为false,GC模式(GC_MODE)为0,其中0代表GC常规模式(GC_NORMAL)。
还需要说明的是,前台GC时长值越大,则执行GC越充分。
还需要说明的是,GC阈值越小,则更容易触发执行GC。
S208,参数调整模块向F2FS_GC线程模块发送GC模式、前台GC时长和GC阈值。
S209,当待回收堆段的数量大于GC阈值时,F2FS_GC线程模块按照GC模式执行GC,并在前台GC时长内完成。
本申请实施例中,可以周期性地循环执行下述步骤:计算内存空间可用率的变化,根据内存空间可用率的变化确定GC效果,即检测GC效果;然后根据GC效果,动态调整GC参数;然后按照GC参数执行GC。
上述步骤S201-S209说明了本申请周期性地检测GC效果,并根据GC效果动态调整GC参数的方法。具体可以根据GC效果,动态调整GC阈值、needGC值以及前台GC时长中的至少一项,下面示例性地分别给出调整策略以及内存回收过程。
示例性地,调整GC参数包括减小GC阈值,调整后的GC参数包括减小后的GC阈值。在此情况下,当总内存中的待回收堆段的数量大于减小后的GC阈值时,确定已满足触发执行GC的条件;若GC模式为后台GC模式,则等到系统没有进行IO操作时,启动后台GC线程,对总内存中的待回收堆段进行内存回收;若GC模式为前台GC模式,则直接对总内存中的待回收堆段进行内存回收。
示例性地,调整GC参数包括将所述GC模式从所述后台GC模式切换为所述前台GC模式。在此情况下,在所述前台GC模式下,监听所述总内存中的待回收堆段的数量是否大于所述GC阈值;当所述总内存中的待回收堆段的数量大于所述GC阈值时,对所述总内存中的待回收堆段进行内存回收。
示例性地,所述调整GC参数包括增大所述前台GC时长,所述调整后的GC参数包括增大后的前台GC时长。在此情况下,电子设备监听前台GC模式是否已启动,以及总内存中的待回收堆段的数量大于GC阈值;在前台GC模式已启动,且总内存中的待回收堆段的数量满足触发执行GC的条件时,对总内存中的待回收堆段进行内存回收,并且在增大后的前台GC时长内完成内存回收。
通过本申请方案,周期性地根据剩余空间和堆段状态综合判断内存空间可用率的变化,以此检测GC效果,并根据GC效果来动态调整GC参数,然后按照GC参数执行GC。在GC效果不佳时,可以将内存回收模式调整为前台GC模式以快速触发GC,增大内存回收所需时长以充分GC,和/或降低内存回收的阈值以更容易触发GC;在内存回收效果有所改善时,维持或重置GC参数。本申请方案通过周期性执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC,因此能够及时充分地执行GC,减少内存碎片,提高内存可用率。
也需要说明的是,在本申请实施例中,“大于”可以替换为“大于或等于”,“小于或等于”可以替换为“小于”,或者,“大于或等于”可以替换为“大于”,“小于”可以替换为“小于或等于”。
本文中描述的各个实施例可以为独立的方案,也可以根据内在逻辑进行组合,这些方案都落入本申请的保护范围中。
上文主要从方法步骤的角度对本申请实施例提供的方案进行了描述。可以理解的是,为了实现上述功能,实施该方法的电子设备包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的保护范围。
本申请实施例可以根据上述方法示例,对电子设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有其它可行的划分方式。下面以采用对应各个功能划分各个功能模块为例进行说明。
图13为本申请实施例提供的动态调整GC参数的装置300的示意性框图。该装置300可以用于执行上文方法实施例中电子设备所执行的动作。GC参数包括GC模式、前台GC时长和GC阈值,GC模式包括前台GC模式以及后台GC模式,后台GC模式为系统默认模式,前台GC时长为在前台GC模式下完成内存回收所需的时长,GC阈值为触发执行GC的门限值。该装置300包括处理单元310和内存回收单元320。
处理单元310,用于周期性地获取剩余内存占比和空闲堆段占比,并根据剩余内存占比和空闲堆段占比,确定电子设备的内存空间可用率;其中,剩余内存占比为电子设备的剩余内存与总内存之间的比例,空闲堆段占比为电子设备的空闲堆段与待回收堆段之间的比例;
处理单元310,还用于根据第二周期的内存空间可用率与第一周期的内存空间可用率之间的差值,确定内存空间可用率是否变化;其中,第二周期为第一周期之后相邻的一个周期;
内存回收单元320,用于:
当内存空间可用率变小时,调整GC参数,并按照调整后的GC参数进行内存回收;其中,调整GC参数包括以下至少一项:将所述GC模式从所述后台GC模式切换为所述前台GC模式,增大前台GC时长,减小GC阈值;
当内存空间可用率变大时,维持第一周期的GC参数,并按照维持的GC参数进行内存回收;
当内存空间可用率不变时,将GC参数重置为默认值,并按照重置后的GC参数进行内存回收。
通过本申请实施例提供的动态调整GC参数的装置,周期性地根据剩余空间和堆段状态综合判断内存空间可用率的变化,以此检测GC效果,并根据GC效果来动态调整GC参数,然后按照调整后的GC参数执行GC。在GC效果不佳时,可以将内存回收模式调整为前台GC以快速触发GC,也可以增大内存回收所需时长以充分GC,还可以降低内存回收的阈值以更容易触发GC;在内存回收效果有所改善时,维持或重置GC参数。本方案通过周期性执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
其中,第一周期的时长和第二周期的时长相等,时长的具体取值可以根据实际使用需求进行确定。示例性地,周期的时长可以取1小时,即每隔1个小时检测一次GC效果。本申请实施例中,可以周期性地循环执行下述步骤:计算内存空间可用率的变化,根据内存空间可用率的变化确定GC效果,即检测GC效果;然后根据GC效果,动态调整GC参数;然后按照GC参数执行GC。也就是说,周期性地执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,这样能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
根据本申请实施例的装置300可对应于执行本申请实施例中描述的方法,并且装置300中的单元的上述和其它操作和/或功能分别为了实现方法的相应流程,为了简洁,在此不再赘述。
本申请还提供一种芯片,该芯片与存储器耦合,该芯片用于读取并执行存储器中存储的计算机程序或指令,以执行上述各实施例中的方法。
本申请还提供一种电子设备,该电子设备包括芯片,该芯片用于读取并执行存储器存储的计算机程序或指令,使得各实施例中的方法被执行。
本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的动态调整GC参数的方法。
本实施例还提供了一种计算机程序产品,该计算机可读存储介质存储有程序代码,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的动态调整GC参数的方法。
其中,本实施例提供的电子设备、计算机可读存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (14)

1.一种动态调整内存回收GC参数的方法,其特征在于,所述GC参数包括GC模式、前台GC时长和GC阈值,所述GC模式包括前台GC模式以及后台GC模式,所述后台GC模式为系统默认模式,所述前台GC时长为在所述前台GC模式下完成内存回收所需的时长,所述GC阈值为触发执行GC的门限值,所述方法包括:
周期性地获取剩余内存占比和空闲堆段占比,并根据所述剩余内存占比和所述空闲堆段占比,确定电子设备的内存空间可用率;其中,所述剩余内存占比为所述电子设备的剩余内存与总内存之间的比例,所述空闲堆段占比为所述电子设备的空闲堆段与待回收堆段之间的比例;
根据第二周期的内存空间可用率与第一周期的内存空间可用率之间的差值,确定所述内存空间可用率是否变化;其中,所述第二周期为所述第一周期之后相邻的一个周期;
当所述内存空间可用率变小时,调整所述GC参数,并按照调整后的GC参数进行内存回收;其中,所述调整所述GC参数包括以下至少一项:将所述GC模式从所述后台GC模式切换为所述前台GC模式,增大所述前台GC时长,减小所述GC阈值;
当所述内存空间可用率变大时,维持所述第一周期的GC参数,并按照维持的GC参数进行内存回收;
当所述内存空间可用率不变时,将所述GC参数重置为默认值,并按照重置后的GC参数进行内存回收。
2.根据权利要求1所述的方法,其特征在于,所述根据所述剩余内存占比和所述空闲堆段占比,确定电子设备的内存空间可用率,包括:
采用下述等式,确定所述电子设备的内存空间可用率:
其中,F表示所述电子设备的内存空间可用率,P表示所述电子设备的剩余内存占比,以及,f /(d+1)表示所述电子设备的空闲堆段占比,f表示所述电子设备的总内存中的空闲堆段的数量,d表示所述总内存中的待回收堆段的数量。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
每当检测到所述内存空间可用率变小时,第一计数器累计加一,得到所述内存空间可用率变小的累计次数;
根据所述内存空间可用率变小的累计次数,确定所述前台GC时长的调整量,以及所述GC阈值的调整量。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
当检测到所述内存空间可用率不变时,将所述第一计数器清零。
5.根据权利要求3所述的方法,其特征在于,所述增大所述前台GC时长,包括:
将所述前台GC时长的默认值与所述前台GC时长的调整量求和,得到调整后的前台GC时长;
其中,采用下述等式,得到调整后的前台GC时长:
其中,为调整后的前台GC时长,T表示所述前台GC时长的默认值,表示所述前台GC时长的调整量,N表示所述内存空间可用率变小的累计次数,α表示第一预设系数。
6.根据权利要求3所述的方法,其特征在于,所述减小所述GC阈值,包括:
将所述GC阈值的默认值与所述GC阈值的调整量求差,得到减小后的GC阈值;
其中,采用下述等式,得到调整后的减小后的GC阈值:
其中,为减小后的GC阈值,S表示所述GC阈值的默认值,表示所述GC阈值的调整量,N表示所述内存空间可用率变小的累计次数,表示第二预设系数。
7.根据权利要求1或2所述的方法,其特征在于,所述当所述内存空间可用率不变时,将所述GC参数重置为默认值,并按照重置后的GC参数进行内存回收,包括:
每当所述内存空间可用率不变时,第二计数器累计加一,得到所述内存空间可用率不变的累计次数;
在所述内存空间可用率不变的累计次数大于或等于预设累计次数时,将所述GC参数重置为默认值,并按照重置后的GC参数进行内存回收;
将所述第二计数器清零。
8.根据权利要求1或2所述的方法,其特征在于,所述调整所述GC参数包括减小所述GC阈值,所述调整后的GC参数包括减小后的GC阈值;
所述按照调整后的GC参数进行内存回收,包括:
当所述总内存中的待回收堆段的数量大于所述减小后的GC阈值时,确定已满足触发执行GC的条件;
若所述GC模式为后台GC模式,则等到系统没有进行输入输出IO操作时,启动后台GC线程,对所述总内存中的待回收堆段进行内存回收;
若所述GC模式为所述前台GC模式,则直接对所述总内存中的待回收堆段进行内存回收。
9.根据权利要求1或2所述的方法,其特征在于,在所述调整所述GC参数包括将所述GC模式从所述后台GC模式切换为所述前台GC模式的情况下,所述按照调整后的GC参数进行内存回收,包括:
在所述前台GC模式下,监听所述总内存中的待回收堆段的数量是否大于所述GC阈值;
当所述总内存中的待回收堆段的数量大于所述GC阈值时,对所述总内存中的待回收堆段进行内存回收。
10.根据权利要求1或2所述的方法,其特征在于,所述调整所述GC参数包括增大所述前台GC时长,所述调整后的GC参数包括增大后的前台GC时长;
所述按照调整后的GC参数进行内存回收,包括:
监听所述前台GC模式是否已启动,以及所述总内存中的待回收堆段的数量大于所述GC阈值;
在所述前台GC模式已启动,且所述总内存中的待回收堆段的数量满足触发执行GC的条件时,对所述总内存中的待回收堆段进行内存回收,并且在所述增大后的前台GC时长内完成内存回收。
11.根据权利要求1或2所述的方法,其特征在于,所述将所述GC模式从所述后台GC模式切换为所述前台GC模式,包括:
通过将参数needGC值置为true,触发将GC模式代码置为3;
当所述GC模式代码为3时,启用所述前台GC模式。
12.根据权利要求1或2所述的方法,其特征在于,所述将所述GC参数重置为默认值,包括:
通过将参数needGC值置为false,触发将GC模式代码置为0;
当所述GC模式代码为0时,启用所述后台GC模式。
13.一种电子设备,其特征在于,包括处理器、存储器以及存储在所述存储器上的计算机程序,所述处理器用于执行所述计算机程序时实现如权利要求1至12中任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1至12中任一项所述的方法。
CN202310043341.6A 2023-01-29 2023-01-29 动态调整内存回收gc参数的方法、电子设备及存储介质 Active CN116049025B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310043341.6A CN116049025B (zh) 2023-01-29 2023-01-29 动态调整内存回收gc参数的方法、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310043341.6A CN116049025B (zh) 2023-01-29 2023-01-29 动态调整内存回收gc参数的方法、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN116049025A true CN116049025A (zh) 2023-05-02
CN116049025B CN116049025B (zh) 2023-08-11

Family

ID=86116350

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310043341.6A Active CN116049025B (zh) 2023-01-29 2023-01-29 动态调整内存回收gc参数的方法、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN116049025B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030212719A1 (en) * 2002-05-08 2003-11-13 Hitachi, Ltd. Method for heap memory management and computer system using the same method
US20050195635A1 (en) * 2004-03-08 2005-09-08 Conley Kevin M. Flash controller cache architecture
CN105159777A (zh) * 2015-08-03 2015-12-16 中科创达软件股份有限公司 进程的内存回收方法及装置
CN105740078A (zh) * 2016-01-29 2016-07-06 华为技术有限公司 一种内存管理方法、装置及终端
CN110737606A (zh) * 2019-09-27 2020-01-31 Oppo(重庆)智能科技有限公司 内存回收处理方法、装置、电子设备以及存储介质
CN111880991A (zh) * 2020-07-23 2020-11-03 Oppo广东移动通信有限公司 内存优化方法、装置、电子设备及计算机可读存储介质
CN115292052A (zh) * 2022-09-27 2022-11-04 荣耀终端有限公司 内存回收方法、电子设备及计算机可读存储介质
CN115344357A (zh) * 2021-05-11 2022-11-15 北京小米移动软件有限公司 应用程序的处理方法、装置及存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030212719A1 (en) * 2002-05-08 2003-11-13 Hitachi, Ltd. Method for heap memory management and computer system using the same method
US20050195635A1 (en) * 2004-03-08 2005-09-08 Conley Kevin M. Flash controller cache architecture
CN105159777A (zh) * 2015-08-03 2015-12-16 中科创达软件股份有限公司 进程的内存回收方法及装置
CN105740078A (zh) * 2016-01-29 2016-07-06 华为技术有限公司 一种内存管理方法、装置及终端
CN110737606A (zh) * 2019-09-27 2020-01-31 Oppo(重庆)智能科技有限公司 内存回收处理方法、装置、电子设备以及存储介质
CN111880991A (zh) * 2020-07-23 2020-11-03 Oppo广东移动通信有限公司 内存优化方法、装置、电子设备及计算机可读存储介质
CN115344357A (zh) * 2021-05-11 2022-11-15 北京小米移动软件有限公司 应用程序的处理方法、装置及存储介质
CN115292052A (zh) * 2022-09-27 2022-11-04 荣耀终端有限公司 内存回收方法、电子设备及计算机可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
陈宏宇: "基于持久性内存动态库的事务优化研究", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》, pages 137 - 15 *

Also Published As

Publication number Publication date
CN116049025B (zh) 2023-08-11

Similar Documents

Publication Publication Date Title
CN110764906B (zh) 内存回收处理方法、装置、电子设备以及存储介质
US9176869B2 (en) Memory use for garbage collected computer environments
CN110895492B (zh) 设备控制方法、装置、存储介质及电子设备
CN111158910A (zh) 内存管理方法、装置、存储介质及电子设备
CN110888746A (zh) 内存管理方法、装置、存储介质及电子设备
CN111274039B (zh) 内存回收方法、装置、存储介质及电子设备
CN115292052B (zh) 内存回收方法、电子设备及计算机可读存储介质
JP2021506016A (ja) メモリを処理するための方法および装置ならびに記憶媒体
WO2019076381A1 (zh) 终端内存回收处理方法及装置
CN114185494B (zh) 内存匿名页的处理方法、电子设备及可读存储介质
WO2022078105A1 (zh) 内存管理方法、电子设备以及计算机可读存储介质
CN114168331A (zh) 算法部署和调度方法以及算法部署和调度装置
WO2019128542A1 (zh) 应用处理方法、电子设备、计算机可读存储介质
CN111475299A (zh) 内存分配方法、装置、存储介质及电子设备
CN114218126A (zh) 内存回收方法和装置
CN110795234A (zh) 一种资源调度方法及装置
CN116049025B (zh) 动态调整内存回收gc参数的方法、电子设备及存储介质
CN116166573B (zh) 控制内存回收的方法、电子设备及存储介质
CN111381996B (zh) 内存异常处理方法及装置
CN116700816A (zh) 一种资源管理方法及电子设备
CN115617486A (zh) 基于智能物联网操作系统的任务调度方法、装置及设备
CN111078405B (zh) 内存分配方法、装置、存储介质及电子设备
CN112817715A (zh) 任务切换方法、装置及设备
WO2023185684A1 (zh) 一种应用程序的进程查杀方法及电子设备
WO2024087840A1 (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