动态调整内存回收GC参数的方法、电子设备及存储介质技术

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

【技术实现步骤摘要】
动态调整内存回收GC参数的方法、电子设备及存储介质


[0001]本申请涉及存储器内存回收
,尤其涉及一种动态调整GC参数的方法、电子设备及存储介质。

技术介绍

[0002]内存回收(garbage collection,GC),是一种存储器管理机制,通过GC线程对内存堆中的孤立对象进行回收,以释放内存空间。内存回收的目的在于清除不再使用的对象,通过回收被无用对象占用的内存空间,使内存空间可被程序再次使用,减少内存碎片,提高内存可用率。
[0003]目前的内存回收方式,由于内存回收不及时,导致电子设备的使用性能受到极大影响。因此,如何提升内存回收效果是亟待解决的技术问题。

技术实现思路

[0004]本申请提供一种动态调整GC参数的方法、电子设备及存储介质,通过周期性执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC,因此能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
[0005]为达到上述目的,本申请采用如下技术方案:第一方面,本申请提供一种动态调整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参数进行内存回收。
[0006]通过本申请实施例提供的动态调整GC参数的方法,周期性地根据剩余空间和堆段状态综合判断内存空间可用率的变化,以此检测GC效果,并根据GC效果来动态调整GC参数,
然后按照调整后的GC参数执行GC。在GC效果不佳时,可以将内存回收模式调整为前台GC以快速触发GC,也可以增大内存回收所需时长以充分GC,还可以降低内存回收的阈值以更容易触发GC;在内存回收效果有所改善时,维持或重置GC参数。本方案通过周期性执行检测GC效果、根据GC效果动态调整GC参数,按照GC参数执行GC的步骤,能够及时充分地执行GC,不断提升内存回收效果,提高内存可用率。
[0007]其中,第一周期的时长和第二周期的时长相等,时长的具体取值可以根据实际使用需求进行确定。示例性地,周期的时长可以取1小时,即每隔1个小时检测一次GC效果。
[0008]本申请实施例中,可以周期地检测内存回收效果,然后根据内存回收效果动态地调整与内存回收相关的参数。与内存回收相关的参数可以包括:内存回收模式,对应地采用needGC表示;内存回收所需时长,对应地采用gc_urgent_sleep_time表示;内存回收的阈值,对应地采用DIRTY_SEGMENTS_THRESHOLD表示。
[0009]例如,在内存回收效果不佳时,可以将内存回收模式调整为前台GC以快速触发回收内存,增大内存回收所需时长以充分回收内存,和/或降低内存回收的阈值以更容易触发回收内存。
[0010]再例如,在内存回收效果有所改善时,可以将内存回收模式调整为后台GC,保持或者重置内存回收所需时长,和/或保持或者重置内存回收的阈值。
[0011]其中,Java虚拟机JVN中存在有Java的垃圾回收GC线程。当APP或服务使用的堆内存不足时,JVM将启动GC线程,执行GC,以回收不再继续被使用的堆内存,使这部分内存可以被其他应用程序使用,提高内存的使用率。
[0012]在一些实施例中,所述根据所述剩余内存占比和所述空闲堆段占比,确定所述电子设备的内存空间可用率,包括:采用下述等式,确定所述电子设备的内存空间可用率:,其中,F表示电子设备的内存空间可用率,P表示电子设备的剩余内存占比,f /(d+1)表示电子设备的空闲堆段占比,f表示电子设备的总内存中的空闲堆段的数量,d表示总内存中的待回收堆段的数量。
[0013]其中,采用

F表示内存空间可用率的变化量。下面说明如何基于

F判断GC效果。
[0014]当时,表示内存空间可用率减小,GC效果较差。可选地,在此情况下,可以按照紧急模式(前台GC)进行内存回收,及时快速地回收内存,还可以增大前台GC时长,充分地回收内存,还可以降低GC阈值,降低GC的触发门槛。由此可以提升GC效果。
[0015]当时,表示内存空间可用率增大,GC效果良好。相应地,可以按照常规模式(后台GC)进行内存回收。
[0016]当时,表示内存空间可用率没有变化,GC效果不明显。相应地,可以恢复为常规模式(后台GC)进行内存回收。
[0017]其中,前台GC模式指应用程序在前台运行时执行GC,而后台GC模式指应用程序在后台运行时执行GC。通常默认执行后台GC模式,在紧急情况下会转为前台GC模式。换言之,当系统没有进行IO操作时,将启动后台GC线程。
[0018]通过本申请方案,能够周期性地检测GC效果,然后根据GC效果来动态调整GC参数,例如在GC效果满足预设条件时将needGC更改为true,以及增大GC所需时长,并降低GC阈值,因此本申请方案可以在合适的时机执行GC,以及在合适的时机结束GC,并且能够保证合理的GC执行频率。
[0019]在一些实施例中,所述方法还包括:每当检测到所述内存空间可用率变小时,第一计数器累计加一,得到所述内存空间可用率变小的累计次数;根据内存空间可用率变小的累计次数,确定所述前台GC时长的调整量,以及所述GC阈值的调整量。
[0020]在一些实施例中,所述方法还包括:当检测到所述内存空间可用率不变时,将所述第一计数器清零。
[0021]在一些实施例中,所述增大所述前台GC时长,包括:将所述前台GC时长的默认值与所述前台GC时长的调整量求和,得到调整后的前台GC时长;其中,采用下述等式,得到调整后的前台GC时长:,其中,T
´
为调整后的前台GC时长,T表示所述前台GC时长的默认值,表示所述前台GC时长的调整量,N表示所述内存空间可用率变小的累计次数,α表示第一预设系数。
[0022]示例性地,前台GC时长的默认值可以取5秒。第一预设系数α可以取1本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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...

【专利技术属性】
技术研发人员:梁燕
申请(专利权)人:荣耀终端有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1