在循环图中管理对象生命期的制作方法

文档序号:6377509阅读:170来源:国知局
专利名称:在循环图中管理对象生命期的制作方法
在循环图中管理对象生命期
背景技术
计算机系统和相关技术影响社会的许多方面。事实上,计算机系统处理信息的能力已经改变了我们生活和工作的方式。计算机系统现在普遍执行大量任务(例如,文字处理、日程、记账等),这些任务在计算机系统出现之前是手工执行的。最近,计算机系统已经相互耦合以及耦合到其他电子设备,形成有线和无线计算机网络,通过这些网络计算机系统和其他电子设备可以传输电子数据。相应地,许多计算任务的执行被分布在许多不同的计算机系统和/或许多不同的计算环境中。一些编程环境(例如C++)使用引用计数作为确定对象何时不再被引用并从而可以释放用于存储对象的内存的机制。如果对象不能直接被引用,通过将对象从内存移除,从而管理对象的生命期。当一个对象引用另一对象时,增加被引用对象的引用计数。当一个对象引用另一对象时,该对象的引用计数减少。当一个对象的引用计数达到零时,它是不可访问的,并且可以将其毁灭。然而,引用计数相对不复杂,可能导致内存泄露(即,未使用的和有可能不可访问的对象继续消耗内存)。例如,可能两个对象相互引用但却未被任何其他对象引用,产生循环。当出现循环时,引用计数可能无法确定这两个对象仅仅是相互引用而却没有被其他引用。因此,这两个对象的内存未被释放,引起内存泄露。其他编程环境(例如C#)使用垃圾收集作为确定对象何时不再被引用并从而可以释放用于存储对象的内存的机制。垃圾收集通过查找不能被直接或者间接引用的对象并且移除它们来管理对象的生命期。垃圾收集通过考虑到间接引用而解决了与循环相关的问题。一些编程环境利用引用计数对象和垃圾收集对象。例如,开发者可能希望利用使用不同对象生命期管理技术的不同编程语言。在这些混合的编程环境中,被引用计数对象可以引用垃圾收集对象和/或垃圾收集对象可以引用计数对象。然而,垃圾收集系统可能无法通过被引用计数对象跟踪间接引用。因此,在混合的编程环境中仍然可能出现内存泄露。

发明内容
本发明扩展到在循环图中管理对象生命期的方法、系统和计算机程序产品。本发明的实施例包括例如从混合不同资源收回技术的对象图中准备收回以及收回分配的系统资源。在一些实施例中,计算机系统确定要实施垃圾收集。响应于确定要实施垃圾收集,检测根据垃圾收集管理的对象与根据引用计数管理的对象之间的引用。此外对任何检测到的引用确定引用类型(例如直接、间接、标准、被跟踪、弱化等)。实施垃圾收集以确定是否可以收回任何分配的系统资源。作为系统资源收回确定的一部分,垃圾收集考虑根据垃圾收集管理的对象与根据引用计数管理的对象之间引用和引用类型。一般而言,对象可以请求创建和/或移除到和/或来自其他对象的引用。例如,当要收集对象时(例如为了收回系统资源),可以在要被收集的对象从图中移除之前通知从要被收集的对象引用的其他对象。响应于该通知,被引用对象可以断开从该被引用对象到再一对象的弱化引用。垃圾收集然后可以继续来确定是否可以收回任何另外分配的系统资源。继续的垃圾收集考虑断开从另一对象到再一对象的弱化引用。提供本发明内容来以简化的形式介绍一系列概念,这些概念下面在具体实施方式
中进一步描述。本发明内容并不意图标识所要求保护的主题的关键特征或基本特征,也不意图用作帮助确定所要求保护的主题的范围。本发明的额外特征和优点将会在下面的描述中阐述,并且通过描述而部分地变得明显,或者可以通过本发明的实践而习得。本发明的特征和优点可以通过所附权利要求中特别指出的装置和组合而实现和获得。本发明的这些和其他特征通过下面描述和所附权利要求将变得充分清楚,或者可以通过下面阐述的本发明的实践习得。


为了描述可以获得本发明的上述和其他优点和特征的方式,将参照附图中所示的其特定实施例来呈现对上面简要描述的本发明的更具体描述。理解这些附图仅仅描绘本发明的典型实施例,因此不应当被认为是限制其范围,将通过使用附图以额外的特性和细节描述和说明本发明,在附图中图1A示出促进在循环图中管理对象生命期的示例计算机架构。图1B示出示例循环图。图1C示出示例循环图。图1D示出示例循环图。图1E示出示例循环图。图1F示出示例循环图。图2示出用于同步来自被计数对象图的引用信息与被垃圾收集对象图以准备尝试收回系统资源的示例方法的流程图。图3示出用于确定如何引用被引用计数对象以准备尝试收回系统资源的示例方法的流程图。图4示出用于收回分配的系统资源的示例方法的流程图。
具体实施例方式本发明扩展到在循环图中管理对象生命期的方法、系统和计算机程序产品。本发明的实施例包括例如从混合不同资源收回技术的对象图中收回分配的系统资源。在一些实施例中,计算机系统确定要实施垃圾收集。响应于确定要实施垃圾收集,检测根据垃圾收集管理的对象与根据引用计数管理的对象之间的引用。此外对任何检测到的引用确定引用类型(例如直接、间接、标准、被跟踪、弱化等)。实施垃圾收集以确定是否可以收回任何分配的系统资源。作为系统资源收回确定的一部分,垃圾收集考虑根据垃圾收集管理的对象与根据引用计数管理的对象之间引用和引用类型。一般而言,对象可以请求创建和/或移除到和/或来自其他对象的引用。例如,当要收集对象时(例如为了收回系统资源),可以在要被收集的对象从图中移除之前通知从要被收集的对象引用的其他对象。响应于该通知,被引用对象可以断开从该被引用对象到再一对象的弱化引用。垃圾收集然后可以继续来确定是否可以收回任何另外分配的系统资源。继续的垃圾收集考虑断开从另一对象到再一对象的弱化引用。本发明的实施例可以包括或者利用专用或通用计算机,专用或通用计算机包括计算机硬件,例如一个或更多个处理器和系统内存,这会在下面更详细讨论。本发明的范围内的实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这种计算机可读介质可以是能够由通用或专用计算机系统访问的任何可用的介质。存储计算机可执行指令的计算机可读介质是计算机存储介质(设备)。承载计算机可执行指令的计算机可读介质是传输介质。因此,示例性而非限制性地,本发明的实施例可以包括至少两个明显不同种类的计算机可读介质计算机存储介质(设备)和传输介质。计算机存储介质(设备)包括RAM、R0M、EEPR0M、⑶ROM、固态驱动器(“SSD”)(例如基于RAM)、闪速存储器、相变存储器(“PCM”)、其他类型的存储器、其他光盘存储装置、磁盘存储装置或其他磁性存储设备,或者可以用于存储计算机可执行指令或数据结构形式的期望程序代码装置并且可以由通用或专用计算机访问的任何其他介质。“网络”被定义为允许计算机系统和/或模块和/或其他电子设备之间的电子数据传输的一个或更多个数据链路。当信息通过网络或另一通信连接(硬线,无线或者硬线或无线的组合)传输或提供给计算机时,计算机适当地将该连接看做传输介质。传输介质可以包括能够用于承载计算机可执行指令或数据结构形式的期望程序代码装置并且可以由通用或专用计算机访问的网络和/或数据链路。上述的组合也应当包括在计算机可读介质的范围之内。此外,在到达各种计算机系统组件后,计算机可执行指令或数据结构形式的程序代码装置可以从传输介质自动传输到计算机存储介质(设备)(或者反之亦然)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可以缓存在网络接口模块(例如“NIC”)的RAM内,然后最终传输到计算机系统RAM和/或传输到计算机系统处的不那么易失的计算机存储介质(设备)。因此,应当理解,计算机存储介质(设备)可以被包括在同样(或者甚至主要)利用传输介质的计算机系统组件中。计算机可执行指令包括例如当在处理器处执行时使通用计算机、专用计算机或专用处理设备执行一定功能或功能组的指令和数据。计算机可执行指令可以是例如二进制、中间格式指令,如汇编语言或者甚至源代码。尽管以特定于结构特征和/或方法动作的语言描述了主题,但要理解,所附权利要求中限定的主题不必限于上面所述的特征或动作。相反,所描述的特征和动作是作为实施权利要求的示例形式公开的。本领域技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持设备、多处理器系统、基于微处理器的或可编程的消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、平板电脑、寻呼机、路由器、交换机等等。本发明还可以在分布式系统环境中实践,其中通过网络(通过硬线数据链路、无线数据链路或者通过硬线和无线数据链路的组合)链接的本地和远程计算机系统都执行任务。在分布式系统环境中,程序模块可以位于本地和远程存储储存设备两者中。在说明书和后面的权利要求书内,“引用包装器”(“RW”)被定义为根据垃圾收集(下面可以称为“GC对象”)收回的对象,并且其存储从另一 GC对象到根据引用计数(下面可以称为“被引用计数对象”)收回的再一对象的引用。也就是说,RW存储从GC对象到被引用计数对象的引用。在说明书和后面的权利要求书内,“被计数包装器”(“Cr’)被定义为存储从另一被引用计数对象到GC对象的被引用计数对象。也就是说,CW存储从被引用计数对象到GC对象的引用。在说明书和后面的权利要求书内,“标准引用”被定义为任何被引用计数的引用。例如,公共对象模型(“COM”)引用是对象引用计数算法的示例。标准引用可以根据添加引用/释放(AddRef/Release)模式实施。在说明书和后面的权利要求书内,“被跟踪引用”被定义为类似于标准引用的引用,但“被跟踪引用”在垃圾收集期间还向对象通信。通信可以指示被引用计数对象(例如Cff)是否可通过RW以外的某种方式(直接或间接)到达。当被引用计数对象可通过RW以外的方式到达时,该被引用计数对象可以被保护(或“限制”)。当被保护时,该被引用计数对象可以甚至没有直接引用该被引用计数对象的RW或其他GC对象存活过垃圾收集的情况下存活过垃圾收集。当被引用计数对象仅可通过RW到达时,不保护该被引用计数对象。在说明书和后面的权利要求书内,“弱引用”是用于引用对象而没有保持其不被收回的引用。也就是说,弱引用不控制弱引用直接引用的对象的生命期。在一些实施例中,在垃圾收集(例如当GC系统正标识可以从内存移除的GC对象时)之前,GC系统去往每个RW并确定哪些CW可以通过被计数对象图到达。如果存在从RW出发目标为CW的多种方式,可以找出一个或更多种。对于每个发现,在该RW与该CW目标(它是另一 GC对象)之间创建GC相关性。因此,如果该RW对象在GC操作期间没有被收集,则也不收集该CW的目标。也就是说,该RW是该CW目标的生命期的保护者。在其他实施例中,在垃圾收集之前,被计数对象系统标识应当被限制的CW。如果存在通过RW以外的某种方式(直接或间接)到达CW,则该CW应当被限制。也就是说,在应当保护CW目标不被垃圾收集的情况下,即使没有RW或其他GC对象直接引用,该CW仍存活过垃圾收集处理。这些预收集操作可以用于以锁定机制保护被计数对象之间的引用。图1A示出在循环图中促进管理对象生命期的示例计算机架构100。计算机架构100包括生命期管理模块101、被计数对象图106和被垃圾收集对象图107。被计数对象图106总的被引用计数对象151可以引用被垃圾收集对象图107中的GC对象152,反之亦然。被引用计数对象151与GC对象152之间的引用可以形成循环图109。一般而言,生命期管理模块101被配置为在循环图(例如循环图109)中管理对象生命期。如所绘出的,生命期管理模块101包括引用计数组件102、分析组件103和垃圾收集组件104。引用计数组件102被配置为计算循环图内对象上的引用。引用计数组件102可以采用多数任何引用计数技术来计算对象上的引用。引用可以包括对象之间的外部引用或内部引用。引用计数组件102可以确定对象上的引用总数并且相应地为该对象分配引用计数。分析组件103被配置为分析循环图中对象上的引用。基于该分析,分析组件103可以弱化或者加强对象之间的引用。分析组件103可以基于该分析确定生命期管理从引用计数系统到垃圾收集系统的转换。一般而言,生命期管理模块101可以通过采用垃圾收集组件104毁灭或者释放未使用对象。当对象是不可到达的从而不存在到该对象的直接或间接引用时,可以收集该对象。垃圾收集组件104可以基于对象的可到达性信息确定要毁灭的对象。可以由引用计数组件102和/或分析组件103提供可到达性信息。本发明的实施例包括同步被引用计数的信息与垃圾收集。从被引用计数侧到GC侧的引用信息在GC处理期间或者作为GC处理的一部分而被提供。也就是说,从RW到CW目标的引用在GC期间做出,并且可以在GC处理完成之后丢弃(适当的话在下一 GC上重新创建)。可替代地和/或组合地,可以使用某种类型的缓存以便性能优化。图1B示出示例循环图109。参照图1B,循环图109包括被引用计数对象111和112、GC对象114和116、被计数包装器113和引用包装器117。GC对象114通过引用包装器117引用被引用计数对象111 (引用126)。被引用计数对象112通过被计数包装器113引用GC对象116(引用123)。引用121 (外部引用)也引用被引用计数对象111。图2示出用于在循环图中管理对象生命期的示例方法200的流程图。将关于计算机架构100的组件和图1B所示的循环图109描述方法200。方法200包括确定要执行垃圾收集的动作(动作201)。例如,垃圾收集组件104可以确定要执行循环图109的垃圾收集。响应于该确定并且在执行垃圾收集之前,方法200包括确定被计数包装器可以从引用包装器经由被计数对象图到达(动作202)。例如,分析组件103可以确定被计数包装器113可以从引用包装器117到达。响应于该确定并且在执行垃圾收集之前,方法200还包括通过创建从引用包装器到GC对象的引用来保护经过被计数包装器引用的GC对象的生命期(动作203)。例如,分析模块103可以通过创建从引用包装器117到GC对象116的引用127来保护GC对象116。方法200包括执行垃圾收集以确定是否可以收回分配的系统资源的动作(动作
204),垃圾收集考虑由引用包装器有效引用的GC对象。例如,垃圾收集组件104可以在循环图109上执行垃圾收集。垃圾收集可以确定是否可以收回为循环图109的对象分配的任何资源。垃圾收集组件104可以考虑由引用包装器117有效引用的GC对象(引用127)。方法200包括在垃圾收集后移除引用包装器与GC对象之间的引用的动作(动作
205)。例如,在循环图109上的垃圾收集后,分析模块103可以移除引用127。图1C示出示例循环图109。与图1B类似,图1C中的循环图109包括被引用计数对象111和112、GC对象114和116、被计数包装器113和引用包装器117。GC对象114通过引用包装器117引用被引用计数对象111 (引用126)。被引用计数对象112通过被计数包装器113引用GC对象116(引用123)。引用121(外部引用)也引用被引用计数对象111。图3示出用于确定如何引用被引用计数对象以准备尝试收回系统资源的示例方法300的流程图。将关于计算机架构100的组件和图1C所示的循环图109描述方法300。方法300包括确定要执行垃圾收集的动作(动作301)。例如,垃圾收集组件104可以确定要执行循环图109的垃圾收集。向应于该确定并且在实施垃圾收集之前,方法300包括确定被计数包装器通过指定类型的引用的可到达性(动作302)。例如,分析模块103可以确定被计数包装器113通过标准和/或被跟踪引用的可到达性。如图1C所绘出的,被计数包装器113可从引用121(标准引用)和引用126 (被跟踪引用)到达。响应于该确定并且在实施垃圾收集之前,方法300包括基于该指定类型的引用访问关于垃圾收集的信息(动作303)。例如,引用计数组件102可以从引用121和/或引用126访问关于循环图109的垃圾收集的信息。关于引用121,引用计数组件102可以访问指示引用121是标准引用的信息。关于引用126,引用计数组件102可以访问指示引用126是被跟踪引用的信息。从引用126,引用计数组件102还可以访问是否被计数包装器113可通过RW以外的对象到达。在图1C中,引用126会指示被计数包装器113只能从引用包装器117到达。然而,基于通过标准引用121的可到达性,引用计数组件102可以限制被计数包装器113,以便在垃圾收集期间进行保护。方法300包括执行垃圾收集以确定是否可以收回任何分配的系统资源的动作(动作304),垃圾收集考虑当确定是否要收回被引用计数对象时访问的信息。例如,垃圾收集组件104可以执行循环图109上的垃圾收集。垃圾收集可以考虑从引用121和126访问的信息。基于被计数包装器113被引用计数组件102限制,被计数包装器113不被收回(循环图109中的任何其他对象也不被收回)并且保留在内存中。也就是说,由于存在引用121,因此限制被计数包装器113。限制被计数包装器113指示GC对象116被垃圾收集组件104认为是全局可到达的。在垃圾收集期间,所有对象都不移除。垃圾收集组件104保持GC对象116活着,并且引用124使得垃圾收集保持GC对象114活着,并且进而保持RW117活着。由于RW117保持被引用计数对象111上的被计数引用,因此被引用计数对象111和112由于引用112而活着。现在参考图1D,图1D示出示例循环图109。图1D中的循环图109包括被引用计数对象111和112、GC对象114和116、被计数包装器113和引用包装器117。GC对象114通过引用包装器117引用被引用计数对象111 (引用126)。被引用计数对象112通过被计数包装器113引用GC对象116(引用123)。引用128(外部引用)也引用被引用GC对象114。在图1D中,分析模块103可以确定被计数包装器113可从引用126 (被跟踪引用)到达。弓丨用计数组件102可以从引用126访问关于循环图109的垃圾收集的信息。关于引用126,引用计数组件102可以访问指示引用126是被跟踪引用的信息。从引用126,引用计数组件102还可以访问是否被计数包装器113可通过RW以外的对象到达。在图1D中,引用126会指示被计数包装器113可从另一对象经由引用128到达。因此,引用计数组件102可以限制被计数包装器113。基于被计数包装器113被限制,被计数包装器113不被收回(循环图109中的任何其他对象也不被收回)。也就是说,由于存在引用128 (到GC对象114的直接或间接全局GC引用),因此所有对象保留在内存中。例如,如果引用128可能不直接是全局GC引用,它可能是来自自身被全局GC引用所引用的对象的引用。引用128使得使得垃圾收集组件104保持GC对象114活着,从而保持引用包装器117活着。回头参考图1B,类似于引用127的引用可以保持GC对象116活着。现在参考图1E,图1E示出示例循环图109。图1E中的循环图109包括被引用计数对象111和112、GC对象114和116、被计数包装器113和引用包装器117。GC对象114通过引用包装器117引用被引用计数对象111 (引用126)。被引用计数对象112通过被计数包装器113引用GC对象116 (引用123)。在图1E中,分析模块103可以确定被计数包装器113可从引用126 (被跟踪引用)到达。弓丨用计数组件102可以从引用126访问关于循环图109的垃圾收集的信息。关于引用126,引用计数组件102可以访问指示引用126是被跟踪引用的信息。从引用126,引用计数组件102还可以访问是否被计数包装器113可通过RW以外的对象到达。在图1E中,引用126会指示被计数包装器113只能从引用包装器117到达。因此,引用计数组件102不限制被计数包装器113。由于被计数包装器113不被限制,因此它可以(并且会)在垃圾收集期间被收回。在图1E中,所有对象都被垃圾收集处理移除。由于不存在到GC对象114的引用,因此垃圾收集组件104可以移除GC对象114,然后类似地移除引用包装器117。在移除引用包装器117期间,移除引用126(被引用计数对象111上的计数)。移除计数导致被引用计数对象111在其计数从被引用计数对象112移除之后自身从内存移除。被引用计数对象112类似地从被计数包装器113移除其计数,然后自身从存储器移除。被计数包装器113移除GC对象116上的引用123,这被垃圾收集组件104识别为从内存移除GC对象116的信号。本发明的进一步实施例包括收集通知。在GC对象被收集时但在结束之前(稍后在本说明书中描述),GC对象通知被引用计数对象。该通知可以解决被引用计数对象直到GC对象被结束为止未被实际释放。它还允许断开被引用计数侧上的弱引用。图1F示出示例循环图。现在参照图1F,图1F示出示例循环图109。图1F中的循环图109包括被引用计数对象111和112、GC对象114和116、被计数包装器113和引用包装器117。GC对象114通过引用包装器117引用被引用计数对象111 (引用126)。被引用计数对象112通过被计数包装器113引用GC对象116 (引用123)。引用128 (外部引用)也引用GC对象114。弱引用129从被引用计数对象112引用被计数对象111。图4示出用于收回分配的系统资源的示例方法400的流程图。将关于计算机架构100的组件和图1F所示的循环图109描述方法400。方法400包括确定要在垃圾收集期间收回用于存储GC对象的一部分系统资源的动作(动作401),该GC对象引用被引用计数对象。例如,垃圾收集组件104可以确定引用128被移除,因此要在垃圾收集期间收回GC对象114。经过引用包装器117,GC对象114可以引用被引用计数对象111。方法400包括收集GC对象的动作(动作402)。例如,垃圾收集组件104可以收集GC对象114。方法400包括在结束释放GC对象之前通知被引用计数对象关于该GC对象已经被收集的动作(403)。例如,分析模块103可以在结束释放GC对象114之前向被引用计数对象111发送通知131。在一些实施例中,也在异步地移除到被引用计数对象的引用之前发送通知131。方法400包括响应于通知,断开从另一被引用计数对象到该被引用计数对象的弱引用的动作(动作404)。例如,可以响应于通知131断开弱引用129。方法400包括继续垃圾收集以确定是否可以收回任何另外部分的系统资源的动作(动作405)。例如,垃圾收集组件104可以继续循环图109的垃圾收集。其他附加实施例包括一个被引用计数对象请求到另一被引用计数对象的GC引用。也就是说,一个被引用计数对象可以请求创建CW,该CW引用到另一被引用计数对象的RW。请求CG引用可以是有用的,其有意地创建循环但却不引起泄露。另外附加实施例包括被引用计数对象请求GC对象移除其对该被引用计数对象的引用。也就是说,可以是GC对象被配置来在结束期间释放其对被引用计数对象的引用,但在这种请求的情况下,释放可能立即发生。本发明可以以其他特定形式实现而不背离其宗旨或基本特性。所描述的实施例无论从哪一方面来看都应当认为仅仅是说明性而非限制性的。本发明的范围因此由所附权利要求书而非前面的说明书指示。落入权利要求书的含义和等同范围内的所有变化都应被包括在其范围内。
权利要求
1.一种用于在计算机系统上同步来自被计数对象图的引用信息与被垃圾收集对象图以准备尝试收回系统资源的方法,该计算机系统包括一个或更多个处理器和系统内存,该计算机系统运行分配各部分系统内存以存储对象的应用,系统内存包括被计数对象图和被垃圾收集对象图,被计数对象图包括其生命期根据引用计数管理的一个或更多个被引用计数对象,被垃圾收集对象图包括其生命期根据垃圾收集管理的一个或更多个GC对象,被引用计数对象通过被计数包装器引用GC对象,GC对象通过引用包装器引用被引用计数对象, 该方法包括确定要执行垃圾收集的动作;响应于所述确定并且在执行垃圾收集之前确定该被计数包装器能够从该引用包装器经由被计数对象图到达的动作;和保护通过被计数包装器引用的该GC对象的生命期的动作;以及执行垃圾收集以确定是否能够收回任何分配的系统资源的动作,垃圾收集考虑由该引用包装器有效引用的该GC对象。
2.如权利要求1所述的方法,还包括在垃圾收集后移除该引用包装器与该GC对象之间的引用的动作。
3.如权利要求1所述的方法,其中保护通过被计数包装器引用的该GC对象的生命期的动作包括创建该GC对象关于该引用包装器的相关性的动作。
4.如权利要求1所述的方法,其中确定该被计数包装器能够从该引用包装器经由被计数对象图到达的动作包括分析模块确定该被计数包装器能够从该引用包装器经由被计数对象图到达的动作。
5.如权利要求1所述的方法,还包括确定该被计数包装器间接引用该GC对象的动作。
6.如权利要求1所述的方法,还包括确定该被计数包装器直接引用该GC对象的动作。
7.如权利要求1所述的方法,其中执行垃圾收集以确定是否能够收回任何分配的系统资源的动作包括移除一个或更多个对象以收回系统内存的动作。
8.一种用于在计算机系统上确定如何引用被引用计数对象以准备尝试收回系统资源的方法,该计算机系统包括一个或更多个处理器和系统内存,该计算机系统运行分配各部分系统内存以存储对象的应用,系统内存包括被计数对象图和被垃圾收集对象图,被计数对象图包括其生命期根据引用计数管理的一个或更多个被引用计数对象,被垃圾收集对象图包括其生命期根据垃圾收集管理的一个或更多个GC对象,被引用计数对象通过被计数包装器引用GC对象,GC对象通过引用包装器引用被引用计数对象,该方法包括确定要执行垃圾收集的动作;响应于所述确定并且在实施垃圾收集之前确定被引用计数对象通过指定类型的引用的可到达性的动作;和基于该指定类型的引用访问关于垃圾收集的信息的动作;以及执行垃圾收集以确定是否能够收回任何分配的系统资源的动作,垃圾收集考虑当确定是否要收回该被引用计数对象时访问的信息。
9.如权利要求8所述的方法,其中确定被引用计数对象通过指定类型的引用的可到达性的动作包括确定该被引用计数对象可通过标准引用到达。
10.如权利要求8所述的方法,其中确定被引用计数对象通过指定类型的引用的可到达性的动作 确定该被引用计数对象可通过被跟踪引用到达。
全文摘要
本发明扩展到在循环图中管理对象生命期的方法、系统和计算机程序产品。本发明的实施例包括例如从混合不同资源收回技术(如引用计数和垃圾收集)的对象图中收回分配的系统资源。响应于确定要执行垃圾收集,检测GC对象与被引用计数对象之间的引用。此外对任何检测到的引用确定引用类型(例如直接、间接、标准、被跟踪、弱化等)。执行垃圾收集以确定是否可以收回任何分配的系统资源。当确定是否要收回对象时,垃圾收集考虑GC对象与被引用计数对象之间的引用。
文档编号G06F9/44GK102999328SQ20121035492
公开日2013年3月27日 申请日期2012年9月10日 优先权日2011年9月9日
发明者M·J·希尔伯格, R·克里什纳斯瓦米 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1