一种自动释放内存方法、装置、计算机设备和存储介质

文档序号:152977 发布日期:2021-10-26 浏览:17次 >En<

阅读说明:本技术 一种自动释放内存方法、装置、计算机设备和存储介质 (Method and device for automatically releasing memory, computer equipment and storage medium ) 是由 翁轩锴 于 2021-07-14 设计创作,主要内容包括:本申请实施例公开了一种自动释放内存方法、装置、计算机设备和存储介质;本申请实施例可以获取多个实例化对象;从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;识别目标实例化对象的引用路径,得到引用对象;根据目标实例化对象和引用对象之间的引用关系,对引用路径上的引用对象进行减引用操作,并更新目标实例化对象的引用参数和引用对象的引用参数;对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果;根据判别结果,对目标实例化对象以及所述引用对象进行回收处理,以实现对内存的释放,提高了对内存释放的效率。(The embodiment of the application discloses a method and a device for automatically releasing a memory, computer equipment and a storage medium; the method and the device for obtaining the instantiation objects can obtain a plurality of instantiation objects; determining a reference relation type as a target instantiation object of a preset reference relation type from a plurality of instantiation objects; identifying a reference path of a target instantiation object to obtain a reference object; according to the reference relation between the target instantiation object and the reference object, performing dereferencing operation on the reference object on the reference path, and updating the reference parameters of the target instantiation object and the reference parameters of the reference object; judging the updated reference parameters of the target instantiation object and the updated reference parameters of the reference object to obtain a judgment result; and according to the judgment result, recycling the target instantiation object and the reference object so as to release the memory and improve the efficiency of releasing the memory.)

一种自动释放内存方法、装置、计算机设备和存储介质

技术领域

本申请涉及通讯技术领域,具体涉及一种自动释放内存方法、装置、计算机设备和存储介质。

背景技术

内存(Memory)是计算机设备的重要部件之一,也称为内存储器和主存储器,用于暂时存放中央处理器(CentralProcessingUnit,CPU)中的运算数据,与硬盘等外部存储器交换的数据。内存是外存与CPU进行沟通的桥梁,计算机设备中所有程序的运行都在内存中进行,内存性能的强弱影响计算机设备整体发挥的水平。例如,当计算机设备中运行程序的实例化对象存在循环引用的情况时,会导致计算机设备中的内存不足,从而使得计算机设备的整体性能下降,并使得计算机设备中的应用程序出现卡顿的现象。在对现有技术的研究和实践过程中,本发明的发明人发现,现有技术都是借助人工手段对计算机设备中的内存垃圾进行识别以及释放,这将降低内存释放的效率。

发明内容

本申请实施例提出了一种自动释放内存方法、装置、计算机设备和存储介质,可以实现对内存的自动释放,从而提高对内存释放的效率。

本申请实施例提供了一种自动释放内存方法,包括:

获取多个实例化对象;

从所述多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;

识别所述目标实例化对象的引用路径,所述引用路径包括与所述目标实例化对象存在引用关系的至少一个引用对象;

根据所述目标实例化对象和所述引用对象之间的引用关系,对所述引用路径上的引用对象进行减引用操作,并更新所述目标实例化对象的引用参数和所述引用对象的引用参数;

对所述目标实例化对象的更新后引用参数以及所述引用对象的更新后引用参数进行判别处理,得到判别结果;

根据所述判别结果,对所述目标实例化对象以及所述引用对象进行回收处理,以实现对内存的释放。

相应的,本申请实施例还提供了一种自动释放内存装置,包括:

获取单元,用于获取多个实例化对象;

确定单元,用于从所述多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;

识别单元,用于识别所述目标实例化对象的引用路径,所述引用路径包括与所述目标实例化对象存在引用关系的至少一个引用对象;

减引用操作单元,用于根据所述目标实例化对象和所述引用对象之间的引用关系,对所述引用路径上的引用对象进行减引用操作,并更新所述目标实例化对象的引用参数和所述引用对象的引用参数;

判别处理单元,用于对所述目标实例化对象的更新后引用参数以及所述引用对象的更新后引用参数进行判别处理,得到判别结果;

回收处理单元,用于根据所述判别结果,对所述目标实例化对象以及所述引用对象进行回收处理,以实现对内存的释放。

在一实施例中,所述减引用操作单元,包括:

筛选子单元,用于根据所述目标实例化对象和所述引用对象之间的引用关系,在至少一个引用对象中筛选出和所述目标实例化对象之间存在直接引用关系的直接引用对象,以及和所述目标实例化对象之间存在间接引用关系的间接引用对象;

减引用操作子单元,用于根据所述直接引用关系,对所述引用路径上的直接引用对象进行减引用操作,并更新所述直接引用对象的引用参数;

识别子单元,用于对所述间接引用对象进行识别,得到所述间接引用对象的数量;

更新子单元,用于根据所述间接引用对象的数量,更新所述目标实例化对象的引用参数和所述间接引用对象的引用参数。

在一实施例中,所述更新子单元,包括:

判别处理模块,用于将所述间接引用对象的数量和预设数量判别条件进行判别处理;

更新模块,用于当所述间接引用对象的数量不符合预设数量判别条件时,对所述间接引用对象进行减引用操作,并更新所述间接引用对象的引用参数和所述目标实例化对象的引用参数。

在一实施例中,所述减引用操作子单元,包括:

删除模块,用于根据所述直接引用关系,删除目标实例化对象和所述直接引用对象之间的直接引用路径;

信息发送模块,用于向所述直接引用对象发送引用释放信息,以使得所述直接引用对象根据所述引用释放信息更新所述引用参数。

在一实施例中,所述判别处理单元,包括:

访问子单元,用于根据引用路径,对所述目标实例化对象和所述引用对象进行访问,得到当前访问对象的更新后引用参数;

匹配子单元,用于将当前访问对象的更新后引用参数和预设引用参数阈值进行匹配;

添加子单元,用于当所述更新后引用参数和所述预设引用参数阈值相匹配时,对所述当前访问对象添加回收标识。

在一实施例中,所述回收处理单元,包括:

识别子单元,用于对所述目标实例化对象以及所述引用对象进行识别,得到所述目标实例化对象的标识信息和所述引用对象的标识信息;

匹配子单元,用于分别将所述目标实例化对象的标识信息和所述引用对象的标识信息和预设回收标识进行匹配;

第一回收处理子单元,用于当所述目标实例化对象的标识信息和所述预设回收标识相匹配时,将所述目标实例化对象进行对象回收处理;

第二回收处理子单元,用于当所述引用对象的标识信息和所述预设回收标识相匹配时,将所述引用对象进行对象回收处理。

本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述一方面的各种可选方式中提供的方法。

相应的,本申请实施例还提供一种存储介质,所述存储介质存储有指令,所述指令被处理器执行时实现本申请实施例任一提供的自动释放内存方法。

本申请实施例可以获取多个实例化对象;从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;识别目标实例化对象的引用路径,得到引用对象;根据目标实例化对象和引用对象之间的引用关系,对引用路径上的引用对象进行减引用操作,并更新目标实例化对象的引用参数和引用对象的引用参数;对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果;根据判别结果,对目标实例化对象以及所述引用对象进行回收处理,以实现对内存的释放,提高了对内存释放的效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的自动释放内存方法的场景示意图;

图2是本申请实施例提供的自动释放内存方法的流程图;

图3是本申请实施例提供的类的场景示意图;

图4是本申请实施例提供的对象实例化的场景示意图;

图5是本申请实施例提供的对象引用的场景示意图;

图6是本申请实施例提供的直接引用类型的实例化对象的场景示意图;

图7是本申请实施例提供的循环引用类型的实例化对象的场景示意图;

图8是本申请实施例提供的循环引用类型的实例化对象的又一场景示意图;

图9是本申请实施例提供的混合引用类型的实例化对象的场景示意图;

图10是本申请实施例提供的自动释放内存方法的又一场景示意图;

图11是本申请实施例提供的自动释放内存方法的又一场景示意图;

图12是本申请实施例提供的自动释放内存方法的又一场景示意图;

图13是本申请实施例提供的自动释放内存方法的又一场景示意图;

图14是本申请实施例提供的自动释放内存方法的又一流程示意图;

图15是本申请实施例提供的自动释放内存方法的又一流程示意图;

图16是本申请实施例提供的自动释放内存方法的又一流程示意图;

图17是本申请实施例提供的自动释放内存装置的结构示意图;

图18是本申请实施例提供的终端的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,然而,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例提出了一种自动释放内存装置,该自动释放内存装置可以集成在计算机设备,该计算机设备可以包括终端以及服务器等中的至少一个。其中,终端可以为智能手机、平板电脑、笔记本电脑、个人电脑(PersonalComputer,PC)、智能家居、可穿戴计算机设备、VR/AR设备、车载计算机等等。服务器可以为多个异构系统之间的互通服务器或者内容交互系统的后台服务器,还可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、以及大数据和人工智能平台等基础云计算服务的云服务器等等。

例如,如图1所述,自动释放内存装置可以集成在终端或服务器等计算机设备上。其中,该自动释放内存装置可以自动地对计算机设备中的内存垃圾进行释放,不需要繁重且效果不稳定的人工内存测试,可以提高对内存释放的效率。因此,集成了该自动释放内存装置后的计算机设备可以自动地对计算机设备中的内存垃圾进行检测,从而实现对内存的释放。具体地,获取多个实例化对象;从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;识别目标实例化对象的引用路径,引用路径包括与目标实例化对象存在引用关系的至少一个引用对象;根据目标实例化对象和引用对象之间的引用关系,对引用路径上的引用对象进行减引用操作,并更新目标实例化对象的引用参数和引用对象的引用参数;对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果;根据判别结果,对目标实例化对象以及引用对象进行回收处理,以实现对内存的释放。

以下分别进行详细说明,需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。

本申请实施例将从自动释放内存装置的角度进行描述,该自动释放内存装置可以集成在计算机设备中,该计算机设备可以是服务器,也可以是终端等设备。

如图2所述,提供了一种自动释放内存方法,具体流程包括:

101、获取多个实例化对象。

其中,对象包括面向对象编程中基本的运行实体,其包括了解决问题的方法和相关数据。

其中,面向对象编程是以建立模型体现出来的抽象思维过程和面向对象的方法。其中,模型是用来反映现实世界中事物特征的。任何一个模型都可以反映客观事物的具体特征,是对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。

早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2=4,通过设计一个算法就可以解决当时的问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。

其中,类定义了特定一类对象共有的变量(或属性)和方法(或函数),它是一种逻辑组件。

简单来说,类是开发人员在编程过程中定义的数据类型,对象是类的变量。例如,人类是一个类,而人类中的每一个人可以是一个对象。

其中,实例化对象包括占用实际内存空间的对象。

在一实施例中,在程序开发的过程中,在编程中定义的类只是一个类的模板,没有在内存中实际产生一个类的实例化对象,也没有分配内存空间。若想要在内存中产生一个类的实例化对象就需要编程虚拟机利用关键字信息申请分配内存空间,并根据类的构造方法提供申请空间的大小规格,从而在内存中产生类的一个实例化对象。有了内存空间之后,便可以向该内存空间存放定义的数据以及进行方法的调用。

102、从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象。

在一实施例中,在创建了实例化对象之后,需要对对象进行引用了之后,才可以利用对象执行相应的方法。

例如,如图3所示,定义了一个简单的类“Vehicle”。然后,可以利用这个“Vehicle”的类来创建对象并对该对象进行引用,例如,如图4所示。

其中,图中的“newVehicle”是以Vehicle类为模板,在堆空间里创建一个Vehicle类对象。而末尾的()意味着,在对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。

其中,图中的“Vehicleveh1”创建了一个Vehicle类引用变量,即以后可以用来指向Vehicle对象的对象引用。而操作符“=”使得对象引用指向刚创建的Vehicle对象的对象引用。

在一实施例中,由于一般是在堆空间中创建实例化对象,但是在堆空间里创建的实体,与在数据段以及栈空间里创建的实体不同。尽管它们都是存在的实体,但是我们看不见也摸不着。

例如,如果只创建Vehicle类的一个对象,而不对它进行引用的话,执行语句“newVehicle()”便可以实现。但是,此时,“newVehicle()”这个对象并不能对它进行使用。而通过对“newVehicle()”这个对象添加引用变量“veh1”,才可以使用这个对象。

为了更形象地说明,可以将对比作一个巨大的气球,大到我们抓不住它。而引用变量就好比一根绳子,可以用来系气球,从而使得我们可以通过这根绳子对气球进行控制和使用。

在一实施例中,在对实例化对象进行引用时,还存在实例化对象引用实例化对象的情况。例如,如图5所示,“Vehicleveh1=newVehicle()”表示veh1指向第一个引用对象,“Vehicleveh2=newVehicle()”表示veh2指向第二个引用对象,veh1=veh2表示veh1也指向了第一个引用对象。

在一实施例中,不同的实例化对象之间可能具有不同的引用方式,所以不同的实例化对象可能具有不同的引用关系类型。

例如,实例化对象之间的引用方式可以包括单一引用方式、循环引用方式和混合引用方式,等等。而引用关系类型可以包括单一引用类型、循环引用类型和混合引用类型等等。

譬如,当实例化对象之间是采取单一引用的方式进行引用时,实例化对象的引用关系类型为单一引用类型。例如,如图6所示,在图中只有实例化对象1021引用实例化对象1022,所以实例化对象1021和实例化对象1022都是单一引用类型。

又譬如,当实例化对象之间是采用循环引用的方式进行引用时,实例化对象的引用关系类型为循环引用类型。例如,如图7所示,图中实例化对象1023引用了实例化对象1024,实例化对象1024也引用了实例化对象1023,两者之间构成了循环引用的关系,因此,实例化对象1023和实例化对象1024的引用关系类型为循环引用类型。又譬如,如图8所示,图中的三个实例化对象之间也构成了循环引用的关系,因此三个实例化对象的引用关系类型也为循环引用类型。

又譬如,如图9所示,实例化对象1025和实例化对象1026之间构成了循环引用的关系,而实例化对象1025和实例化对象1027之间构成了单一引用的关系,所以实例化对象1025的引用关系类型为混合引用类型。

在一实施例中,可以利用引用参数说明实例化对象的引用情况。其中,引用参数包括可以说明实例化对象的引用情况的参数。例如,引用参数可以包括实例化对象的引用计数、引用频率,等等。

其中,引用计数(ReferenceCounting,RC)是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。使用引用计数技术可以实现自动资源管理的目的。

例如,当实例化对象的引用计数为1时,说明实例化对象的被引用次数为1。

在一实施例中,由于循环引用类型的实例化对象之间存在互相引用的关系,因此他们的引用计数无法降为0。当实例化对象的引用计数无法降为0时,便不能被回收,久而久之,便会成为内存垃圾,导致电子设备的内存不足。

例如,如图6所示,若实例化对象1021想要释放内存,在需要实例化对象1021的引用计数为0。而实例化对象1022持有实例化对象1021,所以想要实例化对象1021的引用计数为0,需要实例化对象1022发送释放消息到实例化对象1021。而实例化对象1022只有到释放时才会发送释放消息到实例化对象1021,并且释放内存也需要实例化对象1021发送释放消息给实例化对象1022。这样,实例化对象1021和实例化对象1022都在相互等待对方的释放消息,造成循环引用,内存无法释放。

因此,预设引用关系类型可以包括存在循环引用的实例化对象的类型。例如,预设引用关系类型可以为循环引用类型。又例如,预设引用关系类型可以为循环引用类型和混合引用类型,等等。

在一实施例中,当预设引用关系类型为循环引用类型和混合引用类型时,可以从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象。

例如,可以对每个实例化对象都进行一次减引用操作,并更新实例化对象的引用参数,得到实例化对象的更新后引用参数。然后,将实例化对象的更新后引用参数和预设引用参数进行匹配。当更新后引用参数和预设引用参数相匹配时,说明实例化对象不是目标实例化对象。而当更新后引用参数和预设引用参数不相匹配时,说明实例化对象是目标实例化对象。

其中,减引用操作包括解除实例化对象之间的引用关系的操作。例如,当给实例化对象发送释放消息时,实例化对象便会和其它实例化对象解除引用关系,从而实现了减引用。

在一实施例中,为了更清楚地描述本申请实施例提出的自动释放内存方法,可以将所有的实例化节点都划分为四个状态,分别是初始状态、疑似状态、标记中状态和回收状态。

其中,初始状态可以包括未实施例本申请实施例提出的自动释放内存方法之前,实例化对象的状态。疑似状态可以包括实例化对象可能为目标实例化对象的状态。标记中状态可以包括对目标实例化对象进行操作的状态。例如,当对目标实例化对象进行减引用操作并更新引用参数时,该目标实例化对象便为标记中状态,回收状态包括可以进行回收的实例化对象的状态。

在一实施例中,在从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象时,每个实例化对象都可以为初始状态,例如,如图10所示。在图10中,实例化对象包括实例化对象A、实例化对象B、实例化对象C、实例化对象D、实例化对象E、实例化对象F以及其它实例化对象。

其中,实例化对象旁别的数字可以表示实例化对象当前的引用参数。例如,该引用参数可以是引用计数。例如,实例化对象A的引用计数为2,实例化对象B的引用计数为1。

在确定引用关系类型为预设引用关系类型的目标实例化对象时,可以对其中一个实例化对象进行减引用操作。例如,可以删除其它实例化对象对实例化对象A的引用,然后实例化对象A便会进行一次减引用操作,并更新其引用计数为1。

接下来,可以将实例化对象A的引用参数和预设引用参数进行匹配。例如,将实例化对象A的引用计数和0进行匹配,由于实例化对象A的引用计数和0不相匹配,所以实例化对象A有可能是目标实例化对象。此时,将实例化对象A确定为目标实例化对象并将实例化对象A的状态标记为疑似状态。

在一实施例中,在确定了目标实例化对象之后,可以将目标实例化对象添加到待处理存储容器中,以便于后续的处理。

例如,如图11所示,在将实例化对象A确定为目标实例化对象之后,可以将实例化对象A添加到待处理存储容器中,便于后续的处理。

通过上述的方式,便可以从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象。

103、识别目标实例化对象的引用路径,引用路径包括与目标实例化对象存在引用关系的至少一个引用对象。

在一实施例中,在确定了目标实例化对象之后,可以识别目标实例化对象的引用路径,其中,引用路径包括与目标实例化存在引用关系的至少一个引用对象,从而根据引用路径确定目标实例化对象的引用对象。

其中,引用对象包括和目标实例化对象存在引用关系的实例化对象。例如,如图11所示,目标实例化对象A和实例化对象B之间存在引用关系,所以实例化对象B是目标实例化对象A的引用对象,即目标实例化对象A引用了实例化对象B。又例如,目标实例化对象A和实例化对象C之间存在引用关系,所以实例化对象C是目标实例化对象A的引用对象。

其中,引用路径包括由目标实例化对象和引用对象之间的引用关系构成的路径。例如,如图11所示,目标实例化对象A、引用对象B、引用对象C三者之间构成一条引用路径。又例如,如图11所示,目标实例化对象A、引用对象B、引用对象C、引用对象E和引用对象F又构成了另一条引用路径。又例如,目标实例化对象A和引用对象B之间也构成了一条引用路径。

通过对目标实例化对象的引用路径进行识别,可以得到和目标实例化对象存在引用关系的引用对象。

104、根据目标实例化对象和引用对象之间的引用关系,对引用路径上的引用对象进行减引用操作,并更新目标实例化对象的引用参数和引用对象的引用参数。

在一实施例中,根据目标实例化对象和引用对象之间的引用关系,可以将目标实例化对象的引用对象划分为直接引用对象和间接引用对象。

其中,直接引用对象包括和目标实例化对象之间存在直接引用关系的对象。例如,如图11所示,目标实例化对象A和引用对象B之间直接构成引用路径,所以,目标实例化对象A和引用对象B之间存在直接引用关系,引用对象B是目标实例化对象A的直接引用对象。

其中,间接引用对象包括和目标实例化对象之间存在间接引用关系的对象。例如,如图11所示,引用对象C是通过引用对象B和目标实例化对象A构成了引用关系,引用对象C并没有和目标实例化对象A直接构成直接引用路径,而是通过引用对象B和目标实例化对象A间接地构成引用路径,因此,目标实例化对象A和引用对象C之间存在间接引用关系,引用对象C是目标实例化对象A的间接引用对象。

在一实施例中,在对引用路径上的引用对象进行减引用操作,并更新目标实例化对象的引用参数和引用对象的引用参数时,可以在至少一个引用对象中筛选出直接引用对象和间接引用对象,从而分别对直接引用对象和间接引用对象进行减引用操作。具体的,步骤“根据目标实例化对象和引用对象之间的引用关系,对引用路径上的引用对象进行减引用操作,并更新目标实例化对象的引用参数和引用对象的引用参数”,可以包括:

根据目标实例化对象和引用对象之间的引用关系,在至少一个引用对象中筛选出和目标实例化对象之间存在直接引用关系的直接引用对象,以及和目标实例化对象之间存在间接引用关系的间接引用对象;

根据直接引用关系,对引用路径上的直接引用对象进行减引用操作,并更新直接引用对象的引用参数;

对间接引用对象进行识别,得到间接引用对象的数量;

根据间接引用对象的数量,更新目标实例化对象的引用参数和间接引用对象的引用参数。

其中,在筛选直接引用对象和间接引用对象时,可以依据引用路径筛选出直接引用对象和间接引用对象。例如,如图11所示,识别到目标实例化对象A和引用对象B之间直接存在着引用路径,所以可以将引用对象B划分为直接引用对象,然后将其它引用对象划分为间接引用对象。

在一实施例中,在筛选出直接引用对象之后,可以根据目标实例化对象和直接引用对象之间的直接引用关系,对引用路径上的直接引用对象进行减引用操作,并更新直接引用对象的引用参数。

例如,如图12所示,在引用对象中筛选出直接引用对象B,其中,直接引用对象B的原来的引用计数为1。然后,可以对直接引用对象B进行减引用操作,并更新直接引用对象B的引用计数,从而得到直接引用对象更新后引用计数0。

又例如,当在引用对象中筛选出多个直接引用对象时,可以依次对直接引用对象进行减引用操作,并更新减引用操作的引用参数。

又例如,当在引用对象中筛选出多个直接引用对象时,可以从多个直接引用对象中筛选出其中一个目标直接引用对象,然后沿着目标直接引用对象所在的引用路径,对目标直接引用对象及其该引用路径上的其它引用对象进行减引用操作并更新引用参数之后,再对其它引用路径上的直接引用对象和其它引用对象进行减引用操作和更新引用参数。

在一实施例中,在根据直接引用关系,对引用路径上的直接引用对象进行减引用操作,并更新直接引用对象的引用参数时,可以根据直接引用关系,删除目标实例化对象和直接引用对象之间的之间引用路径,然后,直接引用对象便可以更新自身的参数。具体的,步骤“根据直接引用关系,对引用路径上的直接引用对象进行减引用操作,并更新直接引用对象的引用参数”,可以包括:

根据直接引用关系,删除目标实例化对象和直接引用对象之间的直接引用路径;

向直接引用对象发送引用释放信息,以使得直接引用对象根据引用释放信息更新引用参数。

其中,引用释放消息包括可以令直接引用对象更新其自身的引用参数的信息。例如,通过该释放信息,直接引用对象便可以对自己的引用计数进行减一。

例如,在根据目标实例化对象和直接引用对象之间的直接引用关系,可以删除目标实例化对象和之间引用对象之间的之间引用路径。例如,如图12所示,可以删除目标实例化对象A和直接引用对象B之间的引用路径。

然后,可以给直接引用对象B发送引用释放消息,以使得直接引用对象根据引用释放信息更新引用参数。

在一实施例中,还可以在对直接引用对象进行减引用操作时,还可以给直接引用对象发送引用释放消息,然后直接引用对象可以根据该引用释放关系解除和目标实例化对象之间的引用关系,并更新自身的引用计数。

在一实施例中,更新完直接引用对象的引用参数之后,可以对间接引用对象进行识别,得到间接引用对象的数量。然后,根据间接引用对象的数量,更新目标实例化对象的引用参数和间接引用对象的引用参数。

其中,在根据间接引用对象的数量,更新目标实例化对象的引用参数和间接引用对象的引用参数时,可以将间接引用对象的数量和预设数量判别条件进行判别处理,然后根据判别结果根据目标实例化对象的引用参数和间接引用对象的引用参数。具体的,步骤“根据间接引用对象的数量,更新目标实例化对象的引用参数和间接引用对象的引用参数”,可以包括:

将间接引用对象的数量和预设数量判别条件进行判别处理;

当间接引用对象的数量不符合预设数量判别条件时,对间接引用对象进行减引用操作,并更新间接引用对象的引用参数和所述目标实例化对象的引用参数。

其中,预设数量判别条件可以是预先设置好的,对间接引用对象的数量进行判别时要遵循的条件。例如该预设数量判别条件可以是间接引用对象的数量为0。

例如,如图12所示,识别到目标实例化对象A的间接引用对象的数量为3,其中,该间接引用对象可以包括实例化对象C、实例化对象E和实例化对象F。然后,将间接引用对象的数量和预设数量判别条件进行判别处理。

其中,当间接引用对象的数量不符合预设数量判别条件,所以可以对间接引用对象进行减引用操作,并更新间接引用对象的引用参数。而当间接引用对象的数量符合预设数量判别条件时,则更新目标实例化对象的引用参数。

例如,如图12所示,由于间接引用对象的数量不符合数量为0的这个条件,说明实例化对象之间可能存在循环引用的情况,所以对间接引用对象进行减引用操作。

例如,如图12所示,可以沿着其中一条引用路径,递归地对引用对象B、引用对象C、引用对象E和引用对象F进行减引用操作,并更新引用对象B、引用对象C、引用对象E和引用对象F的引用计数。然后,由于目标实例化对象A和引用对象B以及引用对象C构成了循环引用。因此,还可以沿着另一条引用路径,对目标实例化对象A进行减引用操作,并更新目标实例化对象A的引用参数。

而当间接引用对象的数量符合预设数量判别条件时,则可以执行对所述目标实例化对象的更新后引用参数以及所述引用对象的更新后引用参数进行判别处理的步骤。

105、对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果。

在一实施例中,在更新目标实例化对象的引用参数和引用对象的引用参数,得到目标实例化对象的更新后引用参数和引用对象的更新后引用参数之后,可以对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果。具体的,步骤“对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果”,可以包括:

根据引用路径,对目标实例化对象和引用对象进行访问,得到当前访问对象的更新后引用参数;

将当前访问对象的更新后引用参数和预设引用参数阈值进行匹配;

当更新后引用参数和预设引用参数阈值相匹配时,对当前访问对象添加回收标识。

其中,回收标识包括标识当前访问对象的引用情况的记号。当当前访问对象被添加了回收标识,说明当前访问对象不存在被引用的情况,可以被回收。

在一实施例中,可以采用多种方式对目标实例化对象和引用对象进行访问。例如,可以采用深度优先遍历的方式对目标实例化对象和引用对象进行访问。又例如,可以采用广度优先遍历的方式对目标实例化对象和引用对象进行访问,等等。

譬如,当采用深度优先遍历的方式对目标实例化对象和方式对象进行访问时,可以从目标实例化对象出发,按照深度优先遍历需要遵循的顺序对目标实例化对象以及引用对象进行访问。

例如,如图13所示,可以从目标实例化对象A出发,按照目标实例化对象A、引用对象B、引用对象C、引用对象E和引用对象F的顺序对目标实例化对象和引用对象进行访问。

在一实施例中,在对目标实例化对象和引用对象进行访问时,可以得到当前访问对象的更新后引用参数。然后,将当前访问对象的更新后引用参数和预设引用参数阈值进行匹配。

其中,预设引用参数阈值包括预先设置好的,和更新后引用参数进行匹配的阈值。例如,当引用参数为引用计数时,预设引用参数阈值可以为0。

其中,当当前访问对象的更新后引用参数和预设引用参数阈值相匹配时,则可以对当前访问对象添加回收标识。

例如,如图13所示,将当前访问对象A的更新后引用参数和预设参数阈值进行匹配。由于当前访问对象A的更新后引用计数0与预设参数阈值0相匹配,所以可以对当前访问对象A添加回收标识。

又例如,如图13所示,若当前访问对象为B时,由于当前访问对象B的更新后引用计数0与预设参数阈值0相匹配,所以可以对当前访问对象B添加回收标识。

又例如,如图13所示,若当前访问对象为C时,由于当前访问对象C的更新后引用计数0与预设参数阈值0相匹配,所以可以对当前访问对象C添加回收标识。

在一实施例中,若当前访问对象的更新后引用参数和预设引用参数阈值不相匹配,则可以对当前访问对象的引用对象进行加引用操作,然后将目标实例化对象更新为当前访问对象,并返回执行步骤103。具体的,本申请实施例提出的内存释放方法,还包括:

当更新后引用参数和预设引用参数阈值不相匹配时,对当前访问对象的引用对象进行加引用操作;

将目标实例化对象更新为当前访问对象,并返回执行识别所述目标实例化对象的引用路径,引用路径包括与目标实例化对象存在引用关系的至少一个引用对象的步骤,直至当前访问对象的更新后引用次数和预设引用参数相匹配。

例如,如图13所示,若当前访问对象为E时,由于当前访问对象E的更新后引用计数不为0,所以,可以对象当前访问对象E的引用对象F进行加引用操作,以使得引用对象F的引用计数为1。

接下来,可以将目标实例化对象更新为当前访问对象,并返回执行步骤103,直至当前访问对象的更新后引用次数和预设引用参数相匹配。

106、根据判别结果,对目标实例化对象以及引用对象进行回收处理,以实现对内存的释放。

在一实施例中,在对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果之后,可以根据判别结果,对目标实例化对象以及引用对象进行回收处理,以实现对内存的释放。

其中,在对目标实例化对象进行回收处理时,可以对目标实例化对象以及目标实例化对象引用对象进行识别,得到目标实例化对象的标识信息和引用对象的标识信息。然后,根据目标实例化对象的标识信息和引用对象的标识信息,对对目标实例化对象以及引用对象进行回收处理。具体地,步骤“根据判别结果,对目标实例化对象以及引用对象进行回收处理”,可以包括:

对目标实例化对象以及引用对象进行识别,得到目标实例化对象的标识信息和引用对象的标识信息;

分别将目标实例化对象的标识信息和引用对象的标识信息和预设回收标识进行匹配;

当目标实例化对象的标识信息和预设回收标识相匹配时,将目标实例化对象进行对象回收处理;

当引用对象的标识信息和预设回收标识相匹配时,将引用对象进行对象回收处理。

其中,标识信息包括说明了实例化对象当前状态的信息。例如,标识信息可以包括回收标识、初始标识,等等。其中,回收标识说明实例化对象处于和回收状态,初始标识说明实例化对象处于初始状态。

例如,当识别到目标实例化对象的标识信息为回收标识时,说明目标实例化对象处于回收状态,可以对目标实例化对象进行回收。

又例如,当识别到引用对象的标识信息为回收标识时,说明引用对象处于回收状态,可以对引用对象进行回收。

在一实施例中,当得到目标实例化对象的标识信息和引用对象的标识信息之后,可以分别将目标实例化对象的标识信息和预设回收标识相匹配。

其中,当目标实例化对象的标识信息和预设回收标识相匹配时,可以将目标实例化对象进行对象回收处理。

例如,如图13所示,由于目标实例化对象A的标识信息和预设回收标识相匹配,所以可以将目标实例化对象进行对象回收处理,以实现对内存的释放。

其中,当引用对象的标识信息和预设回收标识相匹配时,将引用对象进行对象回收处理。

例如,如图13所示,由于引用对象B和C的标识信息和预设回收标识相匹配,所以可以将引用对象B和C进行回收处理,以实现对内存的释放。

本申请实施例提出了一种自动释放内存的方法,该方法可以获取多个实例化对象;从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;识别目标实例化对象的引用路径,得到引用对象;根据目标实例化对象和引用对象之间的引用关系,对引用路径上的引用对象进行减引用操作,并更新目标实例化对象的引用参数和引用对象的引用参数;对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果;根据判别结果,对目标实例化对象以及所述引用对象进行回收处理,以实现对内存的释放。本申请实施例提出的自动释放内存的方法,可以自动地将内存中的内存垃圾进行清除,而不需要人工地对内存垃圾进行测试以及释放内存,可以提高对内存释放的效率。

此外,本申请实施例通过对目标实例化对象的引用对象进行减引用操作,而不是对目标实例化对象进行减引用操作。通过这种方式,若存在循环引用的情况,则可以根据循环的引用路径,把目标实例化对象的引用计数减掉,从而可以解决实例化对象之间存在循环引用的问题。

根据上面实施例所描述的方法,以下将举例作进一步详细说明。

本申请实施例将以自动释放内存装置集成在计算机设备上为例来介绍本申请实施例方法。

如图14所示,一种自动释放内存方法,具体流程如下:

201、计算机设备获取多个实例化对象。

202、计算机设备从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象.

203、计算机设备识别目标实例化对象的引用路径,引用路径包括与目标实例化对象存在引用关系的至少一个引用对象。

204、计算机设备根据目标实例化对象和引用对象之间的引用关系,对引用路径上的引用对象进行减引用操作,并更新目标实例化对象的引用参数和引用对象的引用参数。

205、计算机设备对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果。

206、计算机设备根据判别结果,对目标实例化对象以及引用对象进行回收处理,以实现对内存的释放。

本申请实施例提出了一种自动释放内存方法,该方法包括计算机设备可以获取多个实例化对象;计算机设备从多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;计算机设备识别目标实例化对象的引用路径,得到引用对象;计算机设备根据目标实例化对象和引用对象之间的引用关系,对引用路径上的引用对象进行减引用操作,并更新目标实例化对象的引用参数和引用对象的引用参数;计算机设备对目标实例化对象的更新后引用参数以及引用对象的更新后引用参数进行判别处理,得到判别结果;计算机设备根据判别结果,对目标实例化对象以及所述引用对象进行回收处理,以实现对内存的释放,提高了对内存释放的效率。

根据上面实施例所描述的方法,以下将举例作进一步详细说明。

本申请实施例将以自动释放内存装置集成在计算机设备上的应用程序为例来介绍本申请实施例方法。

如图15所示,一种自动释放内存的方法,具体流程如下:

301、启动应用程序。

其中,应用程序包括完成某项或多项特定功能的计算机程序,它运行在交互模式,可以和应用程序的使用对象进行交互,具有可视的显示界面。

例如,应用程序可以包括各种终端上的应用软件。例如,应用程序可以包括各种手机软件(Application,APP)、平板电脑应用软件、笔记本电脑上的应用软件、个人计算机(PC,PersonalComputer)上的应用软件,等等。

例如,应用程序可以包括浏览器、视频播放软件、游戏软件等等。

又例如,应用程序还可以包括小程序。其中,小程序(MiniProgram)是一种不需要下载安装即可使用的应用程序。为了向用户提供更多样化的业务服务,开发者可为终端的应用(例如即时通信应用、购物应用、邮件应用等)开发相应的小程序,该小程序可作为子应用被嵌入至终端的应用中,通过运行应用内的子应用(即对应的小程序)能够为用户提供相应的业务服务。

在一实施例中,当应用程序启动时,可以实现本申请实例提出的自动释放内的方法。

302、对实例化对象进行减引用操作。

在一实施例中,当应用程序启动时,可以对实施例对象进行减引用操作。例如,如图11所示,可以删除了一个其他实例化对象对实例化对象A的引用,实例化对象A进行一次减引用操作。

303、引用计数是否为0。

在一实施例中,在对实例化对象进行减引用操作之后,可以判断实例化对象的引用计数是否为0。

304、回收对象。

当实例化对象的引用计数为0时,说明实例化对象不是循环引用类型,此时可以将实例化对象进行回收处理,从而实现对内存的释放。

305、将实例化对象加入待处理容器。

当实例化对象的引用计数不为0时,说明实例化对象可能是循环引用类型,此时可以将实例化对象加入待处理容器中,进行下一步的处理。

在一实施例中,当待处理容器中存在实例化对象时,可以按照如图16所示的流程对待处理容器中的实例化对象进行处理,从而实现对内存的释放,具体流程如下:

401、确定目标实例化对象。

例如,可以将待处理容器中,排在第一位的实例化对象确定为目标实例化对象。

402、对目标实例化对象的引用对象进行减引用操作。

例如,如图12所示,当目标实例化对象为A时,可以递归地对目标实例化对象的引用对象进行减引用操作。所以,引用对象B、引用对象C、引用对象E和引用对象F进行减引用操作。

同时,由于目标实例化对象A、引用对象B和引用对象C三者之间构成了循环引用。因此,在对引用对象进行减引用操作时,由于循环的原因,也会对目标实例化对象A进行减引用操作。

403、从目标实例化对象出发进行深度优先遍历。

在对目标实例化对象的引用对象进行减引用操作之后,可以从目标实例化对象出发进行深度优先遍历。

404、当前访问对象引用计数是否为0。

其中,在对实例化对象进行遍历时,可以判断当前访问对象的引用计数是否为0。

例如,如图13所示,当当前访问对象为A时,可以判断当前访问对象A的引用计数是否为0。又例如,当当前访问对象为B时,可以判断当前访问对象B的引用计数是否为0。

405、回收对象。

在一实施例中,若当前访问对象的引用计数为0,则可以将当前访问对象进行回收。

例如,如图13所示,由于当前访问对象A的引用计数为0,则可以将当前访问对象A进行回收,以实现对内存的释放。

406、对当前访问对象的引用对象进行加引用操作。

在一实施例中,若当前访问对象的引用计数不为0,则可以对当前访问对象的引用对象进行加引用操作。

例如,如图13所示,由于当前访问对象E的引用计数不为0,所以可以对当前访问对象E的引用对象F进行加引用操作,并将当前访问对象E添加至待处理容器中。然后,可以将目标实例化对象更新为当前访问对象E,然后对目标实例化对象继续执行后续的步骤,以使得应用程序中的内存垃圾都会回收,实现了对应用程序中内存的释放,避免应用程序出现卡顿的现象,提高了内存释放的效率。

为了更好地实施本申请实施例提供的自动释放内存方法,在一实施例中还提供了一种自动释放内存装置,该自动释放内存装置可以集成于计算机设备中。其中名词的含义与上述自动释放内存方法中相同,具体实现细节可以参考方法实施例中的说明。

在一实施例中,提供了一种自动释放内存装置,该自动释放内存装置具体可以集成在计算机设备中,如图17所示,该自动释放内存装置包括:获取单元501、确定单元502、识别单元503、减引用操作单元504、判别处理单元505和回收处理单元506,具体如下:

获取单元501,用于获取多个实例化对象;

确定单元502,用于从所述多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;

识别单元503,用于识别所述目标实例化对象的引用路径,所述引用路径包括与所述目标实例化对象存在引用关系的至少一个引用对象;

减引用操作单元504,用于根据所述目标实例化对象和所述引用对象之间的引用关系,对所述引用路径上的引用对象进行减引用操作,并更新所述目标实例化对象的引用参数和所述引用对象的引用参数;

判别处理单元505,用于对所述目标实例化对象的更新后引用参数以及所述引用对象的更新后引用参数进行判别处理,得到判别结果;

回收处理单元506,用于根据所述判别结果,对所述目标实例化对象以及所述引用对象进行回收处理,以实现对内存的释放。

在一实施例中,所述减引用操作单元,包括:

筛选子单元,用于根据所述目标实例化对象和所述引用对象之间的引用关系,在至少一个引用对象中筛选出和所述目标实例化对象之间存在直接引用关系的直接引用对象,以及和所述目标实例化对象之间存在间接引用关系的间接引用对象;

减引用操作子单元,用于根据所述直接引用关系,对所述引用路径上的直接引用对象进行减引用操作,并更新所述直接引用对象的引用参数;

识别子单元,用于对所述间接引用对象进行识别,得到所述间接引用对象的数量;

更新子单元,用于根据所述间接引用对象的数量,更新所述目标实例化对象的引用参数和所述间接引用对象的引用参数。

在一实施例中,所述更新子单元,包括:

判别处理模块,用于将所述间接引用对象的数量和预设数量判别条件进行判别处理;

更新模块,用于当所述间接引用对象的数量不符合预设数量判别条件时,对所述间接引用对象进行减引用操作,并更新所述间接引用对象的引用参数和所述目标实例化对象的引用参数。

在一实施例中,所述减引用操作子单元,包括:

删除模块,用于根据所述直接引用关系,删除目标实例化对象和所述直接引用对象之间的直接引用路径;

信息发送模块,用于向所述直接引用对象发送引用释放信息,以使得所述直接引用对象根据所述引用释放信息更新所述引用参数。

在一实施例中,所述判别处理单元,包括:

访问子单元,用于根据引用路径,对所述目标实例化对象和所述引用对象进行访问,得到当前访问对象的更新后引用参数;

匹配子单元,用于将当前访问对象的更新后引用参数和预设引用参数阈值进行匹配;

添加子单元,用于当所述更新后引用参数和所述预设引用参数阈值相匹配时,对所述当前访问对象添加回收标识。

在一实施例中,所述回收处理单元,包括:

识别子单元,用于对所述目标实例化对象以及所述引用对象进行识别,得到所述目标实例化对象的标识信息和所述引用对象的标识信息;

匹配子单元,用于分别将所述目标实例化对象的标识信息和所述引用对象的标识信息和预设回收标识进行匹配;

第一回收处理子单元,用于当所述目标实例化对象的标识信息和所述预设回收标识相匹配时,将所述目标实例化对象进行对象回收处理;

第二回收处理子单元,用于当所述引用对象的标识信息和所述预设回收标识相匹配时,将所述引用对象进行对象回收处理。

具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。

通过上述的自动释放内存装置可以实现对内存的自动释放,提高了对内存释放的效率。

本申请实施例还提供一种计算机设备,该计算机设备可以包括终端或服务器,比如,计算机设备可以作为内存释放终端,该终端可以为手机、平板电脑等等;又比如计算机设备可以为服务器。如图18所示,其示出了本申请实施例所涉及的终端的结构示意图,具体来讲:

该计算机设备可以包括一个或者一个以上处理核心的处理器601、一个或一个以上计算机可读存储介质的存储器602、电源603和输入单元604等部件。本领域技术人员可以理解,图18中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

处理器601是该计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储器602内的软件程序和/或模块,以及调用存储在存储器602内的数据,执行计算机设备的各种功能和处理数据,从而对计算机设备进行整体监控。可选的,处理器601可包括一个或多个处理核心;优选的,处理器601可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户页面和应用程序等,调制解调处理器主要处理无线通讯。可以理解的是,上述调制解调处理器也可以不集成到处理器601中。

存储器602可用于存储软件程序以及模块,处理器601通过运行存储在存储器602的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器602可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器602可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器602还可以包括存储器控制器,以提供处理器601对存储器602的访问。

计算机设备还包括给各个部件供电的电源603,优选的,电源603可以通过电源管理系统与处理器601逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源603还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

该计算机设备还可包括输入单元604,该输入单元604可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

尽管未示出,计算机设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,计算机设备中的处理器601会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器602中,并由处理器601来运行存储在存储器602中的应用程序,从而实现各种功能,如下:

获取多个实例化对象;

从所述多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;

识别所述目标实例化对象的引用路径,所述引用路径包括与所述目标实例化对象存在引用关系的至少一个引用对象;

根据所述目标实例化对象和所述引用对象之间的引用关系,对所述引用路径上的引用对象进行减引用操作,并更新所述目标实例化对象的引用参数和所述引用对象的引用参数;

对所述目标实例化对象的更新后引用参数以及所述引用对象的更新后引用参数进行判别处理,得到判别结果;

根据所述判别结果,对所述目标实例化对象以及所述引用对象进行回收处理,以实现对内存的释放。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中各种可选实现方式中提供的方法。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过计算机程序来完成,或通过计算机程序控制相关的硬件来完成,该计算机程序可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本申请实施例还提供一种存储介质,其中存储有计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种自动释放内存方法中的步骤。例如,该计算机程序可以执行如下步骤:

获取多个实例化对象;

从所述多个实例化对象中确定引用关系类型为预设引用关系类型的目标实例化对象;

识别所述目标实例化对象的引用路径,所述引用路径包括与所述目标实例化对象存在引用关系的至少一个引用对象;

根据所述目标实例化对象和所述引用对象之间的引用关系,对所述引用路径上的引用对象进行减引用操作,并更新所述目标实例化对象的引用参数和所述引用对象的引用参数;

对所述目标实例化对象的更新后引用参数以及所述引用对象的更新后引用参数进行判别处理,得到判别结果;

根据所述判别结果,对所述目标实例化对象以及所述引用对象进行回收处理,以实现对内存的释放。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种自动释放内存方法中的步骤,因此,可以实现本申请实施例所提供的任一种自动释放内存方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

以上对本申请实施例所提供的一种自动释放内存方法、装置和计算机设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

32页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:任务处理方法、装置和电子设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!