System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及计算机,特别是涉及一种内存释放方法、装置、计算机设备、存储介质和计算机程序产品。
技术介绍
1、在使用luajit脚本语言时,由于luajit的内存分配器特性,只有当内存段上所有内存都为空闲,即只有一个空闲内存块时,才会将这个内存段释放给操作系统。在业务使用过程中,当luajit申请所需的最大内存后,一直维持所需的最大内存,不释放内存。例如,正常情况下,只需要100m的内存,某个时刻需额外使用900m,共需1000m的内存,对应2个500m的内存段上的内存块。当使用结束后,释放900m内存,剩余100m内存。但此时100m的使用内存对应在2个内存段上各有50m的使用内存块。此时2个500m的内存段都不会将内存归还给操作系统,导致占用的内存为1000m,而实际只使用100m,内存使用率仅仅为10%,有较高的内存浪费。
2、因此,传统方法中的操作系统无法高效回收内存,导致系统空闲内存无法高效利用的问题。
技术实现思路
1、基于此,有必要针对上述技术问题,提供一种能够高效回收内存的内存释放方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
2、一种内存释放方法,包括:
3、在内存空闲率大于第一预设阈值且空闲内存总和大于第二预设阈值的情况下,遍历内存段链表中的各内存段,将存在至少一个空闲内存块的内存段作为目标内存段;
4、按照预设的空闲内存块释放规则,对各目标内存段执行空闲内存块释放操作,并获取执行空闲内存块释放操作后各目
5、对于任一目标内存段,根据目标内存段的内存段拆分结果,将目标内存段对应的各子内存段通过链表进行链接,得到目标内存段对应的子内存段链接信息;
6、将内存段链表中各目标内存段对应的内存段链接信息替换为各目标内存段对应的子内存段链接信息,以将各目标内存段的空闲内存释放给操作系统。
7、在其中一个实施例中,方法还包括:
8、遍历内存段链表,获取各内存段的内存大小,以及,获取各内存段的空闲内存大小;内存段上的空闲内存大小为将内存段上各空闲内存块的内存大小进行相加得到的;
9、根据各内存段的内存大小,确定内存总和,以及,根据各内存段的空闲内存大小,确定空闲内存总和;
10、根据内存总和以及空闲内存总和,确定内存空闲率。
11、在其中一个实施例中,按照预设的空闲内存块释放规则,对各目标内存段执行空闲内存块释放操作,包括:
12、在目标内存段上的第一个内存块为空闲内存块的情况下,确定目标内存段的首地址和第一个内存块的尾地址;
13、根据第一个内存块的尾地址和目标内存段的首地址,确定待释放内存块的尾地址;
14、在待释放内存块的尾地址减去目标内存段的首地址得到的内存长度大于预设的内存页长度的情况下,调用内存释放函数释放待释放内存块。
15、在其中一个实施例中,根据第一个内存块的尾地址和目标内存段的首地址,确定待释放内存块的尾地址,包括:
16、将第一个内存块的尾地址减去目标内存段的首地址后按照预设的内存页长度进行内存对齐,得到待释放内存块的初始尾地址;
17、在第一个内存块的尾地址减去待释放内存块的初始尾地址得到的长度大于0且小于最小块的长度的情况下,将初始尾地址减去预设的内存页长度得到的结果作为待释放内存块的尾地址。
18、在其中一个实施例中,按照预设的空闲内存块释放规则,对各目标内存段执行空闲内存块释放操作,包括:
19、在目标内存段上的第一个内存块不为空闲内存块的情况下,确定目标内存段的第一个空闲内存块;
20、确定目标内存段的首地址、目标内存段的尾地址、第一个空闲内存块的首地址、第一个空闲内存块的尾地址;
21、根据第一个空闲内存块的首地址和目标内存段的首地址,确定待释放内存块的首地址,以及,根据第一个空闲内存块的尾地址和目标内存段的首地址,确定待释放内存块的尾地址;
22、在待释放内存块的尾地址减去待释放内存块的首地址得到的长度大于预设的内存页长度的情况下,调用内存释放函数释放待释放内存块。
23、在其中一个实施例中,根据第一个空闲内存块的首地址和目标内存段的首地址,确定待释放内存块的首地址,包括:
24、将第一个空闲内存块的首地址减去目标内存段的首地址,并按照预设的内存页长度进行内存对齐后加上目标内存段的首地址,得到待释放内存块的初始首地址;
25、将待释放内存块的初始首地址减去预设的隐藏段长度和第一个空闲内存块的首地址,得到第一长度;
26、在第一长度大于0且小于最小块的长度的情况下,将初始首地址加上预设的内存页长度得到的结果作为待释放内存块的首地址。
27、在其中一个实施例中,根据第一个空闲内存块的尾地址和目标内存段的首地址,确定待释放内存块的尾地址,包括:
28、将第一个空闲内存块的尾地址减去目标内存段的首地址,并按照预设的内存页长度进行内存对齐后加上目标内存段的首地址,得到待释放内存块的初始尾地址;
29、将第一个空闲内存块的尾地址减去待释放内存块的初始尾地址,得到第二长度;
30、在第二长度大于0且小于最小块的长度的情况下,将待释放内存块的初始尾地址减去预设的内存页长度得到的结果作为待释放内存块的尾地址。
31、一种内存释放装置,包括:
32、遍历模块,用于在内存空闲率大于第一预设阈值且空闲内存总和大于第二预设阈值的情况下,遍历内存段链表中的各内存段,将存在至少一个空闲内存块的内存段作为目标内存段;
33、释放模块,用于按照预设的空闲内存块释放规则,对各目标内存段执行空闲内存块释放操作,并获取执行空闲内存块释放操作后各目标内存段的内存段拆分结果;
34、链接模块,用于对于任一目标内存段,根据目标内存段的内存段拆分结果,将目标内存段对应的各子内存段通过链表进行链接,得到目标内存段对应的子内存段链接信息;
35、替换模块,用于将内存段链表中各目标内存段对应的内存段链接信息替换为各目标内存段对应的子内存段链接信息,以将各目标内存段的空闲内存释放给操作系统。
36、一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述的方法的步骤。
37、一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的方法的步骤。
38、上述内存释放方法、装置、计算机设备、存储介质和计算机程序产品,通过在内存空闲率大于第一预设阈值且空闲内存总和大于第二预设阈值的情况下,遍历内存段链表中的各内存段,将存在至少一个空闲内存块的内存段作为目标内存段;按照预设的空闲内存块释放规则,对各目标内存段执行空闲内存块释放操作,并获取执行空闲内存块释放操作后各目标内存段的内存段拆分结果;对本文档来自技高网...
【技术保护点】
1.一种内存释放方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
3.根据权利要求1所述的方法,其特征在于,所述按照预设的空闲内存块释放规则,对各所述目标内存段执行空闲内存块释放操作,包括:
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一个内存块的尾地址和所述目标内存段的首地址,确定待释放内存块的尾地址,包括:
5.根据权利要求1所述的方法,其特征在于,所述按照预设的空闲内存块释放规则,对各所述目标内存段执行空闲内存块释放操作,包括:
6.根据权利要求5所述的方法,其特征在于,所述根据所述第一个空闲内存块的首地址和所述目标内存段的首地址,确定待释放内存块的首地址,包括:
7.根据权利要求5所述的方法,其特征在于,所述根据所述第一个空闲内存块的尾地址和所述目标内存段的首地址,确定所述待释放内存块的尾地址,包括:
8.一种内存释放装置,其特征在于,所述装置包括:
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
...【技术特征摘要】
1.一种内存释放方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
3.根据权利要求1所述的方法,其特征在于,所述按照预设的空闲内存块释放规则,对各所述目标内存段执行空闲内存块释放操作,包括:
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一个内存块的尾地址和所述目标内存段的首地址,确定待释放内存块的尾地址,包括:
5.根据权利要求1所述的方法,其特征在于,所述按照预设的空闲内存块释放规则,对各所述目标内存段执行空闲内存块释放操作,包括:
6.根据权利要求5所述的方法,其特征在于,所述根据所述第一...
【专利技术属性】
技术研发人员:曾劲基,林金棚,林静娟,谢东雷,潘艳婧,
申请(专利权)人:天翼云科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。