可左右滑动选省市

一种内存资源使用控制方法、装置、设备及存储介质

更新时间:2024-07-01
一种内存资源使用控制方法、装置、设备及存储介质 专利申请类型:实用新型专利;
源自:北京高价值专利检索信息库;

专利名称:一种内存资源使用控制方法、装置、设备及存储介质

专利类型:实用新型专利

专利申请号:CN202110277571.X

专利申请(专利权)人:北京字节跳动网络技术有限公司
权利人地址:北京市石景山区实兴大街30号院3号楼2层B-0035房间

专利发明(设计)人:王舒捷

专利摘要:本公开提供了一种内存资源使用控制方法、装置、设备及存储介质,所述方法包括:首先,当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能,并在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,确定当前进程的虚拟内存空间中,主副内存堆对应的内存地址区间。然后,从主副内存堆对应的内存地址区间中,确定副内存堆对应的内存地址区间,最终,将副内存堆对应的内存地址区间的内存进行释放。本公开实施例通过关闭拷贝垃圾回收机制对应的内存管理功能,并释放副内存堆的方式,扩大了应用程序自身可用的虚拟内存空间,从而降低了应用程序运行中虚拟内存耗尽的概率。

主权利要求:
1.一种内存资源使用控制方法,其特征在于,所述方法包括:
当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能;所述预设条件用于表征虚拟内存空间支持当前业务需求;
在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,基于内存堆名称的特征相似性和/或内存地址区间的特征相似性,确定当前进程的虚拟内存空间中主副内存堆对应的内存地址区间;其中,所述主副内存堆包括所述拷贝垃圾回收机制中的主内存堆和副内存堆;
从所述主副内存堆对应的内存地址区间中,确定所述副内存堆对应的内存地址区间;
将所述副内存堆对应的内存地址区间的内存进行释放。
2.根据权利要求1所述的方法,其特征在于,所述当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能,包括:当监测到当前进程对应的虚拟内存空间中的剩余内存不足预设第一阈值时,关闭拷贝垃圾回收机制对应的内存管理功能;
或者,当监测到预设类型的业务功能被启动时,关闭拷贝垃圾回收机制对应的内存管理功能;其中,所述预设类型的业务功能包括虚拟内存占用需求量高于预设需求量阈值的业务功能。
3.根据权利要求1所述的方法,其特征在于,所述确定当前进程对应的虚拟内存空间中,主副内存堆对应的内存地址区间,包括:获取当前进程对应的虚拟内存空间的内存表;其中,所述内存表存储有多条内存分配信息,所述内存分配信息中包括内存堆名称和内存地址区间之间的对应关系;
基于所述内存堆名称和/或内存地址区间的特征相似性,对所述内存表中的所述多条内存分配信息进行比对,得到特征相似性满足预设相似性条件的两条内存分配信息;
将所述两条内存分配信息中的内存地址区间确定为主副内存堆对应的内存地址区间。
4.根据权利要求1所述的方法,其特征在于,所述主副内存堆对应的内存地址区间包括第一地址区间和第二地址区间;
所述从所述主副内存堆对应的内存地址区间中,确定所述副内存堆对应的内存地址区间,包括:创建对象,并获取所述对象所在的内存地址;
如果确定所述内存地址处于所述第一地址区间,则将所述第二地址区间确定为所述副内存堆对应的内存地址区间,否则,将所述第一地址区间确定为所述副内存堆对应的内存地址区间。
5.根据权利要求1‑4中任一项所述的方法,其特征在于,所述将所述副内存堆对应的内存地址区间的内存进行释放之后,还包括:扫描所述拷贝垃圾回收机制中的所述主内存堆,并对所述主内存堆中的无用对象进行标记;其中,所述无用对象为预设时间周期内未被调用的对象;
清除所述主内存堆中被标记的所述无用对象。
6.根据权利要求1‑4中任一项所述的方法,其特征在于,所述方法还包括:当监测到所述虚拟内存使用情况满足所述预设条件时,开启所述拷贝垃圾回收机制对应的内存管理功能。
7.一种内存资源使用控制装置,其特征在于,所述装置包括:
关闭模块,用于当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能;所述预设条件用于表征虚拟内存空间支持当前业务需求;
第一确定模块,用于在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,基于内存堆名称的特征相似性和/或内存地址区间的特征相似性,确定当前进程对应的虚拟内存空间中主副内存堆对应的内存地址区间;其中,所述主副内存堆包括所述拷贝垃圾回收机制中的主内存堆和副内存堆;
第二确定模块,用于从所述主副内存堆对应的内存地址区间中,确定所述副内存堆对应的内存地址区间;
内存释放模块,用于将所述副内存堆对应的内存地址区间的内存进行释放。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现如权利要求1‑6任一项所述的方法。
9.一种设备,其特征在于,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1‑6任一项所述的方法。
10.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现如权利要求1‑6任一项所述的方法。 说明书 : 一种内存资源使用控制方法、装置、设备及存储介质技术领域[0001] 本公开涉及数据处理领域,尤其涉及一种内存资源使用控制方法、装置、设备及存储介质。背景技术[0002] Android系统底层是基于Linux内核的,而Linux内核为Android系统内的每一个进程都会维护一个虚拟内存空间,每个进程只能访问内核为自己分配的虚拟内存空间,无法访问其他进程的虚拟内存空间,实现了内存之间的安全隔离。[0003] 虚拟内存空间中的任意内存的地址都需要借助CPU进行寻址,虚拟内存空间的大小取决于CPU可寻址的范围,因CPU可寻址范围的限制,导致分配给每个进程的虚拟内存空间的大小是固定数值。当进程的虚拟内存使用量达到该固定数值,内核则无法再为其分配更多的虚拟内存空间,一旦再次接收到分配虚拟内存空间的请求,则可能因发生虚拟内存溢出(英文:Virtualmemoryoutofmemroy)而导致程序无法正常运行,从而引起应用程序的崩溃或闪退等。[0004] 为此,如何充分利用为每个进程分配的固定数值的虚拟内存空间显得尤为重要。目前,在应用程序创建时,系统会将应用程序的运行环境等添加至进程的虚拟内存空间,这部分对虚拟内存空间的占用属于系统默认的内存占用,而除系统默认占用的内存之外的其他虚拟内存为应用程序自身可用的虚拟内存空间。为了降低应用程序运行中虚拟内存耗尽的概率,需要尽可能的扩大应用程序自身可用的虚拟内存空间。[0005] 为此,如何扩大应用程序自身可用的虚拟内存空间,是目前亟需解决的技术问题。发明内容[0006] 为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种内存资源使用控制方法、装置、设备及存储介质,能够扩大应用程序自身可用的虚拟内存空间,从而降低了应用程序运行中虚拟内存耗尽的概率。[0007] 第一方面,本公开提供了一种内存资源使用控制方法,所述方法包括:[0008] 当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能;所述预设条件用于表征虚拟内存空间支持当前业务需求;[0009] 在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,确定当前进程的虚拟内存空间中,主副内存堆对应的内存地址区间;其中,所述主副内存堆包括所述拷贝垃圾回收机制中的主内存堆和副内存堆;[0010] 从所述主副内存堆对应的内存地址区间中,确定所述副内存堆对应的内存地址区间;[0011] 将所述副内存堆对应的内存地址区间的内存进行释放。[0012] 一种可选的实施方式中,所述当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能,包括:[0013] 当监测到当前进程对应的虚拟内存空间中的剩余内存不足预设第一阈值时,关闭拷贝垃圾回收机制对应的内存管理功能;[0014] 或者,当监测到预设类型的业务功能被启动时,关闭拷贝垃圾回收机制对应的内存管理功能;其中,所述预设类型的业务功能包括虚拟内存占用需求量高于预设需求量阈值的业务功能。[0015] 一种可选的实施方式中,所述确定当前进程对应的虚拟内存空间中,主副内存堆对应的内存地址区间,包括:[0016] 获取当前进程对应的虚拟内存空间的内存表;其中,所述内存表存储有多条内存分配信息,所述内存分配信息中包括内存堆名称和内存地址区间之间的对应关系;[0017] 基于所述内存堆名称和/或内存地址区间的特征相似性,对所述内存表中的所述多条内存分配信息进行比对,得到特征相似性满足预设相似性条件的两条内存分配信息;[0018] 将所述两条内存分配信息中的内存地址区间确定为主副内存堆对应的内存地址区间。[0019] 一种可选的实施方式中,所述主副内存堆对应的内存地址区间包括第一地址区间和第二地址区间;[0020] 所述从所述主副内存堆对应的内存地址区间中,确定所述副内存堆对应的内存地址区间,包括:[0021] 创建对象,并获取所述对象所在的内存地址;[0022] 如果确定所述内存地址处于所述第一地址区间,则将所述第二地址区间确定为所述副内存堆对应的内存地址区间,否则,将所述第一地址区间确定为所述副内存堆对应的内存地址区间。[0023] 一种可选的实施方式中,所述将所述副内存堆对应的内存地址区间的内存进行释放之后,还包括:[0024] 扫描所述拷贝垃圾回收机制中的所述主内存堆,并对所述主内存堆中的无用对象进行标记;其中,所述无用对象为预设时间周期内未被调用的对象;[0025] 清除所述主内存堆中被标记的所述无用对象。[0026] 一种可选的实施方式中,所述方法还包括:[0027] 当监测到所述虚拟内存使用情况满足所述预设条件时,开启所述拷贝垃圾回收机制对应的内存管理功能。[0028] 第二方面,本公开提供了一种内存资源使用控制装置,所述装置包括:[0029] 关闭模块,用于当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能;所述预设条件用于表征虚拟内存空间支持当前业务需求;[0030] 第一确定模块,用于在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,确定当前进程对应的虚拟内存空间中,主副内存堆对应的内存地址区间;其中,所述主副内存堆包括所述拷贝垃圾回收机制中的主内存堆和副内存堆;[0031] 第二确定模块,用于从所述主副内存堆对应的内存地址区间中,确定所述副内存堆对应的内存地址区间;[0032] 内存释放模块,用于将所述副内存堆对应的内存地址区间的内存进行释放。[0033] 第三方面,本公开提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现上述的方法。[0034] 第四方面,本公开提供了一种设备,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现上述的方法。[0035] 第五方面,本公开提供了一种计算机程序产品,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现上述的方法。[0036] 本公开实施例提供的技术方案与现有技术相比具有如下优点:[0037] 本公开实施例提供了一种内存资源使用控制方法,首先,当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能,并在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,确定当前进程的虚拟内存空间中主副内存堆对应的内存地址区间。然后,从主副内存堆对应的内存地址区间中,确定副内存堆对应的内存地址区间,最终,将副内存堆对应的内存地址区间的内存进行释放。本公开实施例通过关闭拷贝垃圾回收机制对应的内存管理功能,并释放副内存堆的方式,扩大了应用程序自身可用的虚拟内存空间,从而降低了应用程序运行中虚拟内存耗尽的概率。附图说明[0038] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。[0039] 为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。[0040] 图1为本公开实施例提供的一种拷贝垃圾回收机制的示意图;[0041] 图2为本公开实施例提供的一种内存资源使用控制方法的流程图;[0042] 图3为本公开实施例提供的一种内存资源使用控制装置结构示意图;[0043] 图4为本公开实施例提供的一种内存资源使用控制设备结构示意图。具体实施方式[0044] 为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。[0045] 在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。[0046] Android应用程序是基于Java语言开发的,而基于Java语言开发的Android应用程序的运行必须依赖Java虚拟机(简称JVM)。Java虚拟机占用的内存空间属于系统默认占用的内存,通过压缩Java虚拟机占用的内存空间,可以扩大应用程序自身可用的虚拟内存空间。[0047] 为此,如何压缩Java虚拟机占用的内存空间,是目前需要解决的一个技术问题。[0048] 实际应用中,Java虚拟机会维护一个内存堆(简称heap),用来保存和维护java运行过程中产生的对象内存,通常heap会占据预设大小的虚拟内存空间,通常该虚拟内存空间被设置成256M‑512M的大小。Java虚拟机通过垃圾回收机制进行内存管理,在适当的时机对heap进行扫描,并清除heap中无用的对象,从而降低内存的占用。[0049] 实际应用中,垃圾回收机制可以包括多种类型,例如标记清除垃圾回收机制、拷贝垃圾回收机制等。其中,拷贝垃圾回收机制中,存在两个同样大小的heap,其中一个heap作为主heap,另一个heap作为副heap。如图1所示,在执行拷贝垃圾回收机制的内存管理时,首先将主heap中的有用对象拷贝到副heap中,无用对象则不做拷贝,在将有用对象完全拷贝至副heap后,将主heap和副heap互换,即将原副heap变更为主heap,用于保存和维护java运行过程中产生的对象,而原主heap以及其中的无用对象,则需要完整的清除,得到一个全空的heap,用于后续应用。[0050] 在上述拷贝垃圾回收机制中,需要两个同样大小的heap,也就占用了两份同样大小的虚拟内存空间,通常情况下,副heap占用的虚拟内存空间是空闲状态,基于此,本公开实施例通过关闭拷贝垃圾回收机制对应的内存管理功能,并释放掉副heap占用的内存的方式,扩大应用程序自身可用的虚拟内存空间,从而降低了应用程序运行中虚拟内存耗尽的概率。[0051] 基于此,本公开实施例提供了一种内存资源使用控制方法,参考图2,为本公开实施例提供的一种内存资源使用控制方法的流程图,该方法包括:[0052] S201:当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能。[0053] 其中,所述预设条件用于表征虚拟内存空间支持当前业务需求。[0054] 本公开实施例中,应用程序的运行所依赖的java虚拟机的内存管理方法中至少包括拷贝垃圾回收机制,当监测到虚拟内存使用情况不满足预设条件时,可以通过关闭垃圾回收机制对应的内存管理功能的方式,压缩java虚拟机占用的内存空间,扩大应用程序自身可用的虚拟内存空间。[0055] 本公开实施例中的预设条件用于表征虚拟内存空间支持当前业务需求,也就是说,当监测到虚拟内存空间不足以支持当前业务需求时,可以关闭拷贝垃圾回收机制对应的内存管理功能。[0056] 一种可选的实施方式中,当监测到当前进程对应的虚拟内存空间中的剩余内存不足预设第一阈值时,关闭拷贝垃圾回收机制对应的内存管理功能,降低因内存不足引起应用程序崩溃或闪退的概率。其中,预设第一阈值可以基于应用程序的内存需求、用户设备使用需求等设置,例如可以为800M左右的数值。[0057] 实际应用中,可以周期性的检测当前进程对应的虚拟内存空间中的剩余内存,以便在剩余内存不足时能够及时关闭拷贝垃圾回收机制对应的内存管理功能。[0058] 另外,也可以通过开关等方式触发剩余内存的检测,具体的,在用户打开检测开关时,可以触发执行检测当前进程对应的虚拟内存空间中的剩余内存,并在检测到当前进程对应的虚拟内存空间中的剩余内存不足预设第一阈值时,关闭拷贝垃圾回收机制对应的内存管理功能。[0059] 另一种可选的实施方式中,当监测到预设类型的业务功能被启动时,关闭拷贝垃圾回收机制对应的内存管理功能;其中,所述预设类型的业务功能包括虚拟内存占用需求量高于预设需求量阈值的业务功能。[0060] 实际应用中,基于浏览器实现的业务功能,以及涉及大量视频播放、图片展示的业务功能等,通常对虚拟内存的占用量较大,导致发生虚拟内存耗尽的概率较高。因此,本公开实施例可以预先将虚拟内存占用需求量高于预设需求量阈值的业务功能,设置为预设类型的业务功能,一旦监测到该预设类型的业务功能被启动时,可以通过关闭拷贝垃圾回收机制对应的内存管理功能,扩大可用的虚拟内存空间,降低虚拟内存耗尽的概率。其中,预设需求量阈值可以基于需求和经验设置,例如可以为300M左右的数值。[0061] 值得注意的是,对于监测到其他能够表明虚拟内存使用情况不足以支持当前业务需求的场景,也可以通过关闭拷贝垃圾回收机制对应的内存管理功能,并释放副内存堆占用的内存的方式,扩大应用程序自身可用的虚拟内存空间。[0062] S202:在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,确定当前进程的虚拟内存空间中主副内存堆对应的内存地址区间。[0063] 其中,所述主副内存堆包括所述拷贝垃圾回收机制中的主内存堆和副内存堆。[0064] 本公开实施例中,java虚拟机通过拷贝垃圾回收机制进行内存管理时,需要有两个同样大小的内存堆,作为主内存堆和副内存堆。在关闭拷贝垃圾回收机制之后,确定当前进程的虚拟内存空间中,主内存堆和副内存堆对应的内存地址区间。[0065] 一种可选的实施方式中,可以通过特征相似性识别的方式确定主副内存堆对应的内存地址区间。具体的,首先获取当前进程对应的虚拟内存空间的内存表;其中,所述内存表存储有多条内存分配信息,所述内存分配信息中包括内存堆名称和内存地址区间之间的对应关系,然后,基于内存堆名称和/或内存地址区间的特征相似性,对所述内存表中的所述多条内存分配信息进行比对,得到特征相似性满足预设相似性条件的两条内存分配信息。最终,将所述两条内存分配信息中的内存地址区间确定为主副内存堆对应的内存地址区间。[0066] 由于主内存堆和副内存堆的内存堆名称相似度较高,例如,分别为space1和space2,或者分别为heap1和heap2,以及主内存堆和副内存堆的内存地址区间的大小相同,为此,本公开实施例可以基于上述特征,确定主内存堆和副内存堆对应的内存地址区间。[0067] 一种可选的实施方式中,可以将内存堆名称相似度较高的两条内存分配信息中的内存地址区间,确定为主内存堆和副内存堆对应的内存地址区间。值得注意的是,确定出的主内存堆和副内存堆对应的内存地址区间中,并未确定出哪一个内存地址区间对应主内存堆,哪一个内存地址区间对应副内存堆。[0068] 另一种可选的实施方式中,可以将内存地址区间的大小相同的两条内存分配信息中的内存地址区间,确定为主内存堆和副内存堆对应的内存地址区间。[0069] 另外,还可以将内存堆名称相似度较高且内存地址区间的大小相同的两条内存分配信息中的内存地址区间,确定为主内存堆和副内存堆对应的内存地址区间。[0070] S203:从所述主副内存堆对应的内存地址区间中,确定所述副内存堆对应的内存地址区间。[0071] 本公开实施例中,在确定主副内存堆对应的内存地址区间之后,从主副内存堆对应的内存地址区间中确定出副内存堆对应的内存地址区间。[0072] 假设主副内存堆对应的内存地址区间包括第一地址区间和第二地址区间,第一地址区间和第二地址区间为相同大小的内存地址区间。本公开实施例可以从第一地址区间和第二地址区间中确定出副内存堆,以便实现内存的释放。[0073] 由于java代码中新创建的对象所在的内存地址属于主内存堆,因此,本公开实施例可以通过创建对象的方式确定主内存堆对应的内存地址区间,从而确定出副内存堆对应的内存地址区间。[0074] 一种可选的实施方式中,可以在java代码中创建一个对象,然后获取该对象所在的内存地址,进而判断该内存地址是否处于第一地址区间,如果是,则确定第一地址区间对应主内存堆,而第二地址区间对应副内存堆。如果确定该内存地址不属于第一地址区间,则可以确定第一地址区间对应副内存堆,而第二地址区间对应主内存堆。[0075] S204:将所述副内存堆对应的内存地址区间的内存进行释放。[0076] 本公开实施例中,在关闭拷贝垃圾回收机制对应的内存管理功能之后,副内存堆属于空闲内存,因此,在确定副内存堆对应的内存地址区间之后,可以将该内存地址区间的内存进行释放,以扩大应用程序自身可用的虚拟内存空间,从而降低了应用程序运行中虚拟内存耗尽的概率。[0077] 本公开实施例提供的内存资源使用控制方法中,首先,当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能,并在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,确定当前进程的虚拟内存空间中,主副内存堆对应的内存地址区间。然后,从主副内存堆对应的内存地址区间中,确定副内存堆对应的内存地址区间,最终,将副内存堆对应的内存地址区间的内存进行释放。本公开实施例通过关闭拷贝垃圾回收机制对应的内存管理功能,并释放副内存堆的方式,扩大了应用程序自身可用的虚拟内存空间,从而降低了应用程序运行中虚拟内存耗尽的概率。[0078] 本公开实施例中,java虚拟机不仅能够通过拷贝垃圾回收机制进行内存管理,还能够通过标记清除垃圾回收机制进行内存管理。在关闭拷贝垃圾回收机制对应的内存管理功能之后,可以基于标记清除垃圾回收机制,对拷贝垃圾回收机制中的主内存堆进行内存管理,以便清除主内存堆中的无用对象。[0079] 其中,标记清除垃圾回收机制是指,通过对虚拟内存空间进行扫描后,对无用对象进行标记,然后基于标记对无用对象进行清除,、以释放一部分内存,扩大应用程序自身可用的虚拟内存空间。其中,无用对象可以是指长时间未被调用的对象等。[0080] 具体的,首先,扫描所述拷贝垃圾回收机制中的所述主内存堆,并对所述主内存堆中的无用对象进行标记;其中,所述无用对象为预设时间周期内未被调用的对象。然后,清除所述主内存堆中被标记的所述无用对象。[0081] 一种可选的实施方式中,当监测到所述虚拟内存使用情况满足所述预设条件时,开启拷贝垃圾回收机制对应的内存管理功能。也就是说,如果虚拟内存空间能够支持当前业务需求,则可以重新开启拷贝垃圾回收机制对应的内存管理功能,更多元化的对内存进行管理。[0082] 例如,当监测到当前进程对应的虚拟内存空间中的剩余内存大于预设第二阈值时,可以开启拷贝垃圾回收机制对应的内存管理功能,基于拷贝垃圾回收机制和标记清除垃圾回收机制共同对内存进行管理。[0083] 基于上述方法实施例,本公开还提供了一种内存资源使用控制装置,参考图3,为本公开实施例提供的一种内存资源使用控制装置结构示意图,所述装置包括:[0084] 关闭模块301,用于当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能;所述预设条件用于表征虚拟内存空间支持当前业务需求;[0085] 第一确定模块302,用于在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,确定当前进程对应的虚拟内存空间中主副内存堆对应的内存地址区间;其中,所述主副内存堆包括所述拷贝垃圾回收机制中的主内存堆和副内存堆;[0086] 第二确定模块303,用于从所述主副内存堆对应的内存地址区间中,确定所述副内存堆对应的内存地址区间;[0087] 内存释放模块304,用于将所述副内存堆对应的内存地址区间的内存进行释放。[0088] 一种可选的实施方式中,所述关闭模块,包括:[0089] 第一关闭子模块,用于当监测到当前进程对应的虚拟内存空间中的剩余内存不足预设第一阈值时,关闭拷贝垃圾回收机制对应的内存管理功能;[0090] 或者,[0091] 第二关闭子模块,用于当监测到预设类型的业务功能被启动时,关闭拷贝垃圾回收机制对应的内存管理功能;其中,所述预设类型的业务功能包括虚拟内存占用需求量高于预设需求量阈值的业务功能。[0092] 一种可选的实施方式中,所述第一确定模块,包括:[0093] 获取子模块,用于获取当前进程对应的虚拟内存空间的内存表;其中,所述内存表存储有多条内存分配信息,所述内存分配信息中包括内存堆名称和内存地址区间之间的对应关系;[0094] 比对子模块,用于基于所述内存堆名称和/或内存地址区间的特征相似性,对所述内存表中的所述多条内存分配信息进行比对,得到特征相似性满足预设相似性条件的两条内存分配信息;[0095] 第一确定子模块,用于将所述两条内存分配信息中的内存地址区间确定为主副内存堆对应的内存地址区间。[0096] 一种可选的实施方式中,所述主副内存堆对应的内存地址区间包括第一地址区间和第二地址区间;[0097] 所述第二确定模块,包括:[0098] 创建子模块,用于创建对象;[0099] 获取子模块,用于获取所述对象所在的内存地址;[0100] 第二确定子模块,用于在确定所述内存地址处于所述第一地址区间时,将所述第二地址区间确定为所述副内存堆对应的内存地址区间,否则,将所述第一地址区间确定为所述副内存堆对应的内存地址区间。[0101] 一种可选的实施方式中,所述装置还包括:[0102] 标记模块,用于扫描所述拷贝垃圾回收机制中的所述主内存堆,并对所述主内存堆中的无用对象进行标记;其中,所述无用对象为预设时间周期内未被调用的对象;[0103] 清除模块,用于清除所述主内存堆中被标记的所述无用对象。[0104] 一种可选的实施方式中,所述装置还包括:[0105] 开启模块,用于当监测到所述虚拟内存使用情况满足所述预设条件时,开启所述拷贝垃圾回收机制对应的内存管理功能。[0106] 本公开实施例提供的内存资源使用控制装置中,首先,当监测到虚拟内存使用情况不满足预设条件时,关闭拷贝垃圾回收机制对应的内存管理功能,并在所述拷贝垃圾回收机制对应的内存管理功能处于关闭状态时,确定当前进程的虚拟内存空间中,主副内存堆对应的内存地址区间。然后,从主副内存堆对应的内存地址区间中,确定副内存堆对应的内存地址区间,最终,将副内存堆对应的内存地址区间的内存进行释放。本公开实施例通过关闭拷贝垃圾回收机制对应的内存管理功能,并释放副内存堆的方式,扩大了应用程序自身可用的虚拟内存空间,从而降低了应用程序运行中虚拟内存耗尽的概率。[0107] 除了上述方法和装置以外,本公开实施例还提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现本公开实施例所述的内存资源使用控制方法。[0108] 本公开实施例还提供了一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现本公开实施例所述的内存资源使用控制方法。[0109] 另外,本公开实施例还提供了一种内存资源使用控制设备,参见图4所示,可以包括:[0110] 处理器401、存储器402、输入装置403和输出装置404。内存资源使用控制设备中的处理器401的数量可以一个或多个,图4中以一个处理器为例。在本公开的一些实施例中,处理器401、存储器402、输入装置403和输出装置404可通过总线或其它方式连接,其中,图4中以通过总线连接为例。[0111] 存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行内存资源使用控制设备的各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。输入装置403可用于接收输入的数字或字符信息,以及产生与内存资源使用控制设备的用户设置以及功能控制有关的信号输入。[0112] 具体在本实施例中,处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现上述内存资源使用控制设备的各种功能。[0113] 需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。[0114] 以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

专利地区:北京

专利申请日期:2021-03-15

专利公开日期:2024-06-18

专利公告号:CN115080221B

电话咨询
读内容
搜本页
回顶部