[发明专利]垃圾对象检测方法和装置有效
申请号: | 201310188123.8 | 申请日: | 2013-05-20 |
公开(公告)号: | CN103226476A | 公开(公告)日: | 2013-07-31 |
发明(设计)人: | 张永强 | 申请(专利权)人: | 张永强 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京超凡志成知识产权代理事务所(普通合伙) 11371 | 代理人: | 吴开磊 |
地址: | 210036 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 垃圾 对象 检测 方法 装置 | ||
技术领域
本发明涉及计算机应用技术领域,具体而言,涉及垃圾对象检测方法和装置。
背景技术
垃圾收集中最直观的策略是引用计数。在引用计数中,每一个对象的引用技术变量负责维护对象所有引用的计数值。当一个新的引用指向对象时,引用计数器就递增,当去掉一个引用时,引用计数就递减。当引用计数到零时,该对象就将释放占有的资源。即如果对象的引用计数是零,那么它就是垃圾(用户程序不可到达它),并可以回收。在引用计数法中,垃圾的检测、回收是与用户程序同时执行的,因此引用计数法具有开销稳定的优点,不需要非定期地大量占用系统资源,不会引起用户程序长时间被中断。所以此方法能够较好地满足实时系统的要求。
但是,引用计数法,单纯依靠对象是否被其他对象所引用而判断其是否是垃圾程序,存在一定的缺陷。由于有些垃圾程序本身虽然被其他对象所引用,但是其本身是不需要的程序,例如,一个多个对象所组成的循环引用链,该循环引用链上的所有对象的引用计数都不为零,但是这整个循环引用结构却没有被任何其他外部对象所引用,因此这个循环引用链整体都是需要被删除的垃圾。而引用计数法不能够检测出该循环引用链为垃圾。
综上,相关技术中的引用计数法存在一个较大的缺陷:无法回收循环引用的对象。
发明内容
本发明的目的在于提供垃圾对象检测方法和装置,以解决上述的问题。
在本发明的实施例中提供了垃圾对象检测方法,包括步骤:
检测被检测对象是否形成循环引用链,是,则判断该循环引用链上的每一个对象是否被所述循环引用链外部的对象引用,否,则判定该循环引用链上的各对象均为垃圾对象,析构所述循环引用链。
其中,所述步骤检测被检测对象是否形成循环引用链之前还包括步骤:
预先为每一个被检测的对象设置用于标记该对象引用计数的第一变量、用于标记该对象是否处于循环引用链上的第二变量以及用于标记处于循环引用链的对象被处于该循环引用链上的其他对象所引用的引用计数的第三变量。
其中,所述步骤检测被检测对象是否形成循环引用链包括步骤:
判断对象列表是否为空,是,则继续等待直到对象列表非空,否,则从对象列表中获取一个对象;
判断获取的所述对象的第一变量的值是否小于或者等于0,是,则析构所述对象;
否,则以所述对象为起点,依据引用关系,进行深度优先遍历,检测是否存在循环引用链,根据遍历结果,标记各个被检测对象的第三变量的值,并将检测出的循环引用链上的所有对象的第二变量标记为是。
其中,所述步骤判断该循环引用链上的每一个对象是否被所述循环引用链外部的对象引用包括步骤:
以检测出的循环引用链上的一个对象为起点,依次遍历处于该循环引用链上的各对象,判断该循环引用链上的所有对象的第三变量的值与第一变量的值是否相等;是,则析构整个循环引用链。
其中,所述步骤判断该循环引用链上的所有对象的第三变量的值与第一变量的值是否相等之后还包括步骤:
否,则以所述对象为起点,则将该循环引用链上的第二变量和第三变量均标记为空。
其中,所述步骤析构所述对象之后还包括步骤:
析构该对象的同时减少该对象引用的其他对象的第一变量的值;
判断该对象引用的其他对象的第一变量的值是否小于或者等于0,是,则依照对象的引用关系,递归执行对第一变量值小于或者等于0的对象的析构。
本发明还公开一种垃圾对象检测装置,包括检测模块和析构模块;
所述检测模块,用于检测被检测对象是否形成循环引用链;
所述析构模块,用于判断检测模块检测出的循环引用链上的每一个对象是否被所述循环引用链外部的对象引用,否,则析构所述循环引用链。
其中,还包括配置模块,所述配置模块用于:
预先为每一个被检测的对象设置用于标记该对象引用计数的第一变量、用于标记该对象是否处于循环引用链上的第二变量以及用于标记处于循环引用链的对象被处于该循环引用链上的其他对象所引用的引用计数的第三变量。
其中,所述检测模块,用于:
判断对象列表是否为空,是,则继续等待直到对象列表非空,否,则从对象列表中获取一个对象;
判断获取的所述对象的第一变量的值是否小于或者等于0,是,则析构所述对象;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于张永强,未经张永强许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310188123.8/2.html,转载请声明来源钻瓜专利网。