用于计算机存储器的世代动态管理的方法和装置制造方法及图纸

技术编号:2887589 阅读:156 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及在计算机存储器执行世代无用存储单元收集的方法和装置。根据本发明专利技术的一个方面,一种计算机实现的用于动态管理包括第一存储器部分和第二存储器部分的存储器的方法,第二存储器部分被分为多个块,每个块具有一个相关标记,第三无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定选择块是否包括参考第二对象的第一对象,第二对象未包括在选择块。该状态包括在第二无用存储单元收集完成之后是否存储对第二对象的参考的指示,以及如果在第二无用存储单元收集完成之后存储对第二对象的参考,就使用选择标记创建新的根段列阵。(*该技术在2019年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术一般涉及计算机系统的存储器的动态分配的管理。具体地说,本专利技术涉及跟踪计算机系统有关的存储器的各个分开部分之间的参考,以便可以局部执行自动存储-恢复。与计算机系统有关的存储器的数量通常是有限的。因此,通常必须将存储器进行保存和循环。很多计算机编程语言使软件开发者能够在计算机系统内动态分配存储器。某些编程语言要求明确的人工去分配上一次分配的存储器,这可能是复杂和易于出错的。要求明确的人工存储器管理的语言包括C和C++编程语言。其它的编程语言利用自动存储-恢复来恢复存储器,这时该存储器对于保证从恢复系统分配存储器的计算机程序的正确操作不再是必要的。这样的自动存储-恢复系统在没有来自前一次利用该存储器的计算机程序的明确指令或调用的情况下恢复存储器。在面向对象或基于对象的系统,典型的存储器分配单元一般称为一个对象或存储器对象,如本领域技术人员所熟知的。通常使用的对象一般称为“可用存储单元(garbage)”对象,而对于正确执行计算机程序不再必要的对象通常称为“无用存储单元”对象。恢复无用存储单元对象的工作通常称为无用存储单元收集,而自动存储-恢复系统常常被称为无用单元收集程序。由于使用自动存储-恢复系统的计算机程序能够在执行期间改变可用存储器对象,所以这样的计算机程序被认为是变异器(mutator)。以JavaTM(由位于Palo Alto,California的Sun Microsystemms公司开发)和Smalltake programming这样的编程语言编写的计算机程序使用无用单元收集程序来自动管理存储器。对象一般包含对其他对象的参考。因此,由无用单元收集程序管理的计算机存储器区一般包含相互参考的一组对象。附图说明图1是表示包含对象的计算机存储器区的图。存储器10的管理区通常为与计算机系统有关的堆栈,该管理区包含对象20。通常,对象20可以被其他的对象20参考。例如,对象20a具有到对象20b的指针24a。对象20c也具有到对象20b的指针24b。因此,对象20b被对象20a和对象20c参考。存在到存储器10的很多外部参考。如图所示,作为对存储器10的外部参考的固定根段30包括到对象,例如,定位在存储器10的对象20a和对象20c的指针34。对于对象20a-d的实例而言,通过跟随来自固定根段30的参考可访问的全部对象被认为是可用存储单元对象。相应地,通过跟随来自固定根段30的参考不可访问的对象20e被定义为是无用存储单元对象。一般利用无用单元收集程序来识别诸如对象20e之类的无用存储单元对象。通常,使用很多不同算法实现无用单元收集程序。常规的无用存储单元收集算法包括参考计数收集程序,标记扫描收集程序,和复制收集程序。如本领域的技术人员所熟知的,在无用存储单元收集期间,当对象20移动时,必须相应调整对对象20的参考。每次将管理的存储器区分为较小的部分有利于在一个区域局部一次执行无用存储单元收集。一个存储器分区方案是世代无用存储单元收集,其中根据从创建对象的时间测量的对象的生存期将对象分开。将“年轻的”(younger)对象认为是比“年老的”(older)对象更有可能成为无用存储单元。因此,使用世代无用存储单元收集可以增加整个存储器恢复效率。图2是表示在根段和分区为新一代(new generation)和老一代(oldgeneration)的存储器之间的接口的图。通常作为与计算机系统有关的一堆存储器110包括新一代存储器110a和老一代存储器110b。固定根段114,或参照新一代存储器110a和老一代存储器110b中的或者一个或者两个的全局对象,包括到新一代存储器110a内的对象120的指针116,如图所示。根段114可以定位在堆栈,如本领域的技术人员所熟知的。可以将新一代存储器110a内的某些对象120,例如对象120a,认为是根段,这是因为假定对象120a为可用存储单元并包括到另一个对象120d的指针122。当新一代存储器对象126为可用存储单元并指向老一代存储单元对象128时,在老一代存储单元110b中执行的无用存储单元收集通常不“收集”对象128。然而,如果新一代存储器对象126不可用,在新一代存储单元110a中执行的无用存储单元收集将导致不能得到老一代存储单元对象128,由于任何其他对象将不指向老一代存储单元对象128。如果老一代存储单元对象128为不可获得的,在老一代存储单元110b中执行的无用存储单元收集将导致收集老一代存诸单元对象128。应注意在新一代存储单元对象126和老一代存储单元对象128之间指向的指针130,由于指针130横跨新一代存储器110a和老一代存储器110b,所以将其认为是代间指针。当指针130从新一代存储对象126指向老一代存储对象128时,老一代存储对象128认为是被占用的无用存储单元,因为使用新一代无用存储单元收集不能收集老一代存储对象128。另一个存储器分区方案包含将存储器分为较小区域以减少所执行的单个的无用存储单元收集所需的时间。由无用存储单元收集引起的暂停常常会干扰相关的变异器,因此这是不希望的。在某些系统中,无用单元收集程序可能提供有保证的较小的最大暂停持续时间。这样的相关无用单元收集程序被认为是实时无用单元收集程序。在其他系统中,无用单元收集程序可能试图使暂停时间较短,但在某些情况下却不能这样做。公知的试图使暂停时间较短的无用单元收集程序是非分裂的或增量的无用单元收集程序。为操作一个单独的存储器区,无用单元收集程序必须了解到该区域的全部参考。到一个区域的参考对该区域而言称为根段。应该清楚根段可以包括外部参考,例如,固定根段,和来自计算机存储器的其他区的参考。因此,无用单元收第程序通常提供寻找和跟踪根段或参考的方案。一种将参考定位到存储器区的方法扫描存储器内的全部对象。对于大多数系统,扫描存储器内的全部对象是如此费时以致禁止这样做。因此,常常需要效率较高的跟踪方案。无论何时变异器存储一个到对象的参考,为跟踪用于无用单元收集程序目的的参考可以利用附加处理。公知的附加处理是写入屏蔽或存储检验。为使变异器的效率保持在一个可接受的水平,与写入屏蔽有关的花费必须尽可能地低。一种跟踪对一个存储器的参考的方法包括保存一个保留该区的全部根段的置位。这样的置位通常认为是该区的记录置位。当存储对一个区的参考时将检测相关的写入屏蔽。因此,写入屏蔽将参考的位置插入到与该区相关的记录置位。图3是表示使用记录置位跟踪的新一代对象和老一代对象之间的指针的图。存储器302分为新一代对象302a和老一代对象302b。使用记录置位304跟踪从老一代对象310指向新一代对象312的指针314。老一代对象310a的地址存储在记录置位304,这是因为老一代对象310a包括到新一代对象312b的指针314a。类似地,包括到新一代对象312b和312a的指针314b和314c的老一代对象310b的地址也分别存储在记录置位304。由于记录置位包含全部根段,当使用记录置位时直接进行定位用于无用存储单元收集的根段。然而,使用写入屏蔽常常是昂贵的,因为可能需要额外的存储器。此外,当将一个新定位插入记录置位时,有可能特定的定位已出现在记录置位。在插入一个定位之前检验用于复制定位的记录本文档来自技高网...

【技术保护点】
一种计算机实现的用于动态管理与计算机系统相关的存储器的方法,存储器包括分为多个块的第一存储器部分和第二存储器部分,第二存储器部分的每一个块具有一个相关标记,该方法包括:在第一存储器部分执行第一无用存储单元收集;在选择的第二存储器部分 的一个块执行第二无用存储单元收集;在第二存储器部分的选择块执行第三无用存储单元收集,其中第三无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定选择块是否包括参考第二对象的第一对象,第二对象未包括在选择块内,其中该状态包括在 第二无用存储单元收集完成之后是否存储到第二对象的参考的指示;和当在第二无用存储单元收集完成之后存储到第二对象的参考时,使用选择的标记创建一个新的根段列阵。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:S格拉鲁普L巴克
申请(专利权)人:太阳微系统有限公司
类型:发明
国别省市:US[美国]

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

1