一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种内存管理方法、装置、设备及可读存储介质与流程

2021-11-05 22:16:00 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别涉及一种内存管理方法、装置、设备及可读存储介质。


背景技术:

2.内存对软件运行至关重要,内存决定软件是否可以正常运行,也决定着软件性能。一般在linux操作系统或者一些小型的实时操作系统中都会有内存管理功能,然而这些内存管理基本上都是对动态内存的管理,实际应用中,使用动态内存会出现很多不确定因素,比如特定场景内存升高导致宕机,使用过的内存没有释放导致可用内存越来越少等,所以,一些大型软件的开发都是禁止使用动态内存的,有些可以使用动态内存,但是申请动态内存也只限于在提前划分好的内存池里面进行,这样就可以避免上述问题。
3.上述提前划分内存的方法对软件的健壮性有很大的保证,但是,随着软件的功能不断增加,软件代码量的不断加大,提前分配的内存可能会不够用,出现某个功能运行得不到足够内存而出现卡顿的现象。但是增加内存又不能很精确的评估出到底分配多少内存,如果分配少了软件性能得不到提升,分配多了又会增加成本,造成浪费。
4.综上,目前的内存管理方案在提前为软件划分内存时,由于无法准确得知软件的内存需求量,导致划分的内存过多或过少,导致软件性能无法得到充分发挥或成本偏高的问题。如何克服上述弊端,是亟待本领域技术人员解决的问题。


技术实现要素:

5.本技术的目的是提供一种内存管理方法、装置、设备及可读存储介质,用以解决当前的内存管理方案由于无法得知软件的内存需求量,导致内存划分偏多或偏少的问题。其具体方案如下:
6.第一方面,本技术提供了一种内存管理方法,包括:
7.在内存池中,根据目标模块的内存预留量对所述目标模块进行内存分配;
8.在所述目标模块运行过程中,实时监测所述目标模块的内存使用情况;
9.若接收到所述目标模块的内存申请请求,则根据所述内存使用情况和所述内存申请请求,判断所述目标模块的预估内存使用量是否超过所述内存预留量,其中所述预估内存使用量等于所述内存使用情况中的内存使用量与所述内存申请请求中的内存申请量的和;若是,则生成内存告警;
10.在所述内存告警的频次超过阈值时,根据所述内存申请量对所述目标模块进行内存扩容。
11.可选的,在所述在所述目标模块运行过程中,实时监测所述目标模块的内存使用情况之后,还包括:
12.若在预设时长内未接收到所述目标模块的内存申请请求,则根据所述内存使用情况确定所述目标模块的内存使用量;
13.判断所述内存使用量是否小于所述内存预留量;
14.若是,则对所述目标模块进行内存缩减。
15.可选的,所述在所述目标模块运行过程中,实时监测所述目标模块的内存使用情况,包括:
16.根据平台性能设置监测频率,在所述目标模块运行过程中,按照所述监测频率实时监测所述目标模块的内存使用情况。
17.可选的,所述在所述内存告警的频次超过阈值时,根据所述内存申请量对所述目标模块进行内存扩容,包括:
18.在所述内存告警的频次超过阈值时,根据所述内存申请量控制所述目标模块的内存地址尾指针后移。
19.可选的,所述在内存池中,根据目标模块的内存预留量对所述目标模块进行内存分配,包括:
20.生成内存池的内存记录文件,所述内存记录文件用于记录各个模块的内存预留量;根据所述内存记录文件中目标模块的内存预留量,对所述目标模块进行内存分配;
21.相应的,在所述根据所述内存申请量对所述目标模块进行内存扩容之后,还包括:
22.在所述内存记录文件中,更新所述目标模块的内存预留量为扩容之后的内存量。
23.可选的,所述在所述内存告警的频次超过阈值时,根据所述内存申请量对所述目标模块进行内存扩容,包括:
24.在所述内存告警的频次超过阈值时,判断所述内存申请量是否大于所述内存池的内存剩余量;
25.若是,则生成所述内存池的扩容提示,并发送至用户层;
26.若否,则根据所述内存申请量对所述目标模块进行内存扩容。
27.可选的,在所述判断所述内存申请量是否大于所述内存池的内存剩余量之前,还包括:
28.计算所述内存池的最大安全值与全部模块的内存使用量的差值,得到所述内存池的内存剩余量。
29.第二方面,本技术提供了一种内存管理装置,包括:
30.内存分配模块,用于在内存池中,根据目标模块的内存预留量对所述目标模块进行内存分配;
31.监测模块,用于在所述目标模块运行过程中,实时监测所述目标模块的内存使用情况;
32.告警模块,用于若接收到所述目标模块的内存申请请求,则根据所述内存使用情况和所述内存申请请求,判断所述目标模块的预估内存使用量是否超过所述内存预留量,其中所述预估内存使用量等于所述内存使用情况中的内存使用量与所述内存申请请求中的内存申请量的和;若是,则生成内存告警;
33.扩容模块,用于在所述内存告警的频次超过阈值时,根据所述内存申请量对所述目标模块进行内存扩容。
34.第三方面,本技术提供了一种内存管理设备,包括:
35.存储器:用于存储计算机程序;
36.处理器:用于执行所述计算机程序,以实现如上所述的内存管理方法。
37.第四方面,本技术提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时用于实现如上所述的内存管理方法。
38.本技术所提供的一种内存管理方法,包括:在内存池中,根据目标模块的内存预留量对目标模块进行内存分配;在目标模块运行过程中,实时监测目标模块的内存使用情况;若接收到目标模块的内存申请请求,则根据内存使用情况和内存申请请求,判断目标模块的预估内存使用量是否超过内存预留量,其中预估内存使用量等于内存使用情况中的内存使用量与内存申请请求中的内存申请量的和;若是,则生成内存告警;在内存告警的频次超过阈值时,根据内存申请量对目标模块进行内存扩容。
39.可见,该方法能够提前为模块分配内存,避免了动态内存申请带来的弊端,而且,在为模块分配内存之后,该方法能够实时监测模块的内存使用情况和内存申请请求,在模块的内存需求量超过提前分配的内存量时,生成内存告警,并在内存告警频次较高时对模块进行内存扩容。实现了精准评估模块的内存需求的目的,避免了为模块分配过少内存导致软件性能无法充分发挥的问题,提升了内存使用效率。
40.此外,本技术还提供了一种内存管理装置、设备及可读存储介质,其技术效果与上述方法的技术效果相对应,这里不再赘述。
附图说明
41.为了更清楚的说明本技术实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
42.图1为本技术所提供的内存管理方法实施例一中内存扩容过程的流程图;
43.图2为本技术所提供的内存管理方法实施例一中内存缩减过程的流程图;
44.图3为本技术所提供的内存管理方法实施例二的整体流程图;
45.图4为本技术所提供的内存管理方法实施例二中内存扩容过程的流程图;
46.图5为本技术所提供的内存管理装置实施例的功能框图;
47.图6为本技术所提供的内存管理设备实施例的结构示意框图。
具体实施方式
48.本技术的核心是提供一种内存管理方法、装置、设备及可读存储介质,能够为模块提前分配内存,分配之后能够实时监测模块的内存需求量,在内存需求量超过提前分配的内存量时进行内存扩容。实现了精准评估模块的内存需求的目的,避免了为模块分配过少内存导致软件性能无法充分发挥的问题,提升了内存使用效率。
49.为了使本技术领域的人员更好地理解本技术方案,下面结合附图和具体实施方式对本技术作进一步的详细说明。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
50.下面对本技术提供的内存管理方法实施例一进行介绍,参见图1,实施例一包括:
51.s11、在内存池中,根据目标模块的内存预留量对目标模块进行内存分配。
52.s12、在目标模块运行过程中,实时监测目标模块的内存使用情况。
53.s13、若接收到目标模块的内存申请请求,则根据内存使用情况和内存申请请求,判断目标模块的预估内存使用量是否超过内存预留量;若是,则生成内存告警;
54.s14、在内存告警的频次超过阈值时,根据内存申请量对目标模块进行内存扩容。
55.具体的,根据经验,本实施例预先为每个模块设置内存预留量,在模块运行之前,根据内存预留量为模块分配相应大小的内存。在模块运行过程中,持续监测模块的内存使用情况,并检测模块是否发出内存申请请求。如果接收到模块发送的内存申请请求,则计算模块的预估内存使用量,即内存使用情况中的内存使用量与内存申请请求中的内存申请量的和,并判断预估内存使用量是否超过为该模块设置的内存预留量,若超过,则生成一次内存告警。在一段时间内,判断该模块的内存告警频次是否超过阈值,若超过,则认为该模块的内存需求比较迫切,并对该模块进行内存扩容;若未超过,则认为该模块只是临时需要较大内存,忽略该模块的内存申请请求。
56.本实施例的内存池可以包括全部系统内存,也可以只包括部分系统内存,即本实施例可以接管整个系统内存或者只接管系统内存的一部分。
57.值得一提的是,在动态内存管理系统中,模块提出内存申请请求之后,系统会将部分内存预分配给模块,但是,如果模块没有对该部分内存进行写操作,则该部分内存还可以被分配给其他模块。不同于上述方式,本实施例在对模块进行内存分配时,一旦将内存分配给某个模块,则不再将该内存分配给其他模块。
58.上面对内存预留量偏小时的内存扩容过程进行了介绍,实际应用中,也可能出现内存预留量偏大的情况,这种情况下,可以按照如图2所示的流程进行内存缩减:
59.s21、在目标模块运行过程中,实时监测目标模块的内存使用情况;
60.s22、若在预设时长内未接收到目标模块的内存申请请求,则根据内存使用情况确定目标模块的内存使用量;
61.s23、判断内存使用量是否小于内存预留量;若是,则进入s24,否则不做处理;
62.s24、根据目标模块的内存使用量,对目标模块进行内存缩减。
63.具体的,在模块运行过程中,持续监测模块的内存使用情况。根据模块的内存使用情况确定模块的内存使用量,判断该内存使用量是否小于模块的内存预留量,若是,认为该模块的内存需求量小于该模块的内存预留量,并读该模块进行内存缩减。
64.本实施例的方法既可以单独做成一个软件系统,也可以作为某个软件部分功能,在操作系统中也可以作为操作系统的单独运行进程。
65.作为一种具体的实施方式,本实施例使用c语言进行开发,实际应用中,可以根据不同场景需求使用其他语言,但代码逻辑以及实现的功能不变。
66.本实施例可以应用于有操作系统的平台,也可以应用于没有操作系统的平台,如单片机。对于有操作系统的平台环境,可以使用xml脚本进行内存记录,没有内存告警的情况下,会每隔几分钟对模块的内存使用情况进行统计,统计的频率可以根平台性能来定。对于没有操作系统的平台可以利用flash进行内存记录,需要记录哪些模块以及记录的频次也是根据平台性能来定。
67.本实施例所提供的一种内存管理方法,通过实时监测模块的内存使用情况,在尽
可能低配置内存的情况下实现软件的高性能。其中,当模块总体内存开销不大,并一直没有内存告警的情况下,则可以减少物理内存数量,从而达到节省成本的目的;当某个场景下或者软件的定制功能下,需要大内存才能到高性能,则本实施例可以准确识别模块的内存需求并提示用户进行增加物理内存,使软件达到高性能。总之,本实施例能够节省内存成本,提高软件性能。
68.下面开始详细介绍本技术提供的内存管理方法实施例二,实施例二基于前述实施例一实现,并在实施例一的基础上进行了一定程度上的拓展。
69.具体的,第一,实施例二通过内存记录文件记录各个模块的内存预留量,初始的内存预留量为根据经验设置的,后续过程中,通过监测模块的内存需求可以对内存预留量进行更新。第二,实施例二对模块的内存使用情况进行监测的过程中,监测频率具体根据平台性能确定,避免监测过程对平台造成较大影响。第三,实施例二对模块进行内存扩容或内存缩减的具体方式为,控制内存地址尾指针后移或前移。第四,在内存告警频次较高时,实施例二并不直接对模块进行扩容,而是先判断内存池的剩余内存是否能够满足模块的内存需求,在此过程中,需要保证内存池的内存使用量不超过最大安全值。
70.参见图3,实施例二具体包括:
71.s31、生成内存池的内存记录文件,内存记录文件用于记录各个模块的内存预留量。
72.s32、根据内存记录文件中目标模块的内存预留量,对目标模块进行内存分配。
73.s33、根据平台性能设置监测频率,在目标模块运行过程中,按照该监测频率实时监测目标模块的内存使用情况。
74.s34、检测是否接收到内存申请请求,若接收到,进入s35,否则进入s37。
75.s35、根据内存使用情况和内存申请请求,判断目标模块的预估内存使用量是否超过内存预留量,其中预估内存使用量等于内存使用情况中的内存使用量与内存申请请求中的内存申请量的和;若是,则生成内存告警。
76.s36、在内存告警的频次超过阈值时,根据内存申请量对目标模块进行内存扩容,控制目标模块的内存地址尾指针后移;在内存记录文件中,更新目标模块的内存预留量为扩容之后的内存量。
77.s37、若在预设时长内未接收到目标模块的内存申请请求,则根据内存使用情况确定目标模块的内存使用量。
78.s38、判断内存使用量是否小于内存预留量;若是,则对目标模块进行内存缩减,控制目标模块的内存地址尾指针前移。在内存记录文件中,更新目标模块的内存预留量为缩减之后的内存量。
79.如图4所示,上述s36中,在内存告警的频次超过阈值时,根据内存申请量对目标模块进行内存扩容的过程,具体包括以下步骤:
80.s41、在内存告警的频次超过阈值时,计算内存池的最大安全值与全部模块的内存使用量的差值,得到内存池的内存剩余量。
81.s42、判断内存申请量是否大于内存池的内存剩余量;若是,进入s43,否则进入s44。
82.s43、生成内存池的扩容提示,并发送至用户层。
83.s44、根据内存申请量对目标模块进行内存扩容。
84.总之,本实施例首先根据经验在内存记录文件中设置各个模块的内存预留量;在模块运行之前,根据内存记录文件为每个模块分配内存;在模块运行过程中,实时监测模块的内存使用情况;当接收到某个模块的内存申请请求时,判断该模块的预估内存使用量是否超过所述内存预留量,若超过,则生成一次内存告警并在目标文件记录本次内存告警,如果内存告警频次过高,如超过某个阈值,则会判断内存池的内存剩余量是否可以满足该模块的内存需求,分以下两种情况:如果可以满足,则对该模块进行内存扩容,控制该模块的内存地址尾指针后移,更新内存记录文件中该模块的内存预留量;如果无法满足,则将本次内存告警传递给用户层,并将过去一段时间内的内存告警也一起传递给用户层,用户根据自己情况去处理,比如增加物理内存等。
85.同理,当某个模块的内存使用量总是低于内存池为其分配的内存预留量,特别是在有其他高消耗内存的模块存在时,对该模块进行内存缩减,控制该模块的内存地址尾指针前移,更新内存记录文件中该模块的内存预留量。缩减的内存还给内存池,在其他模块有内存需要时,将这些分给其他模块使用。
86.综上,本实施例所提供的一种内存管理方法,首先,根据经验为每个模块设置内存预留量,初始化内存记录文件,系统初次启动会根据内存记录文件为每个模块分配内存。其次,实时监测各个模块的内存使用情况,根据内存使用情况和内存申请请求确定模块的内存需求,在模块内存需求超过内存预留量时,更新内存地址尾指针,并更新内存记录文件中该模块的内存预留量。
87.可见,本实施例能够完全或者部分接管系统内存,通过监测模块的内存使用情况,实现内存情况自主可控,可完全按照软件功能以及性能进行精准适配,降低成本提高效率。根据软件运行的需要,部署上述本实施例的方案之后,可以了解设备或者软件的运行情况、每个模块的内存使用情况、从池内获取的内存情况以及内存告警的情况等,使得本不好掌握的内存情况一目了然。
88.下面对本技术实施例提供的内存管理装置进行介绍,下文描述的内存管理装置与上文描述的内存管理方法可相互对应参照。
89.如图5所示,本实施例的内存管理装置,包括:
90.内存分配模块51,用于在内存池中,根据目标模块的内存预留量对所述目标模块进行内存分配;
91.监测模块52,用于在所述目标模块运行过程中,实时监测所述目标模块的内存使用情况;
92.告警模块53,用于若接收到所述目标模块的内存申请请求,则根据所述内存使用情况和所述内存申请请求,判断所述目标模块的预估内存使用量是否超过所述内存预留量,其中所述预估内存使用量等于所述内存使用情况中的内存使用量与所述内存申请请求中的内存申请量的和;若是,则生成内存告警;
93.扩容模块54,用于在所述内存告警的频次超过阈值时,根据所述内存申请量对所述目标模块进行内存扩容。
94.本实施例的内存管理装置用于实现前述的内存管理方法,因此该装置的具体实施方式可见前文中的内存管理方法的实施例部分,在此不再展开介绍。
95.此外,本技术还提供了一种内存管理设备,如图6所示,包括:
96.存储器100:用于存储计算机程序;
97.处理器200:用于执行所述计算机程序,以实现如上所述的内存管理方法。
98.最后,本技术提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时用于实现如上所述的内存管理方法。
99.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
100.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd

rom、或技术领域内所公知的任意其它形式的存储介质中。
101.以上对本技术所提供的方案进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献