CN114625522A - 对象处理方法、装置、存储介质及计算机设备 - Google Patents
对象处理方法、装置、存储介质及计算机设备 Download PDFInfo
- Publication number
- CN114625522A CN114625522A CN202011440453.8A CN202011440453A CN114625522A CN 114625522 A CN114625522 A CN 114625522A CN 202011440453 A CN202011440453 A CN 202011440453A CN 114625522 A CN114625522 A CN 114625522A
- Authority
- CN
- China
- Prior art keywords
- objects
- unreachable
- collectible
- determining
- memory space
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本申请实施例公开了一种对象处理方法、装置、存储介质及计算机设备。该方法包括:子进程获取可收集对象,并向执行父进程的计算机设备申请独立于父进程所享内存空间的内存空间;根据可收集对象的被引用状况在内存空间内建立表格;根据表格确定不可达对象,并将不可达对象发送至父进程,以供父进程对不可达对象进行回收,从而在整体上降低在垃圾回收过程中子进程带来的内存空间占用的上涨量,减轻内存负担。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及计算机内存管理技术领域,具体涉及一种对象处理方法、装置、存储介质及计算机设备。
背景技术
Python采取引用计数来管理对象的生命周期,但是引用计数会带来循环引用问题,为了解决循环引用的问题,Python又引入了“标记-擦除算法”,为了降低回收频率,进一步采取了分代回收策略,即便如此,在高内存的服务器进程里面,执行一次垃圾回收的时间可能达到20秒以上,且在垃圾回收的过程中服务器不会响应其他任何请求。为了降低垃圾回收停顿时间对服务器的影响,业内有一种并行垃圾回收的技术,这种技术基于fork(复刻)和写时拷贝,通过fork一个子进程,之后将“标记”计算分摊到子进程,父进程则只需要进行“擦除”计算即可,对于一个高内存的服务器来说,绝大部分的计算量在“标记”的部分,因此,这种方式能够有效降低垃圾回收的停顿时间,提升服务器的响应性能。
然而,子进程在计算过程中会对所有被垃圾回收器跟踪的对象的头部进行写入,在写入时会引起内存的拷贝,由于拷贝的单位是一个内存页,对对象的头部进行写入会引起其头部地址所属的内存页整页的拷贝,可见,这种方式会引起大范围写入导致内存空间占用上涨的技术问题,且当一个Python进程占用的内存越高时,这种方式带来的内存空间占用上涨也会越高,尽管内存空间占用上涨只会出现在子进程计算时,但仍然会提高机器内存空间的被占用率,增加机器的内存负担。
发明内容
本申请实施例提供一种对象处理方法、装置、存储介质及计算机设备,可以降低在垃圾回收过程中子进程带来的内存占用的上涨量。
本申请实施例提供了一种对象处理方法,包括:
子进程获取可收集对象,并向执行父进程的计算机设备申请独立于所述父进程所享内存空间的内存空间;
根据所述可收集对象的被引用状况在所述内存空间内建立表格;
根据所述表格确定不可达对象,并将所述不可达对象发送至所述父进程,以供所述父进程对所述不可达对象进行回收。
可选的,所述根据所述可收集对象的被引用状况在所述内存空间内建立表格,包括:
获取所述可收集对象的引用计数;
根据所述可收集对象的引用计数,建立所述可收集对象和所述引用计数的对应关系并以表格的形式存储于所述内存空间中。
可选的,所述根据所述表格确定不可达对象,包括:
将所述可收集对象所引用的可收集对象在所述表格中的引用计数均减一;
根据所述表格中减一后的引用计数确定不可达对象集合,并将所述不可达对象集合中的全部可收集对象确定为不可达对象。
可选的,所述根据所述表格中减一后的引用计数确定不可达对象集合,包括:
根据所述表格中减一后的引用计数和根对象确定不可达对象集合。
可选的,所述根据所述表格中减一后的引用计数和根对象确定不可达对象集合,包括:
根据所述表格中减一后的引用计数确定目标集合;
根据所述目标集合和根对象确定不可达对象集合。
可选的,所述根据所述表格中减一后的引用计数确定目标集合,包括:
将所述表格中减一后的引用计数为零的全部可收集对象确定为初始集合;
判断第一对象是否在所述初始集合中,所述第一对象为所述表格中减一后的引用计数不为零的可收集对象所引用的对象;
若所述第一对象在所述初始集合中,则将所述第一对象从所述初始集合中移除,以得到目标集合。
可选的,所述根据所述目标集合和根对象确定不可达对象集合,包括:
若所述目标集合中存在被根对象所引用的第二对象,则将所述第二对象从所述目标集合中移除;
将移除后的所述目标集合确定为不可达对象集合。
可选的,所述可收集对象包括年轻代回收对象、中年代回收对象和老年代回收对象,且所有所述年轻代回收对象存储在第一链表中,所述中年代回收对象存储在第二链表中,所述老年代回收对象存储在第三链表中,所述子进程获取可收集对象,包括:
获取所述第一链表的第一地址;
根据所述第一地址计算出第二链表的第二地址和所述第三链表的第三地址;
根据第一地址、第二地址和第三地址获取所述第一链表、第二链表、第三链表中的所有年轻代回收对象、中年代回收对象和老年代回收对象,以得到所有可收集对象。
可选的,所述对象处理方法还包括:
当所述父进程接收到所述不可达对象时,对所述不可达对象进行回收。
可选的,在所述子进程获取可收集对象,并向执行父进程的计算机设备申请不与所述父进程共享的内存空间之前,还包括:
以进行垃圾回收的应用程序为所述父进程,复刻生成一个所述子进程。
本申请实施例还提供一种对象处理装置,包括:
获取模块,用于子进程获取可收集对象,并向父进程申请独立于所述父进程所享内存空间的内存空间;
建表模块,用于根据所述可收集对象的被引用状况在所述内存空间内建立表格;
确定模块,用于根据所述表格确定不可达对象,并将所述不可达对象转发至所述父进程,以供所述父进程对所述不可达对象进行回收。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于处理器进行加载,以执行如上任一实施例所述的对象处理方法中的步骤。
本申请实施例还提供一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,执行如上任一实施例所述的对象处理方法中的步骤。
本申请实施例提供的对象处理方法、装置、存储介质及计算机设备,通过子进程向计算机设备申请额外的内存空间,而无需子进程与父进程共享同一内存空间,也就无需对对象头部进行写入,避免了由于写时拷贝导致的内存空间占用涨幅较大和内存空间占用率提高。且虽然子进程占用了额外的内存空间,但由于该内存空间相较写时拷贝时导致的内存空间占用的上涨量来说小很多,因此,该对象处理方法在整体上降低了在垃圾回收过程中子进程带来的内存空间占用的上涨量,减轻内存负担。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的对象处理装置的系统示意图。
图2为本申请实施例提供的对象处理方法的流程示意图。
图3为本申请实施例提供的表格的结构示意图。
图4为本申请实施例提供的对象引用关系示意图。
图5为本申请实施例提供的对象处理方法的另一流程示意图。
图6为本申请实施例提供的对象处理装置的结构示意图。
图7为本申请实施例提供的计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种对象处理方法、装置、存储介质及计算机设备。具体地,本申请实施例的对象处理方法可以由计算机设备执行,其中,该计算机设备可以为服务器。该服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。
请参阅图1,请参阅图1,图1为本申请实施例提供的对象处理装置的系统示意图。该系统可以包括一个计算机设备,该计算机设备上执行有至少一个应用程序时,当某应用程序启动垃圾回收机制时,以该应用程序的进程为父进程,复刻生成该父进程的子进程,之后该子进程向该计算机设备申请独立于父进程所享内存空间的内存空间,并获取可收集对象,接着子进程根据可收集对象的被引用状态在该独立于父进程所享内存空间的内存空间创建表格,然后根据该表格确定不可达对象,并将不可达对象发送至父进程,以供该父进程对不可达对象进行回收。
本申请实施例提供了一种对象处理方法,该方法可以由计算机设备执行。请参阅图2,图2为本申请实施例提供的对象处理方法的流程示意图,该方法主要可以包括步骤101至步骤103,说明如下:
步骤101:子进程获取可收集对象,并向执行父进程的计算机设备申请独立于父进程所享内存空间的内存空间。
为了便于理解,首先对现有的垃圾回收机制中的标记-擦除算法进行大致的解释。当某应用程序的垃圾回收机制被触发时,先以该应用程序为父进程,复刻生成一个子进程。容易理解的是,当复刻生成该子进程的时候,该子进程与父进程共享一个内存空间。之后,子进程设置gc.set_debug接口,以进行循环引用导致的内存泄露的检查。如果在开发时进行内存泄露检查,在发布时能够确保不会内存泄露,那么就可以延长Python的垃圾回收时间间隔,甚至主动关闭垃圾回收机制,从而提高运行效率。
接着,子进程调用gc.collect接口计算出所有的垃圾回收对象,Python为每个垃圾回收对象都会分配一个头部大小的内存用于垃圾回收计算,在计算过程中会修改所有垃圾回收对象的头部,由于写时拷贝技术,对垃圾回收对象进行写入时会引起内存的拷贝,而且拷贝的单位是一个内存页。具体地,垃圾回收对象的头部定义了垃圾回收对象的前后指针,可以通过修改前后指针自由的将垃圾回收对象移除或移入某个链表,垃圾回收对象的头部还设置了一个gc_refs字段,用来存放垃圾回收对象的引用次数。
之后,子进程遍历所有垃圾回收对象,对其引用的对象的gc_refs字段减1,若某垃圾回收对象减1后的gc_refs字段为0,则将该对象标记为可能不可达对象,并将其加入不可达链表,若某垃圾回收对象减1后的gc_refs字段不为0,则将其标记为可达对象,并将其引用的对象从不可达链表中移除。然后,再将不可达链表中__del__函数类型的对象也移除,至此,得到了所有的不可达对象。最后,对不可达处对象进行回收。
由此可见,在现有垃圾回收的过程中,会频繁的对垃圾回收对象的头部进行写入,例如,将垃圾回收对象移除或移入某个链表时,对该对象的头部进行了写入,再例如,修改gc_refs字段的值时,也对该对象的头部进行了写入。经过测试,这种大范围写入的方式,对于一个13.GB内存的服务器进程,带来的内存上涨量达到了6.8GB,内存涨幅达到了51.5%。
具体地,步骤101具体可以包括:子进程通过malloc函数向执行父进程的计算机设备申请一段不与父进程共享的内存空间。
具体地,上述独立于父进程所享内存空间的内存空间为不与父进程共享的内存空间。
具体地,在步骤101之前,还包括:以进行垃圾回收的应用程序为父进程,复刻生成一个子进程。
容易理解的是,从父进程复刻出来的子进程具有与父进程完全一样的数据,因此,可以使用子进程来对应用程序中的垃圾回收对象进行标记,以计算出应用程序中的内存垃圾。
在本实施例中,可收集对象包括年轻代回收对象、中年代回收对象和老年代回收对象,且所有年轻代回收对象存储在第一链表中,中年代回收对象存储在第二链表中,老年代回收对象存储在第三链表中,步骤“子进程获取可收集对象”主要可以包括:获取第一链表的第一地址;根据第一地址计算出第二链表的第二地址和第三链表的第三地址;根据第一地址、第二地址和第三地址获取第一链表、第二链表、第三链表中的所有年轻代回收对象、中年代回收对象和老年代回收对象,以得到所有可收集对象。
具体地,Python将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代,分别为年轻代(第0代)、中年代(第1代)、老年代(第2代),他们对应的是3个链表,它们的垃圾收集频率与对象的存活时间的增大而减小。新创建的对象都会分配在年轻代,年轻代的链表的总数达到上限时,Python垃圾回收机制就会被触发,把那些可以被回收的对象回收掉,而那些不会回收的对象就会被移到中年代去,依此类推,老年代中的对象是存活时间最久的对象,甚至是存活于整个系统的生命周期内。
其中,CPython将这三代维持在一个数组中,数组的长度为3,数组的第0个数据结构对应年轻代链表头的地址,数组的第1个数据结构对应中年代链表头的地址,数组的第2个数据结构对应老年代链表头的地址,当得到其中一个链表头的地址后,通过地址偏移,就可以得到其余2代链表头的地址了。由于CPython年轻代链表头的地址的地址是已知的,因此,可以通过年轻代链表头的地址进行偏移,计算出中年代和老年代链表头的地址。
步骤102:根据可收集对象的被引用状况在内存空间内建立表格。
其中,该内存空间的大小只与表格大小,即可收集对象的数量有关。
具体地,步骤102具体可以包括:获取可收集对象的引用计数;根据可收集对象的引用计数,建立可收集对象和引用计数的对应关系并以表格的形式存储于内存空间中。
其中,可收集对象和引用计数的对应关系为一一对应关系,由于在计算机语言中,所有对象都要通过内存地址来操作,因此可以通过建立可收集对象的内存地址与引用计数的对应关系来表示可收集对象和引用计数的对应关系,譬如,请参阅图3,图3为本申请实施例提供的表格的结构示意图,该表格包括两列:对象地址和引用计数,其中,每一个对象地址对应一个引用计数。
步骤103:根据表格确定不可达对象,并将不可达对象发送至父进程,以供父进程对不可达对象进行回收。
在本实施例中,步骤“根据表格确定不可达对象”主要可以包括:将可收集对象所引用的可收集对象在表格中的引用计数均减一;根据表格中减一后的引用计数确定不可达对象集合,并将不可达对象集合中的全部可收集对象确定为不可达对象。
为了便于理解,对不可达对象的定义进行解释,当一个对象与根对象之间没有任何引用链相连,则该对象为不可达对象。
容易理解的是,引用次数为0的可收集对象会被析构,因此,表格中的所有可收集对象的引用次数均不为0,然而,可收集对象中可能存在不是被根对象所引用的对象,即可收集对象中可能存在不可达对象,例如,存在对象A、B、C,它们构成循环引用关系:A引用B、B引用C、C引用A,它们的引用次数均为1,但均为不可达对象。因此,为了规避循环引用导致不可达对象不能被回收的情况发生,需要先将可收集对象的引用次数减一,再根据减一后的引用计数确定不可达对象。
具体地,步骤“根据表格中减一后的引用计数确定不可达对象集合”主要可以包括:根据表格中减一后的引用计数确定目标集合;根据目标集合和根对象确定不可达对象集合。
具体地,若可收集对象的引用计数为0,则说明该可收集对象未被任何地方所引用,因此可以被清理。但是,若该可收集对象直接被根对象引用,例如图4中的对象D和对象E,均只被根对象GC roots所引用,当引用计数减1时,虽然其引用计数为0,但由于从根对象GC roots出发可以找到对象D和对象E,因此,对象D和对象E仍然为可达对象,因此,应该结合目标集合和根对象进一步确定不可达对象。
具体地,步骤“根据表格中减一后的引用计数确定目标集合”包括:将表格中减一后的引用计数为零的全部可收集对象确定为初始集合;判断第一对象是否在初始集合中,第一对象为表格中减一后的引用计数不为零的可收集对象所引用的对象;若第一对象在初始集合中,则将第一对象从初始集合中移除,以得到目标集合。
容易理解的是,可以认为引用计数不为0的可收集对象仍被某些地方所引用,为了使引用计数不为0的可收集对象可以正常被引用,将引用计数不为0的可收集对象所引用的对象从初始集合中移除,以得到目标集合。
具体地,步骤“根据目标集合和根对象确定不可达对象集合”主要可以包括:若目标集合中存在被根对象所引用的第二对象,则将第二对象从目标集合中移除;将移除后的目标集合确定为不可达对象集合。
具体地,若该可收集对象直接被根对象引用,例如图4中的对象D和对象E,均只被根对象GC roots所引用,当引用计数减1时,虽然其引用计数为0,但由于从根对象GC roots出发可以找到对象D和对象E,因此,对象D和对象E仍然为可达对象,因此,需要将第二对象从目标集合中移除,再将移除后的目标集合确定为不可达对象集合。
在本实施例中,该对象处理方法还包括:当父进程接收到不可达对象时,对不可达对象进行回收。
上述所有的技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
本申请实施例提供的对象处理方法,通过子进程获取可收集对象,并向执行父进程的计算机设备申请不与父进程共享的内存空间;根据可收集对象的被引用状况在内存空间内建立表格;根据表格确定不可达对象,并将不可达对象发送至父进程,以供父进程对不可达对象进行回收,从而在整体上降低在垃圾回收过程中子进程带来的内存空间占用的上涨量,减轻内存负担
请参阅图5,图5为本申请实施例提供的对象处理方法的另一流程示意图,该方法主要可以包括步骤201至步骤205,说明如下:
步骤201:以进行垃圾回收的应用程序为父进程,复刻生成一个子进程。
容易理解的是,从父进程复刻出来的子进程具有与父进程完全一样的数据,因此,可以使用子进程来对应用程序中的垃圾回收对象进行标记,以计算出应用程序中的内存垃圾。
步骤202:子进程获取可收集对象,并向执行父进程的计算机设备申请不与父进程共享的内存空间。
步骤202的具体实施例可参见步骤101的实施例,在此不再赘述。
步骤203:根据可收集对象的被引用状况在内存空间内建立表格。
步骤203的具体实施可参见步骤102的实施例,在此不再赘述。
步骤204:根据表格确定不可达对象,并将不可达对象发送至父进程。
步骤204的具体实施可参见步骤103的实施例,在此不再赘述。
步骤205,当父进程接收到不可达对象时,对不可达对象进行回收。
上述所有的技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
本申请实施例提供的对象处理方法,以进行垃圾回收的应用程序为父进程,复刻生成一个子进程,之后,子进程获取可收集对象,并向执行父进程的计算机设备申请不与父进程共享的内存空间,并根据可收集对象的被引用状况在内存空间内建立表格,之后根据表格确定不可达对象,并将不可达对象发送至父进程当父进程接收到不可达对象时,对不可达对象进行回收,从而通过子进程对垃圾回收对象进行“标记”,且由于标记过程发生在不与父进程共享的内存空间中,也就无需对对象头部进行写入,避免了由于写时拷贝导致的内存空间占用涨幅较大和内存空间占用率提高,且虽然子进程占用了额外的内存空间,但由于该内存空间相较写时拷贝时导致的内存空间占用的上涨量来说小很多,之后通过父进程对垃圾回收对象进行回收,在整体上降低了在垃圾回收过程中子进程带来的内存空间占用的上涨量,减轻内存负担。
为便于更好的实施本申请实施例的对象处理方法,本申请实施例还提供一种对象处理装置。请参阅图6,图6为本申请实施例提供的对象处理装置的结构示意图。该对象处理装置10可以包括获取模块11,建表模块12以及确定模块13。
其中,获取模块11,用于子进程获取可收集对象,并向父进程申请独立于父进程所享内存空间的内存空间;
建表模块12,用于根据可收集对象的被引用状况在内存空间内建立表格;
确定模块13,用于根据表格确定不可达对象,并将不可达对象转发至父进程,以供父进程对不可达对象进行回收。
在一些实施例中,建表模块12具体可以用于:获取可收集对象的引用计数;根据可收集对象的引用计数,建立可收集对象和引用计数的对应关系并以表格的形式存储于内存空间中。
具体地,确定模块13具体可以用于:将可收集对象所引用的可收集对象在表格中的引用计数均减一;根据表格中减一后的引用计数确定不可达对象集合,并将不可达对象集合中的全部可收集对象确定为不可达对象。
进一步地,确定模块13具体可以用于:根据表格中减一后的引用计数和根对象确定不可达对象集合。
进一步地,确定模块13具体可以用于:根据表格中减一后的引用计数确定目标集合;根据目标集合和根对象确定不可达对象集合。
具体地,确定模块13具体可以用于:将表格中减一后的引用计数为零的全部可收集对象确定为初始集合;判断第一对象是否在初始集合中,第一对象为表格中减一后的引用计数不为零的可收集对象所引用的对象;若第一对象在初始集合中,则将第一对象从初始集合中移除,以得到目标集合。
具体地,确定模块13具体可以用于:若目标集合中存在被根对象所引用的第二对象,则将第二对象从目标集合中移除;将移除后的目标集合确定为不可达对象集合。
具体地,可收集对象包括年轻代回收对象、中年代回收对象和老年代回收对象,且所有年轻代回收对象存储在第一链表中,中年代回收对象存储在第二链表中,老年代回收对象存储在第三链表中,获取模块11主要可以用于:获取第一链表的第一地址;根据第一地址计算出第二链表的第二地址和第三链表的第三地址;根据第一地址、第二地址和第三地址获取第一链表、第二链表、第三链表中的所有年轻代回收对象、中年代回收对象和老年代回收对象,以得到所有可收集对象。
在一些实施例中,对象处理装置11还可以包括回收模块,用于:当父进程接收到不可达对象时,对不可达对象进行回收。
在一些实施例中,对象处理装置11还可以包括复刻模块,用于在子进程获取可收集对象,并向执行父进程的计算机设备申请不与父进程共享的内存空间之前,以进行垃圾回收的应用程序为父进程,复刻生成一个子进程。
上述所有的技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
本申请实施例提供的对象处理装置10,子进程通过获取模块11获取可收集对象,并向父进程申请独立于父进程所享内存空间的内存空间,然后,建表模块12根据可收集对象的被引用状况在内存空间内建立表格,之后,确定模块13根据表格确定不可达对象,并将不可达对象转发至父进程,以供父进程对不可达对象进行回收,从而在整体上降低了在垃圾回收过程中子进程带来的内存空间占用的上涨量,减轻内存负担。
相应的,本申请实施例还提供一种计算机设备,该计算机设备可以为终端或者服务器,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(PC,Personal Computer)、个人数字助理(Personal Digital Assistant,PDA)等终端设备。如图7所示,图7为本申请实施例提供的计算机设备的结构示意图。该计算机设备400包括有一个或者一个以上处理核心的处理器401、有一个或一个以上计算机可读存储介质的存储器402及存储在存储器402上并可在处理器上运行的计算机程序。其中,处理器401与存储器402电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
处理器401是计算机设备400的控制中心,利用各种接口和线路连接整个计算机设备400的各个部分,通过运行或加载存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行计算机设备400的各种功能和处理数据,从而对计算机设备400进行整体监控。
在本申请实施例中,计算机设备400中的处理器401会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能:
子进程获取可收集对象,并向执行父进程的计算机设备申请独立于父进程所享内存空间的内存空间;根据可收集对象的被引用状况在内存空间内建立表格;根据表格确定不可达对象,并将不可达对象发送至父进程,以供父进程对不可达对象进行回收。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
可选的,如图7所示,计算机设备400还包括:触控显示屏403、射频电路404、音频电路405、输入单元406以及电源407。其中,处理器401分别与触控显示屏403、射频电路404、音频电路405、输入单元406以及电源407电性连接。本领域技术人员可以理解,图7中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
触控显示屏403可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏403可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-EmittingDiode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器401,并能接收处理器401发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器401以确定触摸事件的类型,随后处理器401根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏403而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏403也可以作为输入单元406的一部分实现输入功能。
在本申请实施例中,通过处理器401执行游戏应用程序在触控显示屏403上生成图形用户界面,图形用户界面上的虚拟场景中包含至少一个技能控制区域,技能控制区域中包含至少一个技能控件。该触控显示屏403用于呈现图形用户界面以及接收用户作用于图形用户界面产生的操作指令。
射频电路404可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。
音频电路405可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路405可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路405接收后转换为音频数据,再将音频数据输出处理器401处理后,经射频电路404以发送给比如另一计算机设备,或者将音频数据输出至存储器402以便进一步处理。音频电路405还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。
输入单元406可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
电源407用于给计算机设备400的各个部件供电。可选的,电源407可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源407还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管图7中未示出,计算机设备400还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
由上可知,本实施例提供的计算机设备,子进程通过获取可收集对象,并向执行父进程的计算机设备申请独立于父进程所享内存空间的内存空间;根据可收集对象的被引用状况在内存空间内建立表格;根据表格确定不可达对象,并将不可达对象发送至父进程,以供父进程对不可达对象进行回收,从而在整体上降低在垃圾回收过程中子进程带来的内存空间占用的上涨量,减轻内存负担。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种对象处理方法中的步骤。例如,该计算机程序可以执行如下步骤:
子进程获取可收集对象,并向执行父进程的计算机设备申请独立于父进程所享内存空间的内存空间;根据可收集对象的被引用状况在内存空间内建立表格;根据表格确定不可达对象,并将不可达对象发送至父进程,以供父进程对不可达对象进行回收。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种对象处理方法中的步骤,因此,可以实现本申请实施例所提供的任一种对象处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种对象处理方法、装置、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (13)
1.一种对象处理方法,其特征在于,包括:
子进程获取可收集对象,并向执行父进程的计算机设备申请独立于所述父进程所享内存空间的内存空间;
根据所述可收集对象的被引用状况在所述内存空间内建立表格;
根据所述表格确定不可达对象,并将所述不可达对象发送至所述父进程,以供所述父进程对所述不可达对象进行回收。
2.如权利要求1所述的对象处理方法,其特征在于,所述根据所述可收集对象的被引用状况在所述内存空间内建立表格,包括:
获取所述可收集对象的引用计数;
根据所述可收集对象的引用计数,建立所述可收集对象和所述引用计数的对应关系并以表格的形式存储于所述内存空间中。
3.如权利要求2所述的对象处理方法,其特征在于,所述根据所述表格确定不可达对象,包括:
将所述可收集对象所引用的可收集对象在所述表格中的引用计数均减一;
根据所述表格中减一后的引用计数确定不可达对象集合,并将所述不可达对象集合中的全部可收集对象确定为不可达对象。
4.如权利要求3所述的对象处理方法,其特征在于,所述根据所述表格中减一后的引用计数确定不可达对象集合,包括:
根据所述表格中减一后的引用计数和根对象确定不可达对象集合。
5.如权利要求4所述的对象处理方法,其特征在于,所述根据所述表格中减一后的引用计数和根对象确定不可达对象集合,包括:
根据所述表格中减一后的引用计数确定目标集合;
根据所述目标集合和根对象确定不可达对象集合。
6.如权利要求5所述的对象处理方法,其特征在于,所述根据所述表格中减一后的引用计数确定目标集合,包括:
将所述表格中减一后的引用计数为零的全部可收集对象确定为初始集合;
判断第一对象是否在所述初始集合中,所述第一对象为所述表格中减一后的引用计数不为零的可收集对象所引用的对象;
若所述第一对象在所述初始集合中,则将所述第一对象从所述初始集合中移除,以得到目标集合。
7.如权利要求5所述的对象处理方法,其特征在于,所述根据所述目标集合和根对象确定不可达对象集合,包括:
若所述目标集合中存在被根对象所引用的第二对象,则将所述第二对象从所述目标集合中移除;
将移除后的所述目标集合确定为不可达对象集合。
8.如权利要求1所述的对象处理方法,其特征在于,所述可收集对象包括年轻代回收对象、中年代回收对象和老年代回收对象,且所有所述年轻代回收对象存储在第一链表中,所述中年代回收对象存储在第二链表中,所述老年代回收对象存储在第三链表中,所述子进程获取可收集对象,包括:
获取所述第一链表的第一地址;
根据所述第一地址计算出第二链表的第二地址和所述第三链表的第三地址;
根据第一地址、第二地址和第三地址获取所述第一链表、第二链表、第三链表中的所有年轻代回收对象、中年代回收对象和老年代回收对象,以得到所有可收集对象。
9.如权利要求1所述的对象处理方法,其特征在于,所述对象处理方法还包括:
当所述父进程接收到所述不可达对象时,对所述不可达对象进行回收。
10.如权利要求1所述的对象处理方法,其特征在于,在所述子进程获取可收集对象,并向执行父进程的计算机设备申请不与所述父进程共享的内存空间之前,还包括:
以进行垃圾回收的应用程序为所述父进程,复刻生成一个所述子进程。
11.一种对象处理装置,其特征在于,包括:
获取模块,用于子进程获取可收集对象,并向父进程申请独立于所述父进程所享内存空间的内存空间;
建表模块,用于根据所述可收集对象的被引用状况在所述内存空间内建立表格;
确定模块,用于根据所述表格确定不可达对象,并将所述不可达对象转发至所述父进程,以供所述父进程对所述不可达对象进行回收。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于处理器进行加载,以执行如权利要求1至10任一项所述的对象处理方法中的步骤。
13.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,执行如权利要求1至10任一项所述的对象处理方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011440453.8A CN114625522A (zh) | 2020-12-10 | 2020-12-10 | 对象处理方法、装置、存储介质及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011440453.8A CN114625522A (zh) | 2020-12-10 | 2020-12-10 | 对象处理方法、装置、存储介质及计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114625522A true CN114625522A (zh) | 2022-06-14 |
Family
ID=81895069
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011440453.8A Pending CN114625522A (zh) | 2020-12-10 | 2020-12-10 | 对象处理方法、装置、存储介质及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114625522A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117891616A (zh) * | 2024-03-15 | 2024-04-16 | 腾讯科技(深圳)有限公司 | 应用程序的垃圾回收方法、装置、设备及存储介质 |
-
2020
- 2020-12-10 CN CN202011440453.8A patent/CN114625522A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117891616A (zh) * | 2024-03-15 | 2024-04-16 | 腾讯科技(深圳)有限公司 | 应用程序的垃圾回收方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108984064B (zh) | 分屏显示方法、装置、存储介质和电子设备 | |
CN109062464B (zh) | 触控操作方法、装置、存储介质和电子设备 | |
US20170109756A1 (en) | User Unsubscription Prediction Method and Apparatus | |
CN109062468B (zh) | 分屏显示方法、装置、存储介质和电子设备 | |
CN106708554A (zh) | 程序运行方法及装置 | |
CN109144723B (zh) | 一种分配存储空间的方法和终端 | |
CN115237618A (zh) | 请求处理方法、装置、计算机设备及可读存储介质 | |
WO2021254200A1 (zh) | 操作系统内存回收的页颠簸保护方法及装置 | |
CN114625522A (zh) | 对象处理方法、装置、存储介质及计算机设备 | |
CN109062469B (zh) | 分屏显示方法、装置、存储介质和电子设备 | |
CN109408116A (zh) | 一种业务标识获取方法、装置、设备及存储介质 | |
WO2022016650A1 (zh) | 智能笔图像处理方法、装置及电子设备 | |
EP3699731A1 (en) | Method and device for calling input method, and server and terminal | |
CN114092608B (zh) | 表情的处理方法及装置、计算机可读存储介质、电子设备 | |
CN115718578A (zh) | 批注绘制方法、装置、终端设备和存储介质 | |
CN114385368A (zh) | 预写日志的刷写方法和装置 | |
CN112138397A (zh) | 一种触发器管理方法、装置、计算机设备和存储介质 | |
CN109358755B (zh) | 用于移动终端的手势检测方法、装置和移动终端 | |
CN112783860A (zh) | 构造镜像数据库的方法、装置、存储介质及计算机设备 | |
CN114416234B (zh) | 一种页面切换方法、装置、计算机设备及存储介质 | |
CN113419795B (zh) | 调用关系的展示方法、装置、计算机设备及存储介质 | |
CN117241090B (zh) | 一种视频流中目标区域的信息生成方法和装置 | |
CN112256197B (zh) | 一种存储信息的管理方法、装置、设备及存储介质 | |
WO2024094118A1 (zh) | 点云数据处理方法、装置、电子设备及存储介质 | |
CN114911691A (zh) | 一种应用调试方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |