System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 回收内存的方法和装置制造方法及图纸_技高网

回收内存的方法和装置制造方法及图纸

技术编号:40661443 阅读:3 留言:0更新日期:2024-03-18 18:54
本申请提供一种回收内存的方法和装置,该方法包括:根据内存块类型(class)的大小,设置多个class中每个class的回收时间间隔,多个class中至少有两个class的回收时间间隔不同;根据多个class的回收时间间隔,对多个class进行周期性内存检查回收。该方案主要在class粒度,针对每个class,为其设置合适的回收时间间隔,使得对于大小不同的class都有更为合适的回收时间间隔,从而有效改善了传统的所有class都是统一的固定时间间隔所导致的回收不及时的技术问题。

【技术实现步骤摘要】

本申请涉及内存回收,尤其涉及一种回收内存的方法和装置


技术介绍

1、scudo是一种应用非常广泛的native内存分配器,每个应用程序的执行业务需要通过scudo申请和释放内存。从操作系统角度看,scudo持有的内存被执行业务的进程独占,无法被其它进程重用,当进程不再使用内存后,该进程持有的native内存越少越好,以便于腾出更多内存空间供其它进程使用,但是scudo作为一款native内存分配器,业务释放(free)的内存并不会全部释放给操作系统,而是会预留一部分作为缓存。scudo通过日常内存回收(garbage collection,gc)和强制gc两种方式实现对内存的回收,将内存回收释放给操作系统。日常gc是按照默认固定时间间隔进行回收,但这种回收方式并没有考虑不同应用的不同业务的回收需求不同,导致回收效果不理想。强制gc则是通过主动调用强制gc接口的方式来触发回收,但是这种方式会导致回收时机可能不合适,比如对于某个前台应用,很可能刚强制gc完之后又需要重新申请内存,造成了较大的性能损耗。

2、简而言之,现有的内存回收机制,存在内存回收不及时或者回收时机不合适的问题,导致回收效果差。


技术实现思路

1、本申请提供一种回收内存的方法和装置,能够提高内存回收效果。

2、第一方面,提供了一种回收内存的方法,该方法包括:根据内存块类型(class)的大小,设置多个class中每个class的回收时间间隔,多个class中至少有两个class的回收时间间隔不同;根据多个class的回收时间间隔,对多个class进行周期性内存检查回收。

3、在本申请技术方案中,主要在class粒度,针对每个class,为其设置合适的回收时间间隔,使得对于大小不同的class都有更为合适的回收时间间隔,从而有效改善了传统的所有class都是统一的固定时间间隔所导致的回收不及时的技术问题。此外,相比于传统的强制回收机制,按照回收时间间隔来进行回收也能够避免强制回收所造成的回收时机不合适的技术问题。

4、结合第一方面,在第一方面的某些实现方式中,多个class包括第一class和第二class;第一class的回收时间间隔大于第二class的回收时间间隔;第一class的大小小于第二class的大小。也就是说,class的大小越大,回收时间间隔设置就越短,反之,class的大小越小,回收时间间隔设置就越长。应理解,上述第一class和第二class是多个class中的任意class,只要满足上述回收时间间隔和class大小的相对关系即可。

5、相对大块内存(内存大小,也就是字节数较大的class),小块内存(内存大小,也就是字节数较大的class)的适用业务更多,使用会更频繁。所以对于较大的class设置较小的回收时间间隔,能够增加内存释放的概率,避免被缓存的内存因为较长时间没有被使用而没有机会释放掉,而对于较小的class,由于使用频繁,所以会频繁在使用后被检查和释放,反而不需要设置更短的回收时间间隔。此外,较大的class的缓存量会更高,所以设置较短的回收时间间隔能够保证内存能尽可能被更多释放。

6、结合第一方面,在第一方面的某些实现方式中,在根据多个class的回收时间间隔,对多个class进行周期性内存检查回收时,可以包括:对于多个class中的任意一个class,每隔该任意一个class的回收时间间隔,对该class进行一次内存检查;当检查结果为空闲内存块block的数量满足预设条件时,将空闲内存回收释放给操作系统。也就是说,对于每个class,可以每隔一个回收时间间隔就进行一次内存检查。并不是每次的释放都会检查和回收,而是每隔一个回收时间间隔就在释放的时候进行一次内存检查。每次释放都会产生一些空闲内存块,当这些空闲内存块达到一定数量就会成为空闲页,当空闲页的数量达到预设条件所设定的树龄就可以触发回收。所以对于每个class,每隔一个该class的回收时间间隔就进行一次内存检查,当发现空闲内存块的数量满足预设条件之后,就可以将空闲内存按照空闲页释放给操作系统。

7、结合第一方面,在第一方面的某些实现方式中,上述方法还包括:设置多个class中每个class的回收阈值,多个class中至少有两个class的回收阈值不同;对于多个class中的任意一个class,当该任意一个class的待释放内存的容量大于或等于该class的回收阈值时,将该class的待释放内存回收并释放给操作系统。

8、以class粒度来设置回收阈值,对于每个class,当没有释放的内存(也就是空闲内存块)的容量大于或等于该class的回收阈值时,即便不到回收时间间隔,也可触发内存回收。应理解,这种方式是在按照个性化定制的回收时间间隔回收的基础上,再增加了额外的阈值出发回收机制,所以会增加额外触发的回收次数,减少内存缓存。

9、结合第一方面,在第一方面的某些实现方式中,上述多个class包括第三class和第四class,上述方法还包括:在对第三class进行周期性内存检查回收的期间,按照横向检查时间间隔,周期性触发对第四class进行内存检查回收,横向检查时间间隔为第三class的回收时间间隔的正整数倍。

10、增加了横向检查机制,能够增加class被检查的频率,从而进一步提高内存被释放给操作系统的机会,减少缓存的内存。应理解,第三class和第四class至少是上述多个class之中的class即可,不存在其他限定,也就是说,第三class可以跟第一class或第二class是同一个class,第四class可以跟第一class或第二class是同一个class。应理解,这种方式是在按照个性化定制的回收时间间隔回收的基础上,再增加了横向检查机制,所以会增加额外触发的回收次数,减少内存缓存。

11、在一个例子中,第三class的大小小于第四class的大小。考虑到较小的class使用频率更高,所以触发free的时候也更加频发,所以可以在较小的class去横向检查一个或多个较大的class。

12、在另一个例子中,每个第三class对应一个或两个第四class。为了使得横向检查机制更加合理,可以是每个第三class对应一个或两个第四class,也就是在每个第三class,每隔一个横向检查时间间隔,就对一个或两个与之结对的第四class进行一次内存检查和回收。这个例子中,相当于尽量均匀非配横向检查这项任务,让所有class都相对均匀的增加了被横向检查的机会,提高处理效率。

13、结合第一方面,在第一方面的某些实现方式中,上述多个class包括class0和至少一个常规class,class0用于表示管理class,常规class用于表示非管理class,上述方法还包括:在class0中对至少一个常规class按照扫描周期进行轮询扫描,以确定至少一个常规class的回收时机,至少一个常规class中每个cl本文档来自技高网...

【技术保护点】

1.一种回收内存的方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述多个class包括第一class和第二class;所述第一class的回收时间间隔大于所述第二class的回收时间间隔;所述第一class的大小小于所述第二class的大小。

3.根据权利要求1所述的方法,其特征在于,所述根据所述多个class的回收时间间隔,对所述多个class进行周期性内存检查回收,包括:

4.根据权利要求1所述的方法,其特征在于,所述方法还包括:

5.根据权利要求1至4中任一项所述的方法,其特征在于,所述多个class包括第三class和第四class,所述方法还包括:

6.根据权利要求5所述的方法,其特征在于,所述第三class的大小小于所述第四class的大小。

7.根据权利要求5或6所述的方法,其特征在于,每个所述第三class对应一个或两个所述第四class。

8.根据权利要求1至7中任一项所述的方法,其特征在于,所述多个class包括class0和至少一个常规class,所述class0用于表示管理class,所述常规class用于表示非管理class,所述方法还包括:

9.根据权利要求8所述的方法,其特征在于,所述至少一个常规class的大小大于或等于预设的class大小阈值。

10.一种回收内存的装置,其特征在于,包括:

11.一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时使得所述电子设备实现如权利要求1至9中任一项所述的方法。

12.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被电子设备执行时实现如权利要求1至9中任一项所述的方法。

...

【技术特征摘要】

1.一种回收内存的方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述多个class包括第一class和第二class;所述第一class的回收时间间隔大于所述第二class的回收时间间隔;所述第一class的大小小于所述第二class的大小。

3.根据权利要求1所述的方法,其特征在于,所述根据所述多个class的回收时间间隔,对所述多个class进行周期性内存检查回收,包括:

4.根据权利要求1所述的方法,其特征在于,所述方法还包括:

5.根据权利要求1至4中任一项所述的方法,其特征在于,所述多个class包括第三class和第四class,所述方法还包括:

6.根据权利要求5所述的方法,其特征在于,所述第三class的大小小于所述第四class的大小。

7.根据权利要求5或6所述的方法,其特征在于,每个所述第三cla...

【专利技术属性】
技术研发人员:王红照
申请(专利权)人:荣耀终端有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1