当前位置: 首页 > 专利查询>张永强专利>正文

垃圾对象检测方法和装置制造方法及图纸

技术编号:8980649 阅读:123 留言:0更新日期:2013-07-31 22:47
本发明专利技术涉及计算机应用技术领域,具体涉及垃圾对象检测方法和装置。垃圾对象检测方法,包括步骤:检测被检测对象是否形成循环引用链,是,则判断该循环引用链上的每一个对象是否被所述循环引用链外部的对象引用,否,则判定该循环引用链上的各对象均为垃圾对象,析构所述循环引用链。垃圾对象检测装置,包括检测模块和析构模块。本发明专利技术所提供的垃圾对象检测方法和装置,能够有效地解决引用计数法所存在的无法回收循环引用链上的垃圾对象的问题,提高了垃圾处理的准确度,且清除了更多的垃圾,从而释放出更多的资源。

【技术实现步骤摘要】

本专利技术涉及计算机应用
,具体而言,涉及垃圾对象检测方法和装置
技术介绍
垃圾收集中最直观的策略是引用计数。在引用计数中,每一个对象的引用技术变量负责维护对象所有引用的计数值。当一个新的引用指向对象时,引用计数器就递增,当去掉一个引用时,引用计数就递减。当引用计数到零时,该对象就将释放占有的资源。即如果对象的引用计数是零,那么它就是垃圾(用户程序不可到达它),并可以回收。在引用计数法中,垃圾的检测、回收是与用户程序同时执行的,因此引用计数法具有开销稳定的优点,不需要非定期地大量占用系统资源,不会引起用户程序长时间被中断。所以此方法能够较好地满足实时系统的要求。但是,引用计数法,单纯依靠对象是否被其他对象所引用而判断其是否是垃圾程序,存在一定的缺陷。由于有些垃圾程序本身虽然被其他对象所引用,但是其本身是不需要的程序,例如,一个多个对象所组成的循环引用链,该循环引用链上的所有对象的引用计数都不为零,但是这整个循环引用结构却没有被任何其他外部对象所引用,因此这个循环引用链整体都是需要被删除的垃圾。而引用计数法不能够检测出该循环引用链为垃圾。综上,相关技术中的引用计数法存在一个较大的缺陷:无法回收循环引用的对象。
技术实现思路
本专利技术的目的在于提供垃圾对象检测方法和装置,以解决上述的问题。在本专利技术的实施例中提供了垃圾对象检测方法,包括步骤:检测被检测对象是否形成循环引用链,是,则判断该循环引用链上的每一个对象是否被所述循环引用链外部的对象引用,否,则判定该循环引用链上的各对象均为垃圾对象,析构所述循环引用链。其中,所述步骤检测被检测对象是否形成循环引用链之前还包括步骤:预先为每一个被检测的对象设置用于标记该对象引用计数的第一变量、用于标记该对象是否处于循环引用链上的第二变量以及用于标记处于循环引用链的对象被处于该循环引用链上的其他对象所引用的引用计数的第三变量。其中,所述步骤检测被检测对象是否形成循环引用链包括步骤:判断对象列表是否为空,是,则继续等待直到对象列表非空,否,则从对象列表中获取一个对象;判断获取的所述对象的第一变量的值是否小于或者等于0,是,则析构所述对象;否,则以所述对象为起点,依据引用关系,进行深度优先遍历,检测是否存在循环引用链,根据遍历结果,标记各个被检测对象的第三变量的值,并将检测出的循环引用链上的所有对象的第二变量标记为是。其中,所述步骤判断该循环引用链上的每一个对象是否被所述循环引用链外部的对象引用包括步骤:以检测出的循环引用链上的一个对象为起点,依次遍历处于该循环引用链上的各对象,判断该循环引用链上的所有对象的第三变量的值与第一变量的值是否相等;是,则析构整个循环引用链。其中,所述步骤判断该循环引用链上的所有对象的第三变量的值与第一变量的值是否相等之后还包括步骤:否,则以所述对象为起点,则将该循环引用链上的第二变量和第三变量均标记为空。 其中,所述步骤析构所述对象之后还包括步骤:析构该对象的同时减少该对象引用的其他对象的第一变量的值;判断该对象引用的其他对象的第一变量的值是否小于或者等于0,是,则依照对象的引用关系,递归执行对第一变量值小于或者等于O的对象的析构。本专利技术还公开一种垃圾对象检测装置,包括检测模块和析构模块;所述检测模块,用于检测被检测对象是否形成循环引用链;所述析构模块,用于判断检测模块检测出的循环引用链上的每一个对象是否被所述循环引用链外部的对象引用,否,则析构所述循环引用链。其中,还包括配置模块,所述配置模块用于:预先为每一个被检测的对象设置用于标记该对象引用计数的第一变量、用于标记该对象是否处于循环引用链上的第二变量以及用于标记处于循环引用链的对象被处于该循环引用链上的其他对象所引用的引用计数的第三变量。其中,所述检测模块,用于:判断对象列表是否为空,是,则继续等待直到对象列表非空,否,则从对象列表中获取一个对象;判断获取的所述对象的第一变量的值是否小于或者等于0,是,则析构所述对象;否,则以所述对象为起点,依据引用关系,进行深度优先遍历,检测是否存在循环引用链,根据遍历结果,标记各个被检测对象的第三变量的值,并将检测出的循环引用链上的所有对象的第二变量标记为是。其中,所述析构模块,用于:以检测出的循环引用链上的一个对象为起点,依次遍历处于该循环引用链上的各对象,判断该循环引用链上的所有对象的第三变量的值与第一变量的值是否相等;是,则析构整个循环引用链。本专利技术上述实施例的垃圾对象检测方法和装置,首先判断被检测对象是否形成循环引用链,若存在循环引用链,则继续判断是否该循环引用链上的对象被外部对象所引用,是,则说明该循环引用链,是需要被调用的,则应保留,若该循环引用链上的任何一个对象都没有被外部对象所引用,则说明整个循环引用链是不需要的垃圾文件,应该被析构回收,所以本专利技术的垃圾对象检测方法和装置,能够有效地解决引用计数法所存在的无法回收循环引用链上的垃圾对象的问题,提高了垃圾处理的准确度,且清除了更多的垃圾,从而释放出更多的资源。附图说明图1示出了本专利技术的垃圾对象检测方法的流程示意图;图2至图7均为本专利技术的引用关系链的示例图;图8为本专利技术的垃圾对象检测方法的一个实施例的流程示意图;图9至图11为检测流程各阶段的一个引用关系链示意图;图12为本专利技术的垃圾对象检测装置的结构示意图。具体实施例方式下面通过具体的实施例子并结合附图对本专利技术做进一步的详细描述。本专利技术实施例公开了一种垃圾对象检测方法,参见图1所示,包括步骤:步骤SllO:检测被检测对象是否形成循环引用链,是,则执行步骤S111。步骤Slll:判断该循环引用链上的每一个对象是否被所述循环引用链外部的对象引用,否,则执行步骤S112。步骤S112:判定该循环引用链上的各对象均为垃圾对象,析构所述循环引用链。其中,所述循环引用链的定义为:处于循环引用中的一个对象,以该对象为起点,并且以该对象为终点,依据引用关系遍历,能够形成一个完整的引用回路,则称之为循环引用链。参见图2,图2为A、B、C和D四个的引用关系图,其中A、B和C三个对像循环引用构成了一个循环引用链 ,对象A的引用关系链为A->B->C->A,D是在该循环引用链外部的对象,D被C引用。另外,除非特别说明,本专利技术附图中的箭头所指方向,表示引用方向,即若箭头由A指向B,则是A引用B,即B被A引用。本专利技术所述“对象”为各种可采用引用计数法进行垃圾检测回收的文件或者函数、程序代码等等。其中,所述步骤检测被检测对象是否形成循环引用链之前还包括步骤:预先为每一个被检测的对象设置用于标记该对象引用计数的第一变量、用于标记该对象是否处于循环引用链上的第二变量以及用于标记处于循环引用链的对象被处于该循环引用链上的其他对象所引用的引用计数的第三变量。优选地,作为一个具体实施示例,对于每个对象,设置第一变量ref_cnt用于记录该对象的引用计数,设置第二变量in_cnt,用于标记所在回路中的入度,设置第三变量flag,用于表示是否在循环引用链上。对象创建时,入度in_cnt初始化为O,当前状态flag初始化为空状态,并且将该对象加入对象链表。除非特别说明,附图中所示ref_cnt均表示引用计数,in_cnt均表示入度,flag为I表示该对象本文档来自技高网...

【技术保护点】
垃圾对象检测方法,其特征在于,包括步骤:检测被检测对象是否形成循环引用链,是,则判断该循环引用链上的每一个对象是否被所述循环引用链外部的对象引用,否,则判定该循环引用链上的各对象均为垃圾对象,析构所述循环引用链。

【技术特征摘要】
1.垃圾对象检测方法,其特征在于,包括步骤: 检测被检测对象是否形成循环引用链,是,则判断该循环引用链上的每一个对象是否被所述循环引用链外部的对象引用,否,则判定该循环引用链上的各对象均为垃圾对象,析构所述循环引用链。2.根据权利要求1所述的垃圾对象检测方法,其特征在于,所述步骤检测被检测对象是否形成循环引用链之前还包括步骤: 预先为每一个被检测的对象设置用于标记该对象引用计数的第一变量、用于标记该对象是否处于循环引用链上的第二变量以及用于标记处于循环引用链的对象被处于该循环引用链上的其他对象所引用的引用计数的第三变量。3.根据权利要求2所述的垃圾对象检测方法,其特征在于,所述步骤检测被检测对象是否形成循环引用链包括步骤: 判断对象列表是否为空,是,则继续等待直到对象列表非空,否,则从对象列表中获取一个对象; 判断获取的所述对象的第一变量的值是否小于或者等于O,是,则析构所述对象; 否,则以所述对象为起点,依据引用关系,进行深度优先遍历,检测是否存在循环引用链,根据遍历结果,标记各个被检测对象的第三变量的值,并将检测出的循环引用链上的所有对象的第二变量标记为是。4.根据权利要求3所述的垃圾对象检测方法,其特征在于,所述步骤判断该循环引用链上的每一个对象是否被所述循环引用链外部的对象引用包括步骤: 以检测出的循环引用链上的一个对象为起点,依次遍历处于该循环引用链上的各对象,判断该循环引用链上的所有对象的第三变量的值与第一变量的值是否相等;是,则析构整个循环引用链。5.根据权利要求4所述的垃圾对象检测方法,其特征在于,所述步骤判断该循环引用链上的所有对象的第三变量的值与第一变量的值是否相等之后还包括步骤: 否,则以所述对象为起点,则将该循环引用链上的第二变量和第三变量均...

【专利技术属性】
技术研发人员:张永强
申请(专利权)人:张永强
类型:发明
国别省市:

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

1