用于存储器管理的保守垃圾收集和经标记的整数制造技术

技术编号:14345910 阅读:75 留言:0更新日期:2017-01-04 17:06
公开了用于保守垃圾收集的各方面。在一个方面,标识出包含在调用栈中的包括整数和指针的根对象。整数表示被标记并且可以同未经标记的指针表示相区分。跟踪根对象到相应的存储器位置,使得对指针表示执行后续跟踪并对整数表示跳过后续跟踪。然后,释放分配给调用栈不可到达的对象的存储器。在另一方面,标记与调用栈相关联的对象图,并且生成堆,所述堆包括包含在调用栈的经执行部分中的对象。跟踪调用栈的未经执行部分中所包括的对象到堆上的相应存储器位置,使得仅仅对未经标记的指针表示执行后续跟踪。然后,清除与调用栈的未经执行部分不可到达的堆对象相对应的存储器位置。

【技术实现步骤摘要】
本申请是申请日为2012.4.6,申请号为201280020077.4(国际申请号为PCT/US2012/032639),名为“用于存储器管理的保守垃圾收集和经标记的整数”申请的分案申请。
技术介绍
根据与一些常规系统有关的
技术介绍
,应当注意的是,计算设备具有传统上已存储的信息和相关联的应用。为了这些目的,实现有效的存储器管理方案对于实现增加的计算性能而言是合乎需要的。自动存储器管理方案中的开发与手动存储器管理方案相比是特别合乎需要的。垃圾收集器算法例如是自动存储器管理方案,其尝试回收不再被特定程序使用的对象所占用的存储器。跟踪式垃圾收集器是最常见类型的垃圾收集器。跟踪式垃圾收集器首先确定哪些对象是可到达的(或者,可能是可到达的),并然后丢弃所有剩余的对象。可到达对象可以被定义成如下的对象:针对所述对象,在程序环境中存在可直接地或通过来自其他可到达对象的引用而通向其的某个变量。更确切而言,对象一般可以以两种方式来到达。首先,假设被称为根的一组区别(distinguished)的对象的是可到达的。通常,这些对象包括从调用栈内的任何地方被引用的对象(也就是说,当前正被调用的函数中的所有局部变量和参数)以及任何全局变量。其次,从可到达对象被引用的任何对象本身被认为是可到达的。在具有引用类型和未装箱值类型两者的语言中,常规垃圾收集器的一个难题是,垃圾收集器区分调用栈上的哪些变量是常规值(例如整数),并且哪些是引用(例如指针)。这样的区分将在这样的系统中有益于区分目的,因为整数和引用在其他情况下在表示在存储器中时看上去是相似的。就此而言,垃圾收集器将能够使用该区分来判定是否将特定元素视为引用并跟随该引用,或者其是否仅仅是原语值。当今存储器管理方案的上述缺点仅旨在提供常规系统的一些问题的概览,并且不旨在是穷尽性的。在仔细阅读了以下详细描述后,现有技术的其他问题和各非限制性性实施例的对应好处可变得显而易见。概述此处提供了简化的概述以帮助能够对以下更详细的描述和附图中的示例性、非限制性实施例的各方面有基本或大体的理解。然而,本概述并不旨在是详尽的或穷尽的。相反,本概述的唯一目的在于,以简化的形式提出与一些示例性、非限制性实施例相关的一些概念,作为以下各实施例的更详细的描述的序言。根据一个或多个实施例及其相应公开,结合用于存储器管理的保守垃圾收集描述了各个非限制性方面。在这样的一个方面,提供了用于在保守垃圾收集算法内标记整数的方法。该方法可以包括:标识出包含在调用栈中的可包括整数表示和指针表示的根对象。该实施例还可以包括标记整数表示使得经标记的整数表示能够同未经标记的指针表示相区分。该方法还可以包括:跟踪根对象到相应的一组存储器位置。对于该特定实施例,对未经标记的指针表示执行后续跟踪,而对经标记的整数表示跳过后续跟踪。然后,该方法还可以包括:释放分配给调用栈不可到达的一组对象的存储器。在另一方面,公开了一种被配置为用经标记的整数实现保守垃圾收集算法的存储器管理设备。在这一实施例中,存储器管理设备包括被配置为执行存储在存储器中的计算机可执行组件的处理器。计算机可执行组件包括扫描组件、标记组件、跟踪组件和回收组件。扫描组件被配置为标识出包含在调用栈中的包括整数表示和指针表示的根对象。然后,标记组件被配置为标记整数表示使得经标记的整数表示能够同未经标记的指针表示区分开,而跟踪组件被配置为跟踪根对象到相应的一组存储器位置。对于该实施例,跟踪组件被配置为对未经标记的指针表示执行后续跟踪,其中对经标记整数表示跳过后续跟踪。然后,回收组件被配置为释放分配给调用栈不可到达的一组对象的存储器。在又一方面,公开了用于在保守垃圾收集算法内标记整数的计算机可读存储介质。在这一实施例中,计算机可读存储介质包括用于使得至少一个处理器执行各个动作的计算机可读指令。例如,这样的动作包括:标记与调用栈相关联的对象图并且在调用栈的执行期间生成对象的堆。在此,经标记的对象图中所包括的根对象包括经标记的整数表示和未经标记的指针表示,而对象的堆包括调用栈的经执行部分中所包括的对象。该实施例还包括:跟踪包括在调用栈的未经执行部分中的未经执行的对象到堆上的相应存储器位置。对于该特定实施例,后续跟踪对未经标记的指针表示执行,并且对经标记的指针表示跳过。与堆上不可到达的对象相对应的存储器位置然后被清除,其中不可到达的对象是调用栈的未经执行部分所不能到达的。以下更详细地描述其他实施例和各非限制性性示例、场景和实现。附图说明参考附图进一步描述各非限制性实施例,在附图中:图1示出了根据一实施例的促进实现保守垃圾收集算法的示例性系统;图2是示出了根据一实施例的对象的示例性堆的示图;图3是示出了根据一实施例的示例性对象图的示图;图4是示出了根据一实施例的对存储器的示例性释放的示图;图5是示出了根据一实施例的示例性存储器管理设备的框图;图6是示出根据一实施例的用于实现保守垃圾收集算法的示例性非限制性实施例的流程图;图7是示出根据一实施例的示例性资源管理单元的框图;图8是示出根据一实施例的用于标记整数的示例性非限制性实施例的流程图。图9是表示其中可实现在此处所述的各个实施例的示例性、非限制性联网环境的框图;以及图10是表示其中可实现此处所述的各个实施例的一个或多个方面的示例性、非限制性计算系统或操作环境的框图。具体实施方式概览如
技术介绍
中所述,实现区分调用栈上的整数和指针的垃圾收集算法是合乎需要的。在各个实施例中,就本机代码兼容性重新设计了存储器管理。在一方面,脚本对象是得到较少管理的对象,而非只是存储器的本机片段,使得各对象间的引用计数被消除。此外,实现了保守垃圾收集算法,其中没有假设是指针的所有事物都是已知的。以公共语言运行时(CLR)垃圾收集器为例,栈被有力地键入。然而,使用本机代码(例如,C代码和脚本代码),人们不知道栈上有什么。在这一方面,取代利用引用计数模型,所构思的是直接与对象进行交互。在此公开的各个实施例所针对的是,在保守垃圾收集算法内标记整数。为此目的,应当注意,在此所公开的各方面促进对生成伪指针的可能性更小的文档对象模型执行脚本(例如java脚本)。此外,在此公开的各方面减少了伪指针的概率,因为未经标记的指针和经标记的整数是容易区分的。经标记的指针和保守垃圾收集当web浏览体验从具有最少交互性的对信息的单调呈现发展成在客户机侧具有许多交互性的更丰富应用或小程序体验时,若干问题已产生。更一般的,web浏览体验已发展成信息显示以及与显示器上的对象的更丰富的交互性的混合。伴随这种发展的特定挑战基于使原来的文档对象模型(DOM)适应于流畅地处理脚本代码(诸如,java脚本对象)的体验,原来的文档对象模型最初主要是基于客户机上的本机代码为信息的单调呈现而设计的。为了促进更期望的用户体验,提高速度是特别重要的。例如,使用过去的飞出菜单,web体验基于与服务器的通信对延迟进行闪烁。然而,脚本允许小程序修改飞出菜单上的DOM,而无需返回到服务器。由于人们想要在不返回到服务器的情况下对飞出菜单进行更多动作,使脚本代码快速执行已成为挑战。由于用户体验会受到高效地脚本化DOM的较大影响,因此将DOM改变成尽可能快以最大化交互响应是合乎需要的。在过去,由于对包括使任何对本文档来自技高网
...
用于存储器管理的保守垃圾收集和经标记的整数

【技术保护点】
一种系统,包括:至少一个处理器;以及至少一个存储器,包括:包括一个或多个根对象的调用栈,每个根对象与整数表示或指针表示中的一个相关联;与所述调用栈相关联的对象图,所述对象图包括被标记的整数表示或未经标记的指针表示中的至少一个,被标记的整数表示可与未经标记的指针表示区分开来;以及可在所述至少一个处理器上执行的组件,包括:扫描组件,标识出在调用栈中的所述一个或多个根对象;标记组件,标记在所述对象图中至少一个整数表示;跟踪组件,执行对所述一个或多个根对象中的至少一个到对应的存储器位置的第一跟踪,执行对与未经标记的指针表示相关联的存储器位置的后续跟踪并跳过对与由所述对象图所标识的经标记的整数表示相关联的存储器位置的所述后续跟踪;以及回收组件,释放分配给所述调用栈不可到达的一组对象的存储器。

【技术特征摘要】
2011.04.25 US 13/093,7241.一种系统,包括:至少一个处理器;以及至少一个存储器,包括:包括一个或多个根对象的调用栈,每个根对象与整数表示或指针表示中的一个相关联;与所述调用栈相关联的对象图,所述对象图包括被标记的整数表示或未经标记的指针表示中的至少一个,被标记的整数表示可与未经标记的指针表示区分开来;以及可在所述至少一个处理器上执行的组件,包括:扫描组件,标识出在调用栈中的所述一个或多个根对象;标记组件,标记在所述对象图中至少一个整数表示;跟踪组件,执行对所述一个或多个根对象中的至少一个到对应的存储器位置的第一跟踪,执行对与未经标记的指针表示相关联的存储器位置的后续跟踪并跳过对与由所述对象图所标识的经标记的整数表示相关联的存储器位置的所述后续跟踪;以及回收组件,释放分配给所述调用栈不可到达的一组对象的存储器。2.如权利要求1所述的系统,其特征在于,所述回收组件被配置为将可到达对象保存在堆的原始存储位置中。3.如权利要求2所述的系统,其特征在于,所述回收组件被配置为根据所述堆内的固定的一组边界来维护堆对象的分隔。4.如权利要求1所述的系统,其特征在于,所述回收组件被配置为把被所述调用栈调用的对象放置到堆上,并且其中所述回收组件还被配置为基于所述堆的大小是否超过阈值来发起垃圾收集算法。5.如权利要求1所述的系统,其特征在于,所述调用栈与一脚本的编译相关联。6.如权利要求1所述的系统,其特征在于,所述调用栈与一对象模型的修改相关联。7.一种方法,包括:在与调用栈相关联的对象图中标记整数表示,所述调用栈包括一个或多个根对象,所述对象图包括与被标记的整数表示相关联的至少一个根对象和与未经标记的指针表示相关联的至少一个根对象;在所述调用栈的执行期间生成对象的堆,所述对象的堆包括调用栈的经执行部分中的根对象;执行在所述调用栈的未经执行部分中包括的未经执行的根对象到所述堆上的相应存储器位置的第一跟踪;执行对由所述对象图所标识的未经标记的指针表示相关联的存储器位置的后续跟踪,同时跳过对由所述对象图所标识的经标记的整数表示的所述后续跟踪;以及清除堆上的与所述调用栈的未经执行部分中的一个或多个根对象不可到达的对象相对应的存储器位置。8.如权利要求7所述的方法,其特征在于,进一步包括:在所述调用栈的执行期间监视所述堆的大小,并且清除与对象相对应的存储器位置是由所述堆的大小超出阈值而触发的。9.如权利要...

【专利技术属性】
技术研发人员:S·卢科C·CC·曼
申请(专利权)人:微软技术许可有限责任公司
类型:发明
国别省市:美国;US

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

1