G06F11/30 G06F9/50
1.一种内存监控方法,其特征在于,包括:
当接收到目标数据的内存申请时,识别所述目标数据的数据类型;
调用内存申请接口为所述目标数据分配内存,并返回内存分配结果,以便响应所述内存申请;
根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小,并更新所有已分配内存的总量。
2.根据权利要求1所述内存监控方法,其特征在于,所述根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小,包括:
判断目标存储结构中是否存在所述数据类型;
若是,则根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小;
若否,则将所述数据类型存储至所述目标存储结构中,并根据所述内存申请对应的申请内存量统计所述数据类型对应的申请内存大小。
3.根据权利要求2所述内存监控方法,其特征在于,所述目标存储结构为Map结构。
4.根据权利要求1所述内存监控方法,其特征在于,所述返回内存分配结果,包括:
若申请成功,则返回所述目标数据对应的内存。
5.根据权利要求1所述内存监控方法,其特征在于,所述返回内存分配结果,包括:
若申请失败,则返回错误类型对应的错误码。
6.根据权利要求1所述内存监控方法,其特征在于,还包括:
当接收到内存统计信息的打印命令时,分别输出每个所述数据类型对应的申请内存大小和所有已分配内存的总量。
7.根据权利要求1至6中任一项所述内存监控方法,其特征在于,还包括:
当检测到目标内存的释放动作后,确定所述目标内存存储数据的目标数据类型;
根据所述目标内存的大小更新所述目标数据类型对应的申请内存大小和所有已分配内存的总量。
8.一种内存监控装置,其特征在于,包括:
识别模块,用于当接收到目标数据的内存申请时,识别所述目标数据的数据类型;
分配模块,用于调用内存申请接口为所述目标数据分配内存,并返回内存分配结果,以便响应所述内存申请;
第一更新模块,用于根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小,并更新所有已分配内存的总量。
9.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任一项所述内存监控方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述内存监控方法的步骤。
本申请涉及计算机技术领域,更具体地说,涉及一种内存监控方法、装置及一种电子设备和一种计算机可读存储介质。
在大数据时代,为实现内存监控功能,在相关技术中修改源码,调用内存监控工具提供的接口以实现内存监控,通过特定工具进行内存占用展示。但上述方案智能提供内存占用总量,无法精细到每种数据类型的内存占用,无法精确进行内存优化,内存占用过高严重影响进程的稳定性和健壮性。
因此,如何按数据类型进行内存占用统计,实现进程内存占用动态跟踪是本领域技术人员需要解决的技术问题。
本申请的目的在于提供一种内存监控方法、装置及一种电子设备和一种计算机可读存储介质,按数据类型进行内存占用统计,实现了进程内存占用动态跟踪。
为实现上述目的,本申请提供了一种内存监控方法,包括:
当接收到目标数据的内存申请时,识别所述目标数据的数据类型;
调用内存申请接口为所述目标数据分配内存,并返回内存分配结果,以便响应所述内存申请;
根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小,并更新所有已分配内存的总量。
其中,所述根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小,包括:
判断目标存储结构中是否存在所述数据类型;
若是,则根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小;
若否,则将所述数据类型存储至所述目标存储结构中,并根据所述内存申请对应的申请内存量统计所述数据类型对应的申请内存大小。
其中,所述目标存储结构为Map结构。
其中,所述返回内存分配结果,包括:
若申请成功,则返回所述目标数据对应的内存。
其中,所述返回内存分配结果,包括:
若申请失败,则返回错误类型对应的错误码。
其中,还包括:
当接收到内存统计信息的打印命令时,分别输出每个所述数据类型对应的申请内存大小和所有已分配内存的总量。
其中,还包括:
当检测到目标内存的释放动作后,确定所述目标内存存储数据的目标数据类型;
根据所述目标内存的大小更新所述目标数据类型对应的申请内存大小和所有已分配内存的总量。
为实现上述目的,本申请提供了一种内存监控装置,包括:
识别模块,用于当接收到目标数据的内存申请时,识别所述目标数据的数据类型;
分配模块,用于调用内存申请接口为所述目标数据分配内存,并返回内存分配结果,以便响应所述内存申请;
第一更新模块,用于根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小,并更新所有已分配内存的总量。
为实现上述目的,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述内存监控方法的步骤。
为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述内存监控方法的步骤。
通过以上方案可知,本申请提供的一种内存监控方法,包括:当接收到目标数据的内存申请时,识别所述目标数据的数据类型;调用内存申请接口为所述目标数据分配内存,并返回内存分配结果,以便响应所述内存申请;根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小,并更新所有已分配内存的总量。
本申请提供的内存监控方法,通过拦截内存分配,按数据类型分类统计申请内存大小和所有已分配内存的总量,实现进程内存占用动态跟踪,为内存优化提供参考,提升内存健壮性和稳定性。由此可见,本申请提供的内存监控方法,按数据类型进行内存占用统计,实现了进程内存占用动态跟踪。本申请还公开了一种内存监控装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1为根据一示例性实施例示出的一种内存监控方法的流程图;
图2为根据一示例性实施例示出的一种内存监控装置的结构图;
图3为根据一示例性实施例示出的一种电子设备的结构图。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例公开了一种内存监控方法,按数据类型进行内存占用统计,实现了进程内存占用动态跟踪。
参见图1,根据一示例性实施例示出的一种内存监控方法的流程图,如图1所示,包括:
S101:当接收到目标数据的内存申请时,识别所述目标数据的数据类型;
在本实施例中,可以重载内存分配函数,重命名数据类型,此处的数据类型可以包括byte、short、int、long、float、double、boolean、char等,在此不进行具体限定。在具体实施中,可以通过C++语言实现重载内存分配函数和重命名数据类型,当然也可以采用其他语言,本实施例不进行具体限定。
在本步骤中,客户端程序申请内存时,调用重载的内存分配函数,通过类型解析接口,解析出申请内存的数据类型。
S102:调用内存申请接口为所述目标数据分配内存,并返回内存分配结果,以便响应所述内存申请;
在本步骤中,调用系统提供的内存申请接口进行内存申请并将内存分配结果返回至客户端程序。具体的,若申请成功,则返回所述目标数据对应的内存,若申请失败,则返回错误类型对应的错误码,以便客户端程序进行相应的处理,重新申请或报错。
S103:根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小,并更新所有已分配内存的总量。
在本步骤中,按数据类型统计内存申请大小,存入目标存储结构中,并累加到已分配内存的总量中,此处的目标存储结构可以为Map结构,即Alloc_Map。当接收到内存统计信息的打印命令时,分别输出每个数据类型对应的申请内存大小和所有已分配内存的总量。
作为一种可行的实施方式,所述根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小的步骤可以包括:判断目标存储结构中是否存在所述数据类型;若是,则根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小;若否,则将所述数据类型存储至所述目标存储结构中,并根据所述内存申请对应的申请内存量统计所述数据类型对应的申请内存大小。在具体实施中,若首次为某一数据类型的数据申请内存,则将该数据类型存储值目标存储结构中,并统计本次申请的内存大小,下一次为该数据类型的数据申请内存时,进行累加即可。
作为一种优选实施方式,本实施例还包括:当检测到目标内存的释放动作后,确定所述目标内存存储数据的目标数据类型;根据所述目标内存的大小更新所述目标数据类型对应的申请内存大小和所有已分配内存的总量。
在具体实施中,当程序已申请的内存使用完成后进行释放时,解析出数据类型,在目标存储结构中查该数据类型对应的申请内存大小,从该数据类型的申请内存大小中减去释放的内存量,从已分配内存的总量减去释放的内存,并调用内存释放函数进行内存释放,实现动态监控内存占用情况,为程序优化提供参考。
本申请实施例提供的内存监控方法,通过拦截内存分配,按数据类型分类统计申请内存大小和所有已分配内存的总量,实现进程内存占用动态跟踪,为内存优化提供参考,提升内存健壮性和稳定性。由此可见,本申请实施例提供的内存监控方法,按数据类型进行内存占用统计,实现了进程内存占用动态跟踪。
下面介绍本申请提供的一种应用实施例,具体的,客户端程序实现时主要包括以下几个步骤:
步骤1:运行分布式系统和客户端程序;
步骤2:程序申请内存存储数据时或数据结构初始化时,等待C++内存分配接口返回结果;若内存分配成功,使用内存存取数据;若分配失败,则将返回结果返回给客户端并按返回值进行相应处理;
步骤3:数据不再使用时或要析构释放内存时,调用接口释放内存或调用数据结构自定义接口释放内存;
步骤4:内存释放完成后,程序持续运行;
步骤5:执行特定命令查看各类型的内存占用情况。
内存分配模块处理程序主要包括以下步骤:
步骤1:重载C++内存分配函数,并重命名数据类型;
步骤2:收到程序申请内存的动作后,解析数据类型;
步骤3:按类型存入到结构Alloc_Map中,并记录该类型申请的内存大小,并累加到内存总量中;
步骤4:调用系统内存申请接口,申请内存;
步骤5:把申请结果或申请到的内存返回给客户端程序;
步骤6:接收到程序释放内存的动作后,解析数据类型;
步骤7:在数据结构Alloc_Map中按类型查相应的内存统计总量;
步骤8:从当前数据类型的内存总量中减去释放的内存量,并更新到Alloc_Map中,从内存总量中减去释放的内存量;
步骤9:调用系统内存释放接口,进行内存释放;
步骤10:收到客户端打印内存统计信息时,调用打印接口按类型格式化输出各类型对应的内存统计值和总的内存值。
下面对本申请实施例提供的一种内存监控装置进行介绍,下文描述的一种内存监控装置与上文描述的一种内存监控方法可以相互参照。
参见图2,根据一示例性实施例示出的一种内存监控装置的结构图,如图2所示,包括:
识别模块201,用于当接收到目标数据的内存申请时,识别所述目标数据的数据类型;
分配模块202,用于调用内存申请接口为所述目标数据分配内存,并返回内存分配结果,以便响应所述内存申请;
第一更新模块203,用于根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小,并更新所有已分配内存的总量。
本申请实施例提供的内存监控装置,通过拦截内存分配,按数据类型分类统计申请内存大小和所有已分配内存的总量,实现进程内存占用动态跟踪,为内存优化提供参考,提升内存健壮性和稳定性。由此可见,本申请实施例提供的内存监控装置,按数据类型进行内存占用统计,实现了进程内存占用动态跟踪。
在上述实施例的基础上,作为一种优选实施方式,所述第一更新模块203包括:
判断单元,用于判断目标存储结构中是否存在所述数据类型;若是,则启动第一更新单元的工作流程;若否,则启动存储单元的工作流程;
第一更新单元,用于根据所述内存申请对应的申请内存量更新所述数据类型对应的申请内存大小;
存储单元,用于将所述数据类型存储至所述目标存储结构中,并根据所述内存申请对应的申请内存量统计所述数据类型对应的申请内存大小;
第二更新单元,用更新所有已分配内存的总量。
在上述实施例的基础上,作为一种优选实施方式,所述目标存储结构为Map结构。
在上述实施例的基础上,作为一种优选实施方式,所述分配模块202包括:
分配单元,用于调用内存申请接口为所述目标数据分配内存;
第一返回单元,用于当申请成功时,返回所述目标数据对应的内存;
第二返回单元,用于当申请失败时,返回错误类型对应的错误码。
在上述实施例的基础上,作为一种优选实施方式,还包括:
输出模块,用于当接收到内存统计信息的打印命令时,分别输出每个所述数据类型对应的申请内存大小和所有已分配内存的总量。
在上述实施例的基础上,作为一种优选实施方式,还包括:
确定模块,用于当检测到目标内存的释放动作后,确定所述目标内存存储数据的目标数据类型;
第二更新模块,用于根据所述目标内存的大小更新所述目标数据类型对应的申请内存大小和所有已分配内存的总量。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本申请还提供了一种电子设备,参见图3,本申请实施例提供的一种电子设备300的结构图,如图3所示,可以包括处理器11和存储器12。该电子设备300还可以包括多媒体组件13,输入/输出(I/O)接口14,以及通信组件15中的一者或多者。
其中,处理器11用于控制该电子设备300的整体操作,以完成上述的内存监控方法中的全部或部分步骤。存储器12用于存储各种类型的数据以支持在该电子设备300的操作,这些数据例如可以包括用于在该电子设备300上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器12可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件13可以包括屏幕,例如可以是触摸屏。I/O接口14为处理器11和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件15用于该电子设备300与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near Field Communication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件15可以包括:Wi-Fi模块,蓝牙模块,NFC模块。
在一示例性实施例中,电子设备300可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的内存监控方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述内存监控方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器12,上述程序指令可由电子设备300的处理器11执行以完成上述的内存监控方法。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本文发布于:2023-04-13 07:23:54,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/85875.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |