[发明专利]对象处理方法、装置、存储介质及计算机设备在审
申请号: | 202011440453.8 | 申请日: | 2020-12-10 |
公开(公告)号: | CN114625522A | 公开(公告)日: | 2022-06-14 |
发明(设计)人: | 陈伟杰 | 申请(专利权)人: | 网易(杭州)网络有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 深圳紫藤知识产权代理有限公司 44570 | 代理人: | 远明 |
地址: | 310052 浙江省杭州*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 对象 处理 方法 装置 存储 介质 计算机 设备 | ||
本申请实施例公开了一种对象处理方法、装置、存储介质及计算机设备。该方法包括:子进程获取可收集对象,并向执行父进程的计算机设备申请独立于父进程所享内存空间的内存空间;根据可收集对象的被引用状况在内存空间内建立表格;根据表格确定不可达对象,并将不可达对象发送至父进程,以供父进程对不可达对象进行回收,从而在整体上降低在垃圾回收过程中子进程带来的内存空间占用的上涨量,减轻内存负担。
技术领域
本申请涉及计算机技术领域,尤其涉及计算机内存管理技术领域,具体涉及一种对象处理方法、装置、存储介质及计算机设备。
背景技术
Python采取引用计数来管理对象的生命周期,但是引用计数会带来循环引用问题,为了解决循环引用的问题,Python又引入了“标记-擦除算法”,为了降低回收频率,进一步采取了分代回收策略,即便如此,在高内存的服务器进程里面,执行一次垃圾回收的时间可能达到20秒以上,且在垃圾回收的过程中服务器不会响应其他任何请求。为了降低垃圾回收停顿时间对服务器的影响,业内有一种并行垃圾回收的技术,这种技术基于fork(复刻)和写时拷贝,通过fork一个子进程,之后将“标记”计算分摊到子进程,父进程则只需要进行“擦除”计算即可,对于一个高内存的服务器来说,绝大部分的计算量在“标记”的部分,因此,这种方式能够有效降低垃圾回收的停顿时间,提升服务器的响应性能。
然而,子进程在计算过程中会对所有被垃圾回收器跟踪的对象的头部进行写入,在写入时会引起内存的拷贝,由于拷贝的单位是一个内存页,对对象的头部进行写入会引起其头部地址所属的内存页整页的拷贝,可见,这种方式会引起大范围写入导致内存空间占用上涨的技术问题,且当一个Python进程占用的内存越高时,这种方式带来的内存空间占用上涨也会越高,尽管内存空间占用上涨只会出现在子进程计算时,但仍然会提高机器内存空间的被占用率,增加机器的内存负担。
发明内容
本申请实施例提供一种对象处理方法、装置、存储介质及计算机设备,可以降低在垃圾回收过程中子进程带来的内存占用的上涨量。
本申请实施例提供了一种对象处理方法,包括:
子进程获取可收集对象,并向执行父进程的计算机设备申请独立于所述父进程所享内存空间的内存空间;
根据所述可收集对象的被引用状况在所述内存空间内建立表格;
根据所述表格确定不可达对象,并将所述不可达对象发送至所述父进程,以供所述父进程对所述不可达对象进行回收。
可选的,所述根据所述可收集对象的被引用状况在所述内存空间内建立表格,包括:
获取所述可收集对象的引用计数;
根据所述可收集对象的引用计数,建立所述可收集对象和所述引用计数的对应关系并以表格的形式存储于所述内存空间中。
可选的,所述根据所述表格确定不可达对象,包括:
将所述可收集对象所引用的可收集对象在所述表格中的引用计数均减一;
根据所述表格中减一后的引用计数确定不可达对象集合,并将所述不可达对象集合中的全部可收集对象确定为不可达对象。
可选的,所述根据所述表格中减一后的引用计数确定不可达对象集合,包括:
根据所述表格中减一后的引用计数和根对象确定不可达对象集合。
可选的,所述根据所述表格中减一后的引用计数和根对象确定不可达对象集合,包括:
根据所述表格中减一后的引用计数确定目标集合;
根据所述目标集合和根对象确定不可达对象集合。
可选的,所述根据所述表格中减一后的引用计数确定目标集合,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于网易(杭州)网络有限公司,未经网易(杭州)网络有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011440453.8/2.html,转载请声明来源钻瓜专利网。