内存回收方法、设备、存储介质和系统与流程

文档序号:34606257发布日期:2023-06-29 03:16阅读:58来源:国知局
内存回收方法、设备、存储介质和系统与流程

本发明涉及计算机,尤其涉及一种内存回收方法、设备、存储介质和系统。


背景技术:

1、在诸如手机、笔记本电脑、服务器等电子设备中,一个应用程序被启动时会启动相应的进程,进程会申请自己独立的一块或多块内存空间,而且,进程可以启动多个线程(称为应用线程)来执行应用程序运行过程中所需执行的各个任务。在任务执行过程中,会存在多个线程访问同一块内存空间的情形。当这块内存空间不再被访问的时候,可以回收这块内存空间,以提高内存的利用率。

2、针对上述多个应用线程访问同一内存空间的情况,一般会采用智能指针维护内存空间的生命周期。具体实施时,每个应用线程每次访问该内存空间时,都需要对智能指针进行构建操作和析构操作,举例来说,在某个应用线程访问该内存空间时,先构造指向该内存空间的智能指针,并对智能指针中的原子计数器的数值执行加一操作,在访问内存空间完毕后,析构该智能指针,以对原子计数器的数值执行减一操作。其中,多个应用线程共用该原子计数器,待原子计数器减为零时,即可对该内存空间进行回收处理。而在此过程中,为了保证多个应用线程间的原子性需要使用原子操作,原子操作以及不断地构建、析构智能指针,性能消耗较大。


技术实现思路

1、本发明实施例提供一种内存回收方法、设备、存储介质和系统,用于降低回收内存时的性能开销。

2、第一方面,本发明实施例提供一种内存回收方法,应用于对至少一个应用线程共同访问的目标内存空间进行回收的回收线程,所述方法包括:

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、由此可见,在上述方案中,在目标内存空间等待回收期间不影响应用线程对其的正常访问,是否开始回收该目标内存空间,仅依赖于应用线程以及目标内存空间各自对应的版本号的赋值和比较,这些操作不需要加锁,性能开销很小。而且,内存回收处理过程相对较慢,由额外的回收线程来完成内存回收处理过程,避免在应用线程中执行内存回收处理过程,可以降低应用线程的负担,提升应用线程的应用任务处理速度。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1