虚拟内存上限检测方法、装置、计算机设备及存储介质
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种虚拟内存上限检测方法、装置、计算机设备及存储介质。
背景技术
内存管理是指软件在计算机上运行时,对计算机内存资源的分配和使用的技术,其最主要的目的是如何高效、快速的分配,并且在适当的时候释放和回收内存资源。虚拟内存是操作系统内存管理的一种技术,虚拟内存使得应用程序认为它拥有连续的可用的内存。操作系统中,软件运行需要足够多的内存,内存管理不当可能会导致程序运行低效,甚至发生软件崩溃;了解系统的内存使用状态是内存管理的前提,软件进程可用虚拟内存上限是内存管理的重要指标。
进程可用虚拟内存上限受到多种因素影响,这些因素包括例如计算机硬件、操作系统、以及进程模式,现有技术中通常根据硬件、操作系统或进程模式来获取进程虚拟内存上限。这种方法存在准确性低的问题。
发明内容
本申请实施例至少提供一种虚拟内存上限检测方法、装置、计算机设备及存储介质。
第一方面,本申请实施例提供了一种虚拟内存上限的检测方法,包括:读取运行软件程序的操作系统中目标变量在虚拟内存中的存储地址;基于所述存储地址,从多个地址范围中,确定与所述存储地址对应的目标地址范围;基于所述目标地址范围,确定所述操作系统对应的虚拟内存上限。
这样,利用操作系统中的目标变量通常会存储在虚拟内存中的高地址区域,且占用的虚拟内存通常较少,进而通过读取目标变量在虚拟内存中的存储地址,并基于该存储地址所述的目标地址范围,确定操作系统对应的虚拟内存上限,具有更高的检测精度。
一种可选实施方式中,所述目标变量包括:所述操作系统中的命令行参数,和/或,所述操作系统的环境变量。
这样,通过上述两类变量中至少一个,精确确定虚拟内存上限。
一种可选实施方式中,所述读取运行软件程序的操作系统中的目标变量在虚拟内存中的存储地址,包括:确定目标变量;基于调用所述目标变量在所述操作系统的预置函数,从所述虚拟内存中读取所述目标变量在所述虚拟内存中的存储地址;所述预置函数用于被调用后返回与所述目标变量对应的存储地址。
这样,能够通过预置函数,从虚拟内存中读取目标变量在虚拟内存中的存储地址,实现更加简单。
一种可选实施方式中,所述目标变量有多个;每个所述目标变量的存储地址分别对应有目标地址范围;所述基于所述目标地址范围,确定所述操作系统对应的虚拟内存上限,包括:基于多个目标变量的存储地址分别对应的目标地址范围,当多个所述目标变量的存储地址分别对应的目标地址范围相同时,将多个所述目标变量中的任一目标变量对应的虚拟内存上限,确定为所述操作系统对应的虚拟内存上限。
这样,通过确定多个目标变量分别对应的目标地址范围,能够以更高的精度确定虚拟内存上限。
一种可选实施方式中,还包括:当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的存储地址中最高的存储地址确定为目标存储地址,并基于所述目标存储地址,确定所述操作系统对应的虚拟内存上限。
一种可选实施方式中,还包括:当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的虚拟内存上限中的最大值,确定为所述操作系统对应的虚拟内存上限。
这样,能够以更高的精度确定虚拟内存上限。
第二方面,本申请实施例还提供一种虚拟内存上限的检测装置,包括:读取模块,用于读取运行软件程序的操作系统中目标变量在虚拟内存中的存储地址;第一确定模块,用于基于所述存储地址,从多个地址范围中,确定与所述存储地址对应的目标地址范围;第二确定模块,用于基于所述目标地址范围,确定所述操作系统对应的虚拟内存上限。
一种可选实施方式中,所述目标变量包括:所述操作系统中的命令行参数,和/或,所述操作系统的环境变量。
一种可选实施方式中,所述读取模块,用于采用下述方式读取运行软件程序的操作系统中的目标变量在虚拟内存中的存储地址:确定目标变量;基于调用所述目标变量在所述操作系统的预置函数,从所述虚拟内存中读取所述目标变量在所述虚拟内存中的存储地址;所述预置函数用于被调用后返回与所述目标变量对应的存储地址。
一种可选实施方式中,所述目标变量有多个;每个所述目标变量的存储地址分别对应有目标地址范围;所述第二确定模块,用于采用下述方式基于所述目标地址范围,确定所述操作系统对应的虚拟内存上限:基于多个目标变量的存储地址分别对应的目标地址范围,当多个所述目标变量的存储地址分别对应的目标地址范围相同时,将多个所述目标变量中的任一目标变量对应的虚拟内存上限,确定为所述操作系统对应的虚拟内存上限。
一种可选实施方式中,所述第二确定模块,还用于当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的存储地址中最高的存储地址确定为目标存储地址,并基于所述目标存储地址,确定所述操作系统对应的虚拟内存上限。
一种可选实施方式中,所述第二确定模块,还用于当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的虚拟内存上限中的最大值,确定为所述操作系统对应的虚拟内存上限。
第三方面,本申请实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
本申请提供了一种虚拟内存上限的检测方法,在该方法中,由于操作系统中的目标变量通常会存储在虚拟内存中的高地址区域,且占用的虚拟内存通常较少,因此可以依照不同可用虚拟内存上限,确定多个地址范围,每个地址范围对应一个可用虚拟内存上限;在需要确定虚拟内存上限的时候,可以通过读取运行软件程序的操作系统中的目标变量在虚拟内存中的存储地址,并基于存储地址,从多个地址范围中,确定与存储地址对应的目标地址范围,然后基于目标地址范围,确定操作系统对应的虚拟内存上限,具有更高的检测精度。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本申请的实施例,并与说明书一起用于说明本申请的技术方案。应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例所提供的一种虚拟内存上限的检测方法的流程图;
图2示出了本申请实施例所提供的虚拟内存存储数据的示意图;
图3示出了本申请实施例所提供的读取运行软件程序的操作系统中的目标变量在内存中的存储地址的具体方法的流程图;
图4示出了本申请实施例所提供的另一种虚拟内存上限的检测方法的流程图;
图5示出了本申请实施例所提供的内存管理方法的流程图;
图6示出了本申请实施例所提供的内存管理方法中,两种内存管理的具体示例的示意图;
图7示出了本申请实施例所提供的一种虚拟内存上限的检测装置的示意图;
图8示出了本申请实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
经研究发现,软件程序的进程在确定其可用虚拟内存上限时,通常通过检测软件程序运行的操作系统、中央处理器(Central Processing Unit,CPU)以及软件程序本身中一者或者多者的数据总线宽度来实现;例如,软件程序的进程首先读取其运行的操作系统的数据总线宽度;
在能够读取操作系统的数据总线宽度的情况下,若操作系统的数据总线宽度为32位,则确定该软件程序的可用虚拟内存上限为3千兆二进制字节(giga binary byte,G);若操作系统的数据总线宽度为64位,则读取软件程序本身的数据总线宽度,并基于软件程序的数据总线宽度来进一步确定软件程序可用的虚拟内存上限。
在无法读取操作系统的数据总线宽度的情况下,可以通过读取CPU的数据总线宽度来判断,也即,当CPU的数据总线宽度为32位时,确定该软件程序的可用虚拟内存上线为3G;当CPU的数据总线宽度为64位时,进一步确定软件程序可用的虚拟内存上限。
在基于软件程序的数据总线宽度来进一步确定软件程序可用的虚拟内存上限时,若软件程序的数据总线宽度为32位,则确定该软件程序的可用虚拟内存上限为4G;若软件程序的数据总线宽度为64位,则确定该软件程序的可用虚拟内存上限为512G。
上述可用虚拟内存上限的确定方法存在下述问题:
(1)准确性低,若64位的CPU上运行的操作系统可能是32位,操作系统的数据总线宽度决定了软件程序的实际可用虚拟内存上限为3G;而当操作系统的数据总线宽度无法获取的时候,则要基于CPU的数据总线宽度来确定软件程序的可用虚拟内存上限,其最终的确定结果为4G或者512G,与实际可用内存上限(3G)不同,进而可能造成虚拟内存管理出现问题。
(2)判断过程复杂,确定效率低,若某软件程序在运行时的实际可用虚拟内存上限为512G,则其需要通过多次读取数据总线宽度的过程和多次判断过程才能确定最终的结果。
(3)判断依据获取过程复杂,甚至无法获取,例如无法在很多情况下会无法获取操作系统、CPU、和/或软件程序的数据总线宽度。
基于上述研究,本申请提供了一种虚拟内存上限的检测方法,在该方法中,由于操作系统中的目标变量通常会存储在虚拟内存中的高地址区域,且占用的虚拟内存通常较少,因此可以依照不同可用虚拟内存上限,确定多个地址范围,每个地址范围对应一个可用虚拟内存上限;在需要确定虚拟内存上限的时候,可以通过读取运行软件程序的操作系统中的目标变量在虚拟内存中的存储地址,并基于存储地址,从多个地址范围中,确定与存储地址对应的目标地址范围,然后基于目标地址范围,确定操作系统对应的虚拟内存上限,具有更高的检测精度。
同时该虚拟内存上限的检测过程不需要多次复杂的判断,操作系统中的目标变量的存储地址也均是软件程序调用操作系统的预置函数就能够方便读取的,进而确定过程更加简单,且判断依据获取过程简单。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本申请针对上述问题所提出的解决方案,都应该是发明人在本申请过程中对本申请做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本申请实施例所申请的一种虚拟内存上限的检测方法进行详细介绍,本申请实施例所提供的虚拟内存上限的检测方法的执行主体一般为软件程序在运行时的主进程,或者软件程序用于进行内存管理的子进程。在一些可能的实现方式中,该虚拟内存上限的检测方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为软件程序的主进程为例,对本申请实施例提供的虚拟内存上限的检测方法加以详细说明。
参见图1所示,为本申请实施例提供的虚拟内存上限的检测方法的流程图,所述方法包括步骤S101~S103,其中:
S101:读取运行软件程序的操作系统中目标变量在虚拟内存中的存储地址;
S102:基于所述存储地址,从多个地址范围中,确定与所述存储地址对应的目标地址范围;
S103:基于所述目标地址范围,确定所述操作系统对应的虚拟内存上限。
下面分别对上述S101~S103加以详细说明。
I:在上述S101中,目标变量例如包括:操作系统中的命令行参数,和/或操作系统的环境变量。
具体地,针对目标变量包括命令行参数的情况,软件程序在操作系统内运行之前,需要操作系统启动与操作系统对应的可执行文件;在启动之前,会将软件程序加载到内存中;然后打开操作系统的命令行窗口,并将命令行窗口转到可执行文件所在的目录下,然后通过命令行来启动可执行文件。操作系统在启动可执行文件的时候,会向可执行文件传递命令行参数。其中,软件程序一般包括:代码段(text)、已初始化数据段(data)、和未初始化数据段(Block Started by Symbol segment,bss);其一般加载到虚拟内存中的低地址段;加载到内存后,在内存中的存储区段如图2所示。
命令行参数被存储在虚拟内存的高地址区域;虚拟内存的中间地址段用于存储堆和栈。
软件程序在操作系统内启动后,操作系统会生成一个该操作系统对应的主进程,负责执行操作系统对应的各项任务。
针对不同的操作系统,对应有不同的命令行参数;例如在windows系统中常用的查看互联网协议(Internet Protocol,IP)地址的命令为:ipconfig/all,其中,“ipconfig”是命令行,“ipconfig”之后的即为命令行参数。
当命令行参数被加载到虚拟内存后,软件程序的主进程可以通过调用系统函数,来实现对命令行参数的读取操作。此时,操作系统会向主进程返回一个用于指明该命令行参数在虚拟内存中具体存储位置的指针,进而主进程能够基于该指针确定命令行参数对应的存储地址。
针对目标变量包括环境变量的情况,环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。如图2所示,操作系统在启动软件程序的时候,也会将软件程序需要的环境变量加载到虚拟内存的高地址区域中;软件程序的主进程可以根据预先定义的操作系统函数,从虚拟内存中读取环境变量;与命令行参数类似的,操作系统会向主进程返回一个用于指明其所读取的环境变量在虚拟内存中具体存储位置的指针,进而主进程能够基于该指针确定环境变量对应的存储地址。
参见图3所示,本申请实施例还提供一种读取运行软件程序的操作系统中的目标变量在内存中的存储地址的具体方法,包括:
S301:确定目标变量;
这里,不同的软件程序在运行时,需要加载的环境变量可能不同,需要加载的命令行参数也可能会有所区别;不同的操作系统也会对命令行参数和环境变量有不同的定义,因此,目标变量可以基于软件程序在运行时加载的环境变量和命令行参数,和/或操作系统的类型来确定。
S302:基于调用所述目标变量在所述操作系统的预置函数,从所述虚拟内存中读取所述目标变量在所述虚拟内存中的存储地址。
其中,所述预置函数用于被调用后返回与所述目标变量对应的存储地址。
II:在上述S102和S103中,多个地址范围,例如依次为:[0,0xc0000000)、[0xc0000000,0xffffffff)、0xffffffff及以上。
其中,[0,0xc0000000)对应的虚拟内存上限为3G;[0xc0000000,0xffffffff)对应的虚拟内存上限为4G;0xffffffff以上对应的虚拟内存上限为512G。
进而,若读取到的目标变量在虚拟内存中的存储地址大于0,且小于0xc0000000),则将[0,0xc0000000)作为目标地址范围;
若读取到的目标变量在虚拟内存中的存储地址大于或者等于0xc0000000,且小于0xffffffff,则将[0xc0000000,0xffffffff)作为目标地址范围;
若读取到的目标变量在虚拟内存中的存储地址大于或者等于0xffffffff,则将0xffffffff及以上作为目标地址范围;
进而在确定了目标地址范围后,将与目标地址范围对应的虚拟内存上限,确定为操作系统对应的虚拟内存上限。
这里,需要注意的是,多个地址范围是根据实际的不同的虚拟地址划分来确定的,上述示例仅仅示出了一种划分的方式,其并不应当作为对本申请的限定。本领域技术人员基于本申请的示例,采用其他的虚拟内存划分方式确定多个地址范围也应当在本申请保护范围之内。
在本申请实施例中,由于操作系统中的目标变量通常会存储在内存中的高地址区域,且占用的内存通常较少,因此可以依照不同可用虚拟内存上限,确定多个地址范围,每个地址范围对应一个可用虚拟内存上限;在需要确定虚拟内存上限的时候,可以通过读取运行软件程序的操作系统中的目标变量在内存中的存储地址,并基于存储地址,从多个地址范围中,确定与存储地址对应的目标地址范围,然后基于目标地址范围,确定操作系统对应的虚拟内存上限,具有更高的检测精度。
参见图4所示,在本申请另一实施例中,还提供另外一种虚拟内存上限的检测方法,在该检测方法中,目标变量有多个,每个所述目标变量的存储地址分别对应有目标地址范围。该检测方法包括:
S401:读取运行软件程序的操作系统中的多个目标变量中的各个目标变量在虚拟内存中的存储地址。
此处,假设多个目标地址变量的数量为N,则N个目标地址变量例如可以有下述几种情况中任一种:
N个命令行参数;
N个环境变量;
N1个命令行参数和N2个环境变量;其中N1和N2的和为N。
具体的确定方式与上述S101类似,再次不再赘述。
S402:基于各个目标变量在虚拟内存中的存储地址,从多个地址范围中,确定与各个存储地址分别对应的目标地址范围。
S403:基于多个目标变量的存储地址分别对应的目标地址范围,当多个所述目标变量的存储地址分别对应的目标地址范围相同时,将多个所述目标变量中的任一目标变量对应的虚拟内存上限,确定为所述操作系统对应的虚拟内存上限。
在另一实施例中,本申请实施例提供的检测方法还包括:
S404:当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的存储地址中最高的存储地址确定为目标存储地址,并基于所述目标存储地址,确定所述操作系统对应的虚拟内存上限。
这里,由于虚拟内存的上限在很多情况下并非严格的3G、或者4G,因此,为了更加精确的确定虚拟内存上限,可以读取多个目标变量的存储地址。不同的目标变量的存储地址接近,但又不相同;因此,为了尽量提升检测到的虚拟内存上限的精度,会获取多个目标变量分别对应的目标地址范围。若多个目标变量分别对应的目标地址范围不同,则在该种情况下,可能出现虚拟内存上限超出3G、4G的情况。
此时,由于目标变量存储在虚拟内存的高地址对应的存储区域,因此可以将各个目标变量中,最高的目标存储地址,确定为虚拟内存中的最高存储地址,然后基于该最高存储地址,确定虚拟内存上限。
在另一实施例中,当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的虚拟内存上限中的最大值,确定为所述操作系统对应的虚拟内存上限。
在另一实施例中,还可能存在多个所述目标变量分别对应的目标地址范围相同,但虚拟内存上限并非与该目标地址范围对应的虚拟内存上限一致的情况。
因此,在该种情况下,在多个所述目标变量分别对应的目标地址范围相同的情况下,也可以直接将将多个所述目标变量分别对应的虚拟内存上限中的最大值,确定为所述操作系统对应的虚拟内存上限。
本本申请实施例中,由于操作系统中的目标变量通常会存储在虚拟内存中的高地址区域,且占用的内存通常较少,因此可以依照不同可用虚拟内存上限,确定多个地址范围,每个地址范围对应一个可用虚拟内存上限;在需要确定虚拟内存上限的时候,可以通过读取运行软件程序的操作系统中的目标变量在虚拟内存中的存储地址,并基于存储地址,从多个地址范围中,确定与存储地址对应的目标地址范围,然后基于目标地址范围,确定操作系统对应的虚拟内存上限,具有更高的检测精度。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本申请实施例中还提供了与虚拟内存上限的检测方法对应的虚拟内存上限的检测装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述虚拟内存上限的检测方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参见图5所示,本申请实施例还提供一种内存管理方法,该方法包括:
S501:基于本申请任一实施例所述的虚拟内存上限检测方法确定操作系统对应的虚拟内存上限;
S502:基于运行在所述操作系统中的应用程序的占用内存、所述虚拟内存上限,确定当前内存占比;
S503:基于所述当前内存占比,调整运行在所述操作系统中的应用程序占用的虚拟内存量;和/或,基于所述当前内存占比,为所述操作系统中新启动的应用程序分配虚拟内存占用量。
示例性的,例如若当前内存占比大于预设的内存占比阈值,则表征操作系统当前内存不足;在某个应用程序向操作系统申请内存的时候,以操作系统的稳定性优先,只向该应用程序分配较少的虚拟内存;若当前内存占比小于或者等于该预设的内存占比阈值,则表征操作系统当前内存充足;在某个应用程序向操作系统申请内存的时候,以应用程序的质量或性能优先,向该应用程序分配较多的虚拟内存。
另外,在进行内存回收的时候,若当前内存占比大于预设的内存占比阈值,表征操作系统当前内存不足,以操作系统的稳定性优先,回收应用程序占用的较多内存;若当前内存占比小于或者等于预设的内存占比阈值,表征操作系统当前内存充足,以各应用程序的性能优先,回收应用程序占用的较少内存。
如图6所示,提供两种内存管理的具体示例,如图6中a所示,操作系统实时检测内存状况;若进程内存(也即运行在操作系统中的应用程序的占用内存)占用虚拟内存上限的当前内存占比超出85%,则表征操作系统的当前内存不足,回收部分内存。若进程内存占用虚拟内存上限的当前内存占比未超出85%,则表征操作系统的当前内存充足,则继续实时监测内存状况。
如图6中b所示,在某个应用程序使用虚拟内存前(也即某个应用程序启动前),判断内存是否充足;若充足,则在启动该应用程序时,以质量或性能优先,为该应用程序申请较多内存;若不充足,则在启动该应用程序时,以稳定性优先,为该应用程序申请较少内存。在内存使用后(也即某个应用程序启动后),判断内存是否充足;若充足,则保证该应用程序的性能优先,释放该应用程序的较少内存;若不充足,则保证操作系统系统的稳定性有限,释放该应用程序的较多内存。
通过上述过程,实现内存回收或者调整内存使用策略。由于通过本申请实施例能够得到的虚拟内存上限更加准确,因此对内存回收或者调整内存使用策略也更加准确。
参照图7所示,为本申请实施例提供的一种虚拟内存上限的检测装置的示意图,所述装置包括:读取模块71、第一确定模块72、以及第二确定模块73;其中,
读取模块71,用于读取运行软件程序的操作系统的目标变量在虚拟内存中的存储地址;
第一确定模块72,用于基于所述存储地址,从多个地址范围中,确定与所述存储地址对应的目标地址范围;
第二确定模块73,用于基于所述目标地址范围,确定所述操作系统对应的虚拟内存上限。
一种可选实施方式中,所述目标变量包括:所述操作系统中的命令行参数,和/或,所述操作系统的环境变量。
一种可选实施方式中,所述读取模块71,用于采用下述方式读取运行软件程序的操作系统中的目标变量在虚拟内存中的存储地址:
确定目标变量;
基于调用所述目标变量在所述操作系统的预置函数,从所述虚拟内存中读取所述目标变量在所述虚拟内存中的存储地址;所述预置函数用于被调用后返回与所述目标变量对应的存储地址。
一种可选实施方式中,所述目标变量有多个;每个所述目标变量的存储地址分别对应有目标地址范围;
所述第二确定模块73,用于采用下述方式基于所述目标地址范围,确定所述操作系统对应的虚拟内存上限:
基于多个目标变量的存储地址分别对应的目标地址范围,当多个所述目标变量的存储地址分别对应的目标地址范围相同时,将多个所述目标变量中的任一目标变量对应的虚拟内存上限,确定为所述操作系统对应的虚拟内存上限。
一种可选实施方式中,所述第二确定模块73,还用于当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的存储地址中最高的存储地址确定为目标存储地址,并基于所述目标存储地址,确定所述操作系统对应的虚拟内存上限。
一种可选实施方式中,所述第二确定模块73,还用于当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的虚拟内存上限中的最大值,确定为所述操作系统对应的虚拟内存上限。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本申请实施例还提供了一种计算机设备800,如图8所示,为本申请实施例提供的计算机设备800结构示意图,包括:
处理器81、存储器82、和总线83;存储器82用于存储执行指令,包括内存821和外部存储器822;这里的内存821也称内存储器,用于暂时存放处理器81中的运算数据,以及与硬盘等外部存储器822交换的数据,处理器81通过内存821与外部存储器822进行数据交换,当所述计算机设备800运行时,所述处理器81与所述存储器82之间通过总线83通信,使得所述处理器81在用户态执行以下指令:
读取运行软件程序的操作系统中的目标变量在虚拟内存中的存储地址;
基于所述存储地址,从多个地址范围中,确定与所述存储地址对应的目标地址范围;
基于所述目标地址范围,确定所述操作系统对应的虚拟内存上限。
一种可能的实施方式中,处理器81执行的指令中,所述目标变量包括:所述操作系统中的命令行参数,和/或,所述操作系统的环境变量。
一种可能的实施方式中,处理器81执行的指令中,所述读取运行软件程序的操作系统中的目标变量在虚拟内存中的存储地址,包括:
确定目标变量;
基于调用所述目标变量在所述操作系统的预置函数,从所述虚拟内存中读取所述目标变量在所述虚拟内存中的存储地址;所述预置函数用于被调用后返回与所述目标变量对应的存储地址。
一种可能的实施方式中,处理器81执行的指令中,所述目标变量有多个;每个所述目标变量的存储地址分别对应有目标地址范围;
所述基于所述目标地址范围,确定所述操作系统对应的虚拟内存上限,包括:
基于多个目标变量的存储地址分别对应的目标地址范围,当多个所述目标变量的存储地址分别对应的目标地址范围相同时,将多个所述目标变量中的任一目标变量对应的虚拟内存上限,确定为所述操作系统对应的虚拟内存上限。
一种可能的实施方式中,处理器81执行的指令中,还包括:当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的存储地址中最高的存储地址确定为目标存储地址,并基于所述目标存储地址,确定所述操作系统对应的虚拟内存上限。
一种可能的实施方式中,处理器81执行的指令中,还包括:当多个所述目标变量分别对应的目标地址范围不相同时,将多个所述目标变量分别对应的虚拟内存上限中的最大值,确定为所述操作系统对应的虚拟内存上限。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的虚拟内存上限的检测方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本申请实施例所提供的虚拟内存上限的检测方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的虚拟内存上限的检测方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本申请实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。