CN103493025B - 用于存储器管理的保守垃圾收集和经标记的整数 - Google Patents

用于存储器管理的保守垃圾收集和经标记的整数 Download PDF

Info

Publication number
CN103493025B
CN103493025B CN201280020077.4A CN201280020077A CN103493025B CN 103493025 B CN103493025 B CN 103493025B CN 201280020077 A CN201280020077 A CN 201280020077A CN 103493025 B CN103493025 B CN 103493025B
Authority
CN
China
Prior art keywords
heap
follow
representation
call stack
integer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201280020077.4A
Other languages
English (en)
Other versions
CN103493025A (zh
Inventor
S·卢科
C·C-C·曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Priority to CN201610697224.1A priority Critical patent/CN106294199B/zh
Publication of CN103493025A publication Critical patent/CN103493025A/zh
Application granted granted Critical
Publication of CN103493025B publication Critical patent/CN103493025B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/70Details relating to dynamic memory management
    • G06F2212/702Conservative garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • Memory System (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

用于存储器管理的保守垃圾收集和经标记的整数
背景技术
根据与一些常规系统有关的背景技术,应当注意的是,计算设备具有传统上已存储的信息和相关联的应用。为了这些目的,实现有效的存储器管理方案对于实现增加的计算性能而言是合乎需要的。自动存储器管理方案中的开发与手动存储器管理方案相比是特别合乎需要的。垃圾收集器算法例如是自动存储器管理方案,其尝试回收不再被特定程序使用的对象所占用的存储器。
跟踪式垃圾收集器是最常见类型的垃圾收集器。跟踪式垃圾收集器首先确定哪些对象是可到达的(或者,可能是可到达的),并然后丢弃所有剩余的对象。可到达对象可以被定义成如下的对象:针对所述对象,在程序环境中存在可直接地或通过来自其他可到达对象的引用而通向其的某个变量。更确切而言,对象一般可以以两种方式来到达。首先,假设被称为根的一组区别(distinguished)的对象的是可到达的。通常,这些对象包括从调用栈内的任何地方被引用的对象(也就是说,当前正被调用的函数中的所有局部变量和参数)以及任何全局变量。其次,从可到达对象被引用的任何对象本身被认为是可到达的。
在具有引用类型和未装箱值类型两者的语言中,常规垃圾收集器的一个难题是,垃圾收集器区分调用栈上的哪些变量是常规值(例如整数),并且哪些是引用(例如指针)。这样的区分将在这样的系统中有益于区分目的,因为整数和引用在其他情况下在表示在存储器中时看上去是相似的。就此而言,垃圾收集器将能够使用该区分来判定是否将特定元素视为引用并跟随该引用,或者其是否仅仅是原语值。
当今存储器管理方案的上述缺点仅旨在提供常规系统的一些问题的概览,并且不旨在是穷尽性的。在仔细阅读了以下详细描述后,现有技术的其他问题和各非限制性性实施例的对应好处可变得显而易见。
概述
此处提供了简化的概述以帮助能够对以下更详细的描述和附图中的示例性、非限制性实施例的各方面有基本或大体的理解。然而,本概述并不旨在是详尽的或穷尽的。相反,本概述的唯一目的在于,以简化的形式提出与一些示例性、非限制性实施例相关的一些概念,作为以下各实施例的更详细的描述的序言。
根据一个或多个实施例及其相应公开,结合用于存储器管理的保守垃圾收集描述了各个非限制性方面。在这样的一个方面,提供了用于在保守垃圾收集算法内标记整数的方法。该方法可以包括:标识出包含在调用栈中的可包括整数表示和指针表示的根对象。该实施例还可以包括标记整数表示使得经标记的整数表示能够同未经标记的指针表示相区分。该方法还可以包括:跟踪根对象到相应的一组存储器位置。对于该特定实施例,对未经标记的指针表示执行后续跟踪,而对经标记的整数表示跳过后续跟踪。然后,该方法还可以包括:释放分配给调用栈不可到达的一组对象的存储器。
在另一方面,公开了一种被配置为用经标记的整数实现保守垃圾收集算法的存储器管理设备。在这一实施例中,存储器管理设备包括被配置为执行存储在存储器中的计算机可执行组件的处理器。计算机可执行组件包括扫描组件、标记组件、跟踪组件和回收组件。扫描组件被配置为标识出包含在调用栈中的包括整数表示和指针表示的根对象。然后,标记组件被配置为标记整数表示使得经标记的整数表示能够同未经标记的指针表示区分开,而跟踪组件被配置为跟踪根对象到相应的一组存储器位置。对于该实施例,跟踪组件被配置为对未经标记的指针表示执行后续跟踪,其中对经标记整数表示跳过后续跟踪。然后,回收组件被配置为释放分配给调用栈不可到达的一组对象的存储器。
在又一方面,公开了用于在保守垃圾收集算法内标记整数的计算机可读存储介质。在这一实施例中,计算机可读存储介质包括用于使得至少一个处理器执行各个动作的计算机可读指令。例如,这样的动作包括:标记与调用栈相关联的对象图并且在调用栈的执行期间生成对象的堆。在此,经标记的对象图中所包括的根对象包括经标记的整数表示和未经标记的指针表示,而对象的堆包括调用栈的经执行部分中所包括的对象。该实施例还包括:跟踪包括在调用栈的未经执行部分中的未经执行的对象到堆上的相应存储器位置。对于该特定实施例,后续跟踪对未经标记的指针表示执行,并且对经标记的指针表示跳过。与堆上不可到达的对象相对应的存储器位置然后被清除,其中不可到达的对象是调用栈的未经执行部分所不能到达的。
以下更详细地描述其他实施例和各非限制性性示例、场景和实现。
附图说明
参考附图进一步描述各非限制性实施例,在附图中:
图1示出了根据一实施例的促进实现保守垃圾收集算法的示例性系统;
图2是示出了根据一实施例的对象的示例性堆的示图;
图3是示出了根据一实施例的示例性对象图的示图;
图4是示出了根据一实施例的对存储器的示例性释放的示图;
图5是示出了根据一实施例的示例性存储器管理设备的框图;
图6是示出根据一实施例的用于实现保守垃圾收集算法的示例性非限制性实施例的流程图;
图7是示出根据一实施例的示例性资源管理单元的框图;
图8是示出根据一实施例的用于标记整数的示例性非限制性实施例的流程图。
图9是表示其中可实现在此处所述的各个实施例的示例性、非限制性联网环境的框图;以及
图10是表示其中可实现此处所述的各个实施例的一个或多个方面的示例性、非限制性计算系统或操作环境的框图。
具体实施方式
概览
如背景技术中所述,实现区分调用栈上的整数和指针的垃圾收集算法是合乎需要的。在各个实施例中,就本机代码兼容性重新设计了存储器管理。在一方面,脚本对象是得到较少管理的对象,而非只是存储器的本机片段,使得各对象间的引用计数被消除。此外,实现了保守垃圾收集算法,其中没有假设是指针的所有事物都是已知的。以公共语言运行时(CLR)垃圾收集器为例,栈被有力地键入。然而,使用本机代码(例如,C代码和脚本代码),人们不知道栈上有什么。在这一方面,取代利用引用计数模型,所构思的是直接与对象进行交互。
在此公开的各个实施例所针对的是,在保守垃圾收集算法内标记整数。为此目的,应当注意,在此所公开的各方面促进对生成伪指针的可能性更小的文档对象模型执行脚本(例如java脚本)。此外,在此公开的各方面减少了伪指针的概率,因为未经标记的指针和经标记的整数是容易区分的。
经标记的指针和保守垃圾收集
当web浏览体验从具有最少交互性的对信息的单调呈现发展成在客户机侧具有许多交互性的更丰富应用或小程序体验时,若干问题已产生。更一般的,web浏览体验已发展成信息显示以及与显示器上的对象的更丰富的交互性的混合。伴随这种发展的特定挑战基于使原来的文档对象模型(DOM)适应于流畅地处理脚本代码(诸如,java脚本对象)的体验,原来的文档对象模型最初主要是基于客户机上的本机代码为信息的单调呈现而设计的。
为了促进更期望的用户体验,提高速度是特别重要的。例如,使用过去的飞出菜单,web体验基于与服务器的通信对延迟进行闪烁。然而,脚本允许小程序修改飞出菜单上的DOM,而无需返回到服务器。由于人们想要在不返回到服务器的情况下对飞出菜单进行更多动作,使脚本代码快速执行已成为挑战。
由于用户体验会受到高效地脚本化DOM的较大影响,因此将DOM改变成尽可能快以最大化交互响应是合乎需要的。在过去,由于对包括使任何对象可脚本化的一组接口(例如,iDispatch、iActiveScript等)的对象链接和嵌入(OLE)自动化的使用,脚本引擎和DOM的本机类之间的通信是低劣的。然而,这些方法是慢的,并因此期望改进。因此,在此公开的方面所针对的是通过在保守垃圾收集算法内标记整数来提高脚本执行速度。
图1示出了根据一实施例的便于实现保守垃圾收集算法的示例性系统。如图所示,系统100可包括存储器管理单元110,该单元通信地耦合到存储器120。在一方面,存储器管理单元110被配置为实现保守垃圾收集算法来管理存储器120中的存储器空间。此外,存储器管理单元110被配置为生成与脚本112的执行相关联的经标记的对象图114。例如,脚本112可以是对DOM执行的java脚本,其中java脚本包括要求分配存储器120中的存储器空间的各个对象。在特定的实施例中,为了促进对存储器120内整数和指针的区分,对应于整数值的脚本对象被存储器管理单元110标记并且被包括在经标记的对象图114中。
在一方面,分配给脚本对象的存储器包括将这些对象存储在堆上。接着参考图2,提供了根据一实施例的对象的示例性堆的框图。如图所示,堆200可包括可用存储器210以及所分配的与各个对象220、230、240、250、260和270相对应的存储器。对于这个特定示例,对象240和270对应于指针值,而对象220、230、250和260对应于整数值。也就是说,对象240是引用了对象230所表示的整数值的指针值,而对象270是引用了对象260所表示的整数值的指针值。
就此而言,对应于整数值的脚本对象可以被标记,使得它们可容易地同指针值相区分。接着参考图3,提供了示出示例性对象图的示图,该示例性对象图促进堆上的经标记/未经标记的对象的映射。如所示那样,对象图300将包括在未经执行的调用栈部分310中的对象映射到堆320。为这些和相关目的,应注意,堆320和可用存储器330一般分别与堆200、可用存储器210类似。
在一方面,利用对象图300来确定堆320上的哪些对象是未经执行的调用栈部分310可到达的。也就是说,跟踪包括在未经执行的调用栈部分310中的根对象到堆320中的相应存储器位置,其中与整数值相对应的根对象被标记。于是,所构思的是,仅仅对可到达的未经标记的指针值执行对根对象的后续跟踪,以标识出被那些指针值引用的可到达对象。相反,对可到达的经标记的整数值,跳过后续跟踪。对于该特定示例,由于可到达对象390是对应于指针值的根对象,因此其未被标记。因此,对可到达对象390执行后续跟踪,其标识出与整数值相对应的可到达对象380。然而,对可到达对象340和370跳过后续跟踪,因为这些根对象是对应于经标记的整数值的根对象。
应当注意,还可以利用对象图300来标识未经执行的调用栈部分310不可到达的对象。在这个特定示例中,不可到达对象350和360被认为是不可到达的,因为它们不对应于未经执行的调用栈部分310中的根对象,而且它们也没有被可到达的指针对象引用。
在标识出不可到达的对象以后,可以清除被分配给这样的对象的存储器。接着参考图4,提供了根据一实施例的对存储器的示例性释放的示图。如所示那样,对象图400包括堆420,其一般与堆200和320类似,其中堆420描绘了对之前分配给不可到达对象350和360的存储器的释放。也就是说,除了可用存储器430以外,堆420现在还包括已释放的存储器450和460。然而,在一方面,将可到达对象440、470、480和490保存在其原始存储位置中(即,堆420没有被损坏(collapse))。
接着参考图5,一框图示出了被配置为根据各个方面实现保守垃圾收集算法的示例性存储器管理单元。如图所示,存储器管理单元500可包括处理器组件510、存储器组件520、扫描组件530、标记组件540、跟踪组件540和回收组件560。
在一个方面,处理器组件510被配置为执行与执行多个功能中的任何功能相关的计算机可读指令。处理器组件510可以是单个处理器或多个处理器,其专用于分析要从存储器管理单元500传递的信息和/或生成可由存储器组件520、扫描组件530、标记组件540、跟踪组件550和/或回收组件560利用的信息。附加地或可替代地,处理器组件510可被配置为控制存储器管理单元500的一个或多个组件。
在另一方面中,存储器组件520被耦合至处理器组件510并被配置为存储由处理器组件510执行的计算机可读指令。存储器组件520还可被配置为存储包括由扫描组件530、标记组件540、跟踪组件550、和/或回收组件560中的任何组件生成的数据在内的多种其它类型的数据中的任何数据。存储器组件520可以被配置为多个不同的配置,包括作为随机存取存储器、带后备电源的存储器、硬盘、磁带等等。还可以在存储器组件520上实现各种特征,如压缩和自动备份,如使用独立驱动器冗余阵列配置。
如所示那样,存储器管理单元500还可包括扫描组件530。在这样的实施例中,扫描组件530被配置为标识出调用栈中包含的包括整数表示和指针表示的根对象。在此所构思的是,将这样的调用栈与对特定对象模型执行的脚本相关联。例如,调用栈可以与在运行时期间促进文档对象模型的修改的java脚本的编译相关联。
如所示那样,存储器管理单元500还可以包括标记组件540,该标记组件540被配置为标记包括在调用栈中的整数表示。在此,应当注意,整数的标记被执行使得经标记的整数表示能够容易地与未经标记的指针表示相区分。为此目的,还应注意,标记组件540可被配置为以多种方式中的任何方式标记整数。例如,标记组件540可以被配置为将整数表示变换成不同的数据结构。在特定的实施例中,这样的变换可以包括让标记组件540被配置为将所述不同的数据结构中的至少一位专用于标记。
在一方面,存储器管理设备500还包括跟踪组件550。在这样的实施例中,跟踪组件550被配置为跟踪由扫描组件530标识出的根对象到相应一组存储器位置。在最初跟踪根对象以后,所构思的是,执行对相关对象的后续跟踪。然而在特定的实施例中,后续跟踪仅仅对未经标记的指针表示执行,并且对经标记的整数表示跳过。
在另一方面,存储器管理设备500还包括回收组件560,该回收组件560被配置为释放被分配给调用栈不可到达的一组对象的存储器。在特定的实施例中,回收组件500可以被配置为将调用栈所调用的对象放置到堆上。在这样的实施例中,回收组件560然后还可以被配置为基于堆的大小是否超过了阈值来发起垃圾收集算法。在另一实施例中,回收组件560可被配置为将各可到达对象分别保存在堆的各原始存储位置中。例如,回收组件560可被配置为根据堆内的固定的一组边界来维护各堆对象的分隔。
图6是示出根据一实施例的用于实现保守垃圾收集算法的示例性非限制性实施例的流程图。在600,标识出包含在调用栈中的包括整数表示和指针表示的根对象。接着在610,标记整数表示标记使得经标记的整数表示可以同未经标记的指针表示相区分。然后在620,跟踪根对象到相应的一组存储器位置,使得对指针表示执行后续跟踪并对整数表示跳过后续跟踪。然后在630,释放分配给调用栈不可到达的对象的存储器。
接着参考图7,示出了被配置为根据各个方面标记整数的示例性资源管理单元的框图。如所示那样,资源管理单元700可包括处理器组件710、存储器组件720、标记组件730、堆组件740、跟踪组件750、释放组件760、监视组件770和制图组件780。
类似于存储器管理单元500中的处理器组件510,处理器组件710被配置为执行与执行多个功能中的任何功能相关的计算机可读指令。处理器组件710可以是单个处理器或多个处理器,其专用于分析要从资源管理单元700传递的信息和/或生成可由存储器组件720、标记组件730、堆组件740、跟踪组件750、释放组件760、监视组件770和/或制图组件780使用的信息。附加地或可替代地,处理器组件710可被配置为控制资源管理单元700的一个或多个组件。
在另一方面中,存储器组件720被耦合到处理器组件710并被配置为存储由处理器组件710执行的计算机可读指令。存储器组件720还可被配置为存储多种其他类型的数据中的任何数据,包括由标记组件730、堆组件740、跟踪组件750、释放组件760、监视组件770和/或制图(graphing)组件780中的任何组件生成的数据。此处,应注意,存储器组件720与存储器管理单元500中的存储器组件520类似。因此,可以理解,存储器组件520的任何前述特征/配置也适用于存储器组件720。
如所示那样,资源管理单元700还可包括标记组件730。在这样的实施例中,标记组件730被配置为标记与调用栈相关联的对象图。在此,应当注意,包括在经标记的对象图中的根对象可以包括经标记的整数表示和未经标记的指针表示。对于一些实施例,还应当注意,资源管理单元700还可以包括制图组件780,该制图组件780被配置为产生由标记组件730标记的对象图。
在一方面,资源管理单元700被配置为管理堆中包括的对象。为了促进这样的管理,资源管理单元700可以包括堆组件740,该堆组件740被配置为在调用栈执行期间生成对象的堆。对于该特定实施例,所构思的是,该对象堆可以包括调用栈的经执行的一部分中所包括的对象。
在另一方面,资源管理单元700还可包括跟踪组件750。在这样的实施例中,跟踪组件750被配置为跟踪调用栈的未经执行部分中的未经执行对象到堆上的相应存储器位置。在此,类似于存储器管理设备500中的跟踪组件550,所构思的是,跟踪组件750可以被配置为在最初跟踪调用栈的根对象以后执行相关对象的后续跟踪。此外所构思的是,这样的后续跟踪仅仅对未经标记的指针表示执行,并且对经标记的整数表示跳过。
如所示那样,资源管理单元700还可包括释放组件760。在这样的实施例中,释放组件760被配置为清除堆上的与如下对象相对应的存储器位置:所述对象被视为调用栈的未经执行的部分所不能到达的。在一方面,释放组件760还可被配置为将调用栈的未经执行部分可到达的各对象的存储分别保存在堆内的它们的原始存储器位置中。在另一方面,资源管理单元700还可以包括监视组件770,该监视组件770被配置为在调用栈的执行期间监视堆的大小。对于该特定实施例,释放组件760然后可以被配置为基于堆大小超过特定阈值来触发分配给不可到达对象的存储器的清除。
图8是示出根据一实施例的用于标记整数的示例性非限制性实施例的流程图。在800,标记与调用栈相关联的对象图标记使得经标记的对象图中所包括的根对象包括经标记的整数表示和未经标记的指针表示。在810,然后在调用栈的执行期间生成对象的堆,其包括调用栈的经执行部分中所包括的对象。接着,在820,跟踪包括在调用栈的未经执行部分中的未经执行的对象到堆上的相应存储器位置。对于该特定实施例,仅仅对指针表示执行后续跟踪,而不对整数表示执行后续跟踪。然后,在830,清除与调用栈的未经执行部分不可到达的堆对象相对应的存储器位置。
示例性联网以及分布式环境
本领域普通技术人员能够理解,此处所描述的用于在保守垃圾收集算法内标记整数的各个实施例可以结合任何计算机或其他客户机或服务器设备来实现,该任何计算机或其它客户机或服务器设备可作为计算机网络的一部分来部署或者被部署在分布式计算环境中,并且可以连接到任何种类的数据存储。在这一点上,此处描述的各实施例可在具有任何数量的存储器或存储单元的、并且任何数量的应用和进程跨任何数量的存储单元发生的任何计算机系统或环境中实现。这包括但不限于具有部署在具有远程或本地存储的网络环境或分布式计算环境中的服务器计算机和客户机计算机的环境。
附图9提供了示例性联网或分布式计算环境的非限制性性示意图。该分布式计算环境包括计算对象或设备910、912等以及计算对象或设备920、922、924、926、928等,这些计算对象或设备可包括如由应用930、932、934、936、938表示的程序、方法、数据存储、可编程逻辑等。可以理解,计算对象或设备910、912等以及计算对象或设备920、922、924、926、928等可包括不同的设备,诸如PDA、音频/视频设备、移动电话、MP3播放器、膝上型计算机等。
每个计算对象或设备910、912等以及计算对象或设备920、922、924、926、928等可经由通信网络940或直接或间接地与一个或多个其他计算对象或设备910、912等以及计算对象或设备920、922、924、926、928等通信。即使在图9中被示为单个元件,但网络940也可包括向图9的系统提供服务的其他计算对象或计算设备,和/或可表示未示出的多个互连网络。每个计算对象或设备910、912等或920、922、924、926、928等还可包含诸如应用930、932、934、936、938之类的应用,该应用可利用API或适用于与根据各实施例提供的来自任何平台的信息作为服务的基础结构进行通信或实现这种基础结构的其他对象、软件、固件和/或硬件。
存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统可由有线或无线系统、本地网络或广泛分布的网络连接在一起。当前,许多网络被耦合至因特网,后者为广泛分布的计算提供了基础结构并包含许多不同的网络,但任何网络基础结构可用于变得与如各实施例中所描述的技术相关联的示例性通信。
由此,可使用诸如客户机/服务器、对等、或混合体系结构之类的网络拓扑结构和网络基础结构的主机。在客户机/服务器体系结构中,尤其在联网系统中,客户机通常是访问另一计算机(例如,服务器)所提供的共享网络资源的计算机。在附图9的图示中,作为非限制性性示例,计算对象或设备920、922、924、926、928等可被认为是客户机和计算对象,或者设备910、912等可被认为是服务器,其中计算对象或设备910、912等提供数据服务,诸如从计算对象或设备920、922、924、926、928等接收数据、存储数据、处理数据、向计算对象或设备920、922、924、926、928发送数据等,但任何计算机都可取决于环境而被认为是客户机、服务器或两者。这些计算设备中的任一个都可以处理数据,或请求可隐含此处一个或多个实施例所描述的存储器管理和相关技术的服务或任务。
服务器通常是可通过诸如因特网或无线网络基础结构之类的远程网络或本地网络访问的远程计算机系统。客户机进程可在第一计算机系统中活动,而服务器进程可在第二计算机系统中活动,它们通过通信介质相互通信,由此提供分布式功能并允许多个客户机利用服务器的信息收集能力。按照用户剖析来利用的任何软件对象可以独立地提供或跨多个计算设备或对象分布。
例如,在其中通信网络/总线940是因特网的网络环境中,计算对象或设备910、912等可以是计算对象或设备920、922、924、926、928等经由诸如HTTP等多种已知协议中的任一种与其通信的web服务器。如所提及的,计算对象或设备910、912等还可用作计算对象或设备920、922、924、926、928等,或者相反,这可以是分布式计算环境的特性。
示例性计算设备
如所提到的,在此描述的各个实施例适用于其中实现用于在保守垃圾收集算法内标记整数的基础结构是合乎需要的任何设备。因此,应当理解,结合此处描述的各实施例来使用,即在设备可以结合用所标记的整数实现保守垃圾收集算法来提供某个功能的任何地方构想了各种种类的手持式、便携式和其它计算设备和计算对象。因此,在下面的图10中描述的以下通用远程计算机仅是一个示例,且所公开的主题的各实施例可以用具有网络/总线互操作性和交互的任何客户机来实现。
尽管并不是必需的,但各实施例的任意一个可以部分地经由操作系统来实现,以供设备或对象的服务开发者使用,和/或被包括在结合可操作组件来操作的应用软件中。软件可在诸如客户机工作站、服务器或其他设备之类的一个或多个计算机所执行的诸如程序模块之类的计算机可执行指令的通用上下文中描述。本领域的技术人员可以理解,网络交互可以用各种计算机系统配置和协议来实施。
因此,图10示出了其中可实现一个或多个实施例的合适的计算系统环境1000的一个示例,但是上面已经弄清楚,计算系统环境1000仅为合适的计算环境的一个示例,而不旨在对各实施例中的任意一个的使用范围或功能提出任何限制。不应将计算环境1000解释为对示例性操作环境1000中示出的任一组件或其组合有任何依赖性或要求。
参考图10,用于实现此处的一个或多个实施例的示例性远程设备可以包括手持式计算机1010形式的通用计算设备。手持式计算机1010的组件可以包括但不限于:处理单元1020、系统存储器1030和将包括系统存储器在内的各种系统组件耦合至处理单元1020的系统总线1021。
计算机1010通常包括各种计算机可读介质,并且可以是可由计算机1010访问的任何可用介质。系统存储器1030可包括诸如只读存储器(ROM)和/或随机存取存储器(RAM)之类的易失性和/或非易失性存储器形式的计算机存储介质。作为示例而非限制性,存储器1030还可以包括操作系统、应用程序、其他程序模块、和程序数据。软件也可以包含在数字多功能盘(DVD)、紧致盘(CD)或其他可移动存储上。
用户可以通过输入设备1040向计算机1010输入命令和信息。监视器或其他类型的显示设备也经由诸如输出接口1050之类的接口连接到系统总线1021。除监视器之外,计算机还可以包括其他外围输出设备,如扬声器和打印机,它们可以通过输出接口1050连接。
计算机1010可使用到一个或多个其他远程计算机(诸如远程计算机1070)的逻辑连接在联网或分布式环境中操作。远程计算机1070可以是个人计算机、服务器、路由器、网络PC、对等设备或其他常见网络节点、或者任何其他远程媒体消费或传输设备,并且可包括以上关于计算机1010所述的任何或全部元件。图10所示的逻辑连接包括诸如局域网(LAN)或广域网(WAN)之类的网络1071,但也可包括其他网络/总线。这些联网环境在家庭、办公室、企业范围的计算机网络、内联网和因特网中是常见的。
如上所述,尽管结合各种计算设备、网络和广告体系结构描述了各示例性实施例,但基本概念可被应用于其中期望管理存储器的任何网络系统和任何计算设备或系统。
有多种实现此处描述的一个或多个实施例的方式,例如,使应用和服务能使用存储器管理的适当API、工具包、驱动程序代码、操作系统、控件、独立或可下载的软件对象等等。可以从API(或其他软件对象)的观点以及从便于根据所描述的实施例中的一个或多个提供存储器管理的软件或硬件对象来构想各实施例。此处描述的各种实现和实施例可以具有完全采用硬件、部分采用硬件并且部分采用软件、以及采用软件的方面。
本文中所使用的词语“示例性”意味着用作示例、实例、或说明。为避免疑惑,本文所公开的主题不限于这些示例。另外,在此所述的被描述为“示例性”的任意方面或设计并不一定要被解释为相比其它方面或设计更优选或有利,也不意味着排除本领域技术人员已知的等效示例性结构和技术。此外,在详细描述或权利要求书中使用术语“包括”、“具有”、“包含”和其他类似词语的程度上,为避免疑惑,这些术语旨在以类似于术语“包括”作为开放的过渡词的方式是包含性的而不排除任何附加或其他元素。
如所述的,此处所述的各种技术可结合硬件或软件或,在适当时,以两者的组合来实现。如此处所使用的,术语“组件”、“系统”等同样旨在指计算机相关实体,或者是硬件、硬件和软件的组合、软件或者是执行中的软件。例如,组件可以是,但不限于是,在处理器上运行的进程、处理器、对象、可执行码、执行的线程、程序和/或计算机。作为说明,在计算机上运行的应用和计算机都可以是组件。一个或多个组件可以驻留在进程和/或执行的线程中,并且组件可以位于一个计算机内和/或分布在两个或更多计算机之间。
如前所述的系统已经参考若干组件之间的交互来描述。可以理解,这些系统和组件可包括组件或指定的子组件、某些指定的组件或子组件和/或附加的组件,并且根据上述内容的各种置换和组合。子组件还可作为通信地耦合到其他组件的组件来实现,而不是被包括在父组件内(层次性)。另外,注意到,一个或多个组件也可以合并到提供聚合功能的单个组件中,或者也可以分成多个单独的子组件,并且,可以提供诸如管理层之类的任何一个或更多中间层,以可通信地耦合到这样的子组件,以便提供集成的功能。此处所述的任何组件也可与一个或多个此处未专门描述的但本领域技术人员一般已知的其他组件进行交互。
鉴于以上描述的示例性系统,参考各附图的流程图将可以理解依照所公开的主题实现的方法。尽管为了说明简洁起见,按照一系列框示出和描述了方法,但是,应该理解和知道,所要求保护的主题不限于框的次序,因为一些框可以按与此处所描绘和描述的不同的次序进行和/或与其他框并发地进行。尽管经由流程图示出了非顺序或分支的流程,但可以理解,可实现达到相同或相似结果的各种其他分支、流程路径和框的次序。此外,并非全部所示的框都是实现下面所述的方法所必需的。
虽然在某些实施例中示出了客户机侧观点,但要出于避免对存在相对应的服务器观点的疑问来理解,反之亦然。类似地,在实施一方法时,可以提供具有存储和被配置为经由一个或多个组件实施该方法的至少一个处理器的相对应的设备。
尽管结合各附图的优选实施例描述了各实施例,但可以理解,可以使用其他类似的实施例,或可以对所描述的实施例进行修改和添加来执行相同的功能而不背离本发明。而且,此处描述的各实施例的一个或多个方面可以在多个处理芯片或设备中实现或跨多个处理芯片或设备实现,且存储可以类似地跨多个设备来实现。因此,本发明不应限于任何单个实施例,而是应该根据所附权利要求书的广度和范围来解释。

Claims (15)

1.一种用于存储器管理的保守垃圾收集的方法,包括:
标识出包含在调用栈中的根对象,其中所述根对象包括整数表示和指针表示;
标记所述整数表示并将经标记的整数表示包括在对象图中,其中经标记的整数表示能够同未经标记的指针表示相区分;
跟踪所述根对象到相应的一组存储器位置;
对与未经标记的指针表示相关联的一组存储器位置执行后续跟踪,并且对与由所述对象图所标识的经标记的整数表示相关联的一组存储器位置跳过所述后续跟踪;以及
释放分配给所述调用栈不可到达的一组对象的存储器。
2.如权利要求1所述的方法,其特征在于,所述标记包括:将所述整数表示变换成不同的数据结构。
3.如权利要求2所述的方法,其特征在于,所述变换包括:将所述不同的数据结构中的至少一位专用于标记。
4.如权利要求1所述的方法,其特征在于,所述释放包括:将所述可到达对象分别保存在堆的原始存储位置中。
5.如权利要求4所述的方法,其特征在于,所述保存包括根据所述堆内的固定的一组边界来维护堆对象的分隔。
6.如权利要求1所述的方法,其特征在于,还包括:
执行所述调用栈,其中被调用的对象被放置在堆上;以及
将所述堆的大小与阈值相比较,其中垃圾收集算法的发起基于所述堆的大小是否超过所述阈值。
7.如权利要求6所述的方法,其特征在于,所述执行包括编译java脚本。
8.如权利要求6所述的方法,其特征在于,所述执行包括修改文档对象模型。
9.一种存储器管理设备,包括:
具有存储在其上的计算机可执行组件的存储器;以及
通信地耦合到所述存储器的处理器,所述处理器被配置为执行所述计算机可执行组件,所述计算机可执行组件包括:
扫描组件,其被配置为标识出包含在调用栈中的根对象,其中所述根对象包括整数表示和指针表示;
标记组件,其被配置为在对象图中标记所述整数表示,其中经标记的整数表示能够同未经标记的指针表示相区分;
跟踪组件,其被配置为跟踪所述根对象到相应的一组存储器位置,其中对与未经标记的指针表示相关联的一组存储器位置执行后续跟踪,并且对与由所述对象图所标识的经标记的整数表示相关联的一组存储器位置跳过所述后续跟踪;以及
回收组件,其被配置为释放分配给所述调用栈不可到达的一组对象的存储器。
10.如权利要求9所述的存储器管理设备,其特征在于,所述标记组件被配置为将所述整数表示变换成不同的数据结构。
11.如权利要求10所述的存储器管理设备,其特征在于,所述标记组件被配置为将所述不同的数据结构中的至少一位专用于标记。
12.如权利要求9所述的存储器管理设备,其特征在于,所述回收组件被配置为将可到达对象分别保存在堆的原始存储位置中。
13.如权利要求12所述的存储器管理设备,其特征在于,所述回收组件(560)被配置为根据所述堆内的固定的一组边界来维护堆对象的分隔。
14.如权利要求9所述的存储器管理设备,其特征在于,所述回收组件被配置为把被所述调用栈调用的对象放置到堆上,并且其中所述回收组件还被配置为基于所述堆的大小是否超过阈值来发起垃圾收集算法。
15.如权利要求9所述的存储器管理设备,其特征在于,所述调用栈与java脚本的编译相关联。
CN201280020077.4A 2011-04-25 2012-04-06 用于存储器管理的保守垃圾收集和经标记的整数 Active CN103493025B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610697224.1A CN106294199B (zh) 2011-04-25 2012-04-06 用于存储器管理的保守垃圾收集和经标记的整数

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/093,724 US8862640B2 (en) 2011-04-25 2011-04-25 Conservative garbage collecting and tagged integers for memory management
US13/093,724 2011-04-25
PCT/US2012/032639 WO2012148650A2 (en) 2011-04-25 2012-04-06 Conservative garbage collecting and tagged integers for memory management

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201610697224.1A Division CN106294199B (zh) 2011-04-25 2012-04-06 用于存储器管理的保守垃圾收集和经标记的整数

Publications (2)

Publication Number Publication Date
CN103493025A CN103493025A (zh) 2014-01-01
CN103493025B true CN103493025B (zh) 2016-10-05

Family

ID=47022110

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201610697224.1A Active CN106294199B (zh) 2011-04-25 2012-04-06 用于存储器管理的保守垃圾收集和经标记的整数
CN201280020077.4A Active CN103493025B (zh) 2011-04-25 2012-04-06 用于存储器管理的保守垃圾收集和经标记的整数

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201610697224.1A Active CN106294199B (zh) 2011-04-25 2012-04-06 用于存储器管理的保守垃圾收集和经标记的整数

Country Status (7)

Country Link
US (3) US8862640B2 (zh)
EP (1) EP2702490B1 (zh)
JP (2) JP2014513354A (zh)
KR (4) KR101935346B1 (zh)
CN (2) CN106294199B (zh)
ES (1) ES2615855T3 (zh)
WO (1) WO2012148650A2 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8862640B2 (en) 2011-04-25 2014-10-14 Microsoft Corporation Conservative garbage collecting and tagged integers for memory management
US20140115291A1 (en) * 2012-10-19 2014-04-24 Advanced Micro Devices, Inc. Numa optimization for garbage collection of multi-threaded applications
KR101703984B1 (ko) * 2014-07-18 2017-02-09 주식회사 큐램 메모리 처리 방법, 및 메모리 처리 시스템
FR3070775B1 (fr) * 2017-09-04 2019-08-23 Vsora Allocation dynamique utilisant plusieurs piles
US10459656B1 (en) 2018-06-25 2019-10-29 International Business Machines Corporation Method and apparatus to represent activation frame for pause-less garbage collection
US11879789B2 (en) * 2019-07-02 2024-01-23 International Business Machines Corporation On-chip thermometer for superconducting quantum computing devices
USD967377S1 (en) 2020-10-08 2022-10-18 Samsung Electronics Co., Ltd. Air purifier
KR20220102421A (ko) * 2021-01-13 2022-07-20 삼성전자주식회사 전자 장치 및 전자 장치의 메모리 관리 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6782192B1 (en) * 1999-04-20 2004-08-24 Victor Company Of Japan, Ltd. Recording medium apparatus and method related to information representing tunes
US7730016B2 (en) * 2005-01-31 2010-06-01 Oracle International Corporation Identification of false ambiguous roots in a stack conservative garbage collector
CN102622599A (zh) * 2012-01-21 2012-08-01 黄资峰 使用点编码的数据输出输入方法

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2920660B2 (ja) * 1990-06-07 1999-07-19 富士ゼロックス株式会社 ガーベッジコレクションシステムにおけるアクセス可能なオブジェクトの判別方法
US5819299A (en) 1996-06-06 1998-10-06 Electric Communities Process for distributed garbage collection
US5920876A (en) * 1997-04-23 1999-07-06 Sun Microsystems, Inc. Performing exact garbage collection using bitmaps that identify pointer values within objects
US6101580A (en) 1997-04-23 2000-08-08 Sun Microsystems, Inc. Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits
US6675354B1 (en) 1999-11-18 2004-01-06 International Business Machines Corporation Case-insensitive custom tag recognition and handling
US6598141B1 (en) * 2001-03-08 2003-07-22 Microsoft Corporation Manipulating interior pointers on a stack during garbage collection
GB0229892D0 (en) 2002-12-21 2003-01-29 Ibm Method and apparatus for caching documents
US7168063B2 (en) 2003-06-10 2007-01-23 Microsoft Corporation Systems and methods for employing tagged types in a dynamic runtime environment
US7249235B2 (en) 2004-06-21 2007-07-24 Oracle International Corporation Architecture for a scalable and user-extensible heap dump analysis tool
US7325106B1 (en) * 2004-07-16 2008-01-29 Sun Microsystems, Inc. Method for monitoring heap for memory leaks
US7873943B2 (en) 2005-12-28 2011-01-18 Intel Corporation Inserting stack clearing code in conservative garbage collection
US7631024B2 (en) 2006-01-03 2009-12-08 Sun Microsystems, Inc. Method and apparatus for facilitating mark-sweep garbage collection with reference counting
US7614003B2 (en) 2006-10-23 2009-11-03 Adobe Systems Incorporated Rendering hypertext markup language content
US20090327377A1 (en) * 2008-06-26 2009-12-31 Tatu Ylonen Oy Ltd Copying entire subgraphs of objects without traversing individual objects
US7937419B2 (en) * 2008-06-26 2011-05-03 Tatu Ylonen Oy Garbage collection via multiobjects
JP5153539B2 (ja) * 2008-09-22 2013-02-27 株式会社日立製作所 メモリ管理方法およびその方法を用いるコンピュータ
US8341608B2 (en) 2008-11-13 2012-12-25 Visicom Media, Inc. Cross-browser toolbar and method thereof for facilitating cross-browser interoperability
US8335806B2 (en) * 2010-02-01 2012-12-18 Oracle America, Inc. Marking algorithm for garbage collection using a rescan map
US8423589B2 (en) * 2011-03-14 2013-04-16 International Business Machines Corporation Copy collector with efficient abort-on-copy transition to mark collector
US8862640B2 (en) 2011-04-25 2014-10-14 Microsoft Corporation Conservative garbage collecting and tagged integers for memory management

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6782192B1 (en) * 1999-04-20 2004-08-24 Victor Company Of Japan, Ltd. Recording medium apparatus and method related to information representing tunes
US7730016B2 (en) * 2005-01-31 2010-06-01 Oracle International Corporation Identification of false ambiguous roots in a stack conservative garbage collector
CN102622599A (zh) * 2012-01-21 2012-08-01 黄资峰 使用点编码的数据输出输入方法

Also Published As

Publication number Publication date
WO2012148650A2 (en) 2012-11-01
KR102061466B1 (ko) 2019-12-31
KR101993793B1 (ko) 2019-06-27
KR102139043B1 (ko) 2020-07-29
JP2018067331A (ja) 2018-04-26
CN106294199A (zh) 2017-01-04
US10628398B2 (en) 2020-04-21
EP2702490A2 (en) 2014-03-05
KR101935346B1 (ko) 2019-01-04
JP2014513354A (ja) 2014-05-29
EP2702490A4 (en) 2015-01-21
US20170322955A1 (en) 2017-11-09
ES2615855T3 (es) 2017-06-08
US20120271866A1 (en) 2012-10-25
US9684679B2 (en) 2017-06-20
KR20140019413A (ko) 2014-02-14
JP6637022B2 (ja) 2020-01-29
EP2702490B1 (en) 2016-11-16
KR20180108850A (ko) 2018-10-04
KR20190058697A (ko) 2019-05-29
WO2012148650A3 (en) 2013-02-28
CN103493025A (zh) 2014-01-01
US20150006557A1 (en) 2015-01-01
KR20190020837A (ko) 2019-03-04
CN106294199B (zh) 2019-11-05
US8862640B2 (en) 2014-10-14

Similar Documents

Publication Publication Date Title
CN103493025B (zh) 用于存储器管理的保守垃圾收集和经标记的整数
Peristeras et al. Towards an enterprise architecture for public administration using a top-down approach
CN102567172B (zh) 用于应用性能测试的并行工作负荷仿真方法和系统
CN104199912B (zh) 一种任务处理的方法及装置
CN101819551B (zh) 记录企业信息系统的服务交互数据的方法和系统
Huang et al. Toward a smart cyber-physical space: a context-sensitive resource-explicit service model
CN110825641B (zh) 一种基于模拟数据生成器的微服务应用测试系统
WO2012165937A1 (en) System and method for optimizing physical resources of virtual machines
CN102736984B (zh) 保守垃圾收集方法和存储器管理设备
Wendel et al. Provenance of software development processes
Tolle et al. Reference models supporting enterprise networks and virtual enterprises
CN1976353A (zh) 恢复和调试失败的网络可访问服务构建的方法和系统
Hussein et al. Scenario-driven development of context-aware adaptive web services
Nascimento et al. A case study in software product lines-the case of the mobile game domain
Wan et al. Service composition pattern generation for cloud migration: A graph similarity analysis approach
Bell et al. Semantic web service architecture for simulation model reuse
Lajmi et al. Cbr method for web service composition
Liu et al. A framework for automated fault recovery planning in large-scale virtualized infrastructures
Bhakti et al. Formal Modelling of an Autonomic Service Oriented Architecture
Kapuruge et al. ROAD4SaaS: Scalable business service-based saaS applications
Tsai et al. Dynamic collaboration simulation in service-oriented computing paradigm
CN114710542B (zh) 一种基于rpc的泛化路由mock方法及装置
Albashiri et al. Agent-enriched data mining using an extendable framework
Ludwig et al. Integrating design and runtime variability support into a system ADL
Montarnal et al. Social vision of collaboration of organizations on a cloud platform

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150728

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150728

Address after: Washington State

Applicant after: Micro soft technique license Co., Ltd

Address before: Washington State

Applicant before: Microsoft Corp.

C14 Grant of patent or utility model
GR01 Patent grant