CN100343821C - 用于计算机存储器的世代动态管理的方法和装置 - Google Patents

用于计算机存储器的世代动态管理的方法和装置 Download PDF

Info

Publication number
CN100343821C
CN100343821C CNB991057449A CN99105744A CN100343821C CN 100343821 C CN100343821 C CN 100343821C CN B991057449 A CNB991057449 A CN B991057449A CN 99105744 A CN99105744 A CN 99105744A CN 100343821 C CN100343821 C CN 100343821C
Authority
CN
China
Prior art keywords
mark
garbage collection
piece
storer
root segment
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.)
Expired - Lifetime
Application number
CNB991057449A
Other languages
English (en)
Other versions
CN1236921A (zh
Inventor
S·格拉鲁普
L·巴克
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of CN1236921A publication Critical patent/CN1236921A/zh
Application granted granted Critical
Publication of CN100343821C publication Critical patent/CN100343821C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation
    • Y10S707/99957Garbage collection

Abstract

本发明涉及在计算机存储器执行世代无用存储单元收集的方法和装置。根据本发明的一个方面,一种计算机实现的用于动态管理包括第一存储器部分和第二存储器部分的存储器的方法,第二存储器部分被分为多个块,每个块具有一个相关标记,该方法包括在第一存储器部分执行第一无用存储单元收集。该方法也包括在第二存储器部分的一个选择的块执行第二无用存储单元收集。在第二存储器部分的选择块执行第三无用存储单元收集。第三无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定选择块是否包括参考第二对象的第一对象,第二对象未包括在选择块。该状态包括在第二无用存储单元收集完成之后是否存储对第二对象的参考的指示,以及如果在第二无用存储单元收集完成之后存储对第二对象的参考,就使用选择标记创建新的根段阵列。

Description

用于计算机存储器的世代动态管理的方法和装置
技术领域
本发明一般涉及计算机系统的存储器的动态分配的管理。具体地说,本发明涉及跟踪计算机系统有关的存储器的各个分开部分之间的参考,以便可以局部执行自动存储-恢复。
背景技术
与计算机系统有关的存储器的数量通常是有限的。因此,通常必须将存储器进行保存和循环。很多计算机编程语言使软件开发者能够在计算机系统内动态分配存储器。某些编程语言要求明确的人工去分配上一次分配的存储器,这可能是复杂和易于出错的。要求明确的人工存储器管理的语言包括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。
由于记录置位包含全部根段,当使用记录置位时直接进行定位用于无用存储单元收集的根段。然而,使用写入屏蔽常常是昂贵的,因为可能需要额外的存储器。此外,当将一个新定位插入记录置位时,有可能特定的定位已出现在记录置位。在插入一个定位之前检验用于复制定位的记录置位是昂贵的。另一方面,消除用于复制定位的检验可以使记录置位变得不必要地大。如本领域技术人员所熟知的,一般不存在保留记录置位的复制数量的上限。当存储对一个定位的参考时,该定位常常已包含前一个参考。因此,与存储操作之前的定位有关的记录置位入口将通常在下面的存储操作后变为无效。移去旧入口在某些情况下可能是昂贵的操作,而将旧入口留在原位将导致记录置位占据额外的存储器。
公知的经常使用的跟踪对一个存储器区的参考的另一种方案是卡片标记。通常,卡片标记包括在概念上将存储器分为称为卡片的相对较小的部分。然后,无用单元收集程序将一个比特阵列分配给每个卡片。当存储一个参考时,写入屏蔽将计算相应的卡片阵列入口并设置相关位。该处理过程称为“无效”(dirtying)卡片。出于效率的考虑,在比特阵列的地方常常使用一个字节或一个字阵列。
使用卡片标记的一个优点是写入屏蔽花费相对较小。使用卡片标记的另一个优点是卡片标记所需的存储器数量固定。然而,在无用存储单元收集时定位根段所需的处理量常常很大,例如,与利用记录置位的系统相比需要较多的处理。无用单元收集程序仅是大概知道在何处已发生参考存储。即,无用单元收集程序仅知道卡片标记阵列在何处具有无效的入口。一旦识别无效的入口,必须扫描用于根段的相应的卡片。尽管扫描用于根段的卡片通常比扫描整个存储器花费小,扫描卡片常常仍是昂贵的。如本领域的技术人员所熟知的,当无用单元收集程序定位一个根段时,必须使相应的卡片阵列入口保持无效以便下一次调用无用单元收集程序定位根段。
可以使用组合记录置位和卡片标记的方案。如上所述写入屏蔽将执行卡片标记。然而,在无用存储单元收集时,无用单元收集程序为每一个卡片构造记录置位。当完成无用存储单元收集时,记录标记阵列可以清除。使用组合的记录置位和卡片标记的方案减少了后续的无用存储单元收集所需的扫描量,因此,提高整个无用存储单元收集处理的效率。然而,实现这样的方案常常是复杂的。因此,需要一种高效的实现组合记录置位和卡片标记的方案的方法和装置。
发明内容
本发明涉及执行计算机存储器内的世代无用存储单元收集的方法和装置。
根据本发明的一个方面,提供了一种计算机实现的用于动态管理与计算机系统相关的存储器的方法,存储器包括分为多个块的第一存储器部分和第二存储器部分,第二存储器部分的每一个块具有一个相关标记,该方法包括:在第一存储器部分执行第一无用存储单元收集;在选择的第二存储器部分的一个块执行第二无用存储单元收集;在第二存储器部分的选择块执行第三无用存储单元收集,其中第三无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定选择块是否包括参考第二对象的第一对象,第二对象未包括在选择块内,其中该状态包括在第二无用存储单元收集完成之后是否存储到第二对象的参考的指示;和当在第二无用存储单元收集完成之后存储到第二对象的参考时,使用选择的标记创建一个新的根段阵列。
其中当确定第一对象不参考未包括在选择块内的第二对象时,该方法进一步包括释放选择块。
其中当确定选择块包括参考第二对象的第一对象时,执行第三无用存储单元收集的步骤进一步包括:使用选择块标记确定第二对象是否处于第一存储器部分;和当确定第二对象处于第一存储器部分时,更新与选择块标记有关的根段阵列以保证与选择块标记有关的根段阵列包括到第二对象的指针。
其中当确定选择块包括参考第二对象的第一对象时,执行第三无用存储单元收集的步骤进一步包括:使用选择块标记确定第二对象是否处于第二存储器部分;和当确定第二对象处于第二存储器部分时,扫描与选择块标记有关的根段阵列以识别对其它对象的参考。所述方法可以进一步包括跟踪对其它对象的参考。
其中将多个块排列为多个列车,选择块包括在多个列车中的第一个中,执行第三无用存储单元收集的步骤进一步包括:至少部分根据与该块相关的标记指示的状态确定第二对象是否包括在多个列车中的第二个中。其中当确定第二对象未处于多个列车中的第二个中时,该方法进一步包括释放第二个列车。
其中将多个块排列为多个车厢,多个车厢进一步排列为多个列车,选择块包括在多个车厢的第一个中,从多个列车中选择的一个列车由这些车厢构成,执行第三无用存储单元收集的步骤进一步包括:至少部分根据与该块相关的标记指示的状态确定第二对象是否处于构成选择的列车的多个车厢的第二个。其中当确定第二对象未处于选择的列车的第二个车厢中时,该方法进一步包括释放第二车厢。
本发明还提供了一种计算机实现的用于动态管理与计算机系统相关的存储器的方法,存储器被分为多个块,每一个块具有一个相关标记,该方法包括:在选择的一个块执行第一无用存储单元收集;在选择块执行第二无用存储单元收集,其中第二无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定选择块是否包括参考第二对象的第一对象,第二对象未包括在选择块,该标记指示的状态包括第一无用存储单元收集完成之后是否存储对第二对象的参考的指示;和当第一无用存储单元收集完成之后存储对第二对象的参考时,使用选择块创建一个新的根段阵列。
其中当确定第一对象不参考未包括在选择块的第二对象时,该方法进一步包括释放选择块。
其中将多个块排列为多个列车,选择块包括在多个列车的第一个,执行无用存储单元收集的步骤进一步包括:至少部分根据与该块相关的标记指示的状态确定第二对象是否处于多个列车的第二个;和  当确定第二对象处于多个列车的第二个中时,该方法进一步包括释放第二列车。
所述的方法进一步包括一个附加的存储器部分,其中当确定第二对象未包括在选择块中时,在选择块执行无用存储单元收集的步骤进一步包括:至少部分根据与选择块相关的标记指示的状态确定第二对象是否包括在附加的存储器部分。
本发明还提供了一种计算机实现的用于在计算机存储器内分配一个选择对象的方法,该计算机存储器包括第一部分,第二部分,和与第二部分的组件相关的字阵列,该字被排列为指示其相关组件的内容是否参考第一部分内的对象,该方法包括:确定第一部分是否适合于要分配的选择对象;当确定第一部分适合于要分配的对象时分配选择的对象;和当确定第一部分不适合于要分配的对象时在第一部分执行无用存储单元收集,其中执行无用存储单元收集包括扫描定位选择字的字阵列,该选择字表示其在第二部分的相关组件参考第一部分的特定对象,以及在无用存储单元收集期间保留第一部分内的特定对象。
其中当表示其在第二部分的相关组件参考特定对象的选择标记被定位时,在第一部分执行无用存储单元收集进一步包括:跟踪第二部分的相关组件的根段的关联,其中跟踪根段的关联包括将根段更新到计算机存储器内的新位置并更新选择字。
其中更新选择字包括:确定选择的一个根段处于第二部分并参考选择的第一部分的一个特定对象的时间;和当确定选择的根段处于第二部分并参考第一部分内的选择的一个特定对象时,更新选择字来指示选择的根段处于第二部分并且选择的特定对象处于第一部分。
所述的方法进一步包括:在第二部分执行无用存储单元收集,其中执行无用存储单元收集包括跟踪与选择的一个组件相关的根段关联,该根段与新一代存储器有关,因此跟踪根段关联包括更新字阵列中的某些字。
本发明还提供了一种用于计算机系统的计算机可读媒体,该计算机系统包括第一存储器部分和排列为多个组件的第二存储器部分,该计算机可读媒体具有用来组成标记的计算机代码,该标记与从多个组件选择的第一组件有关,该标记包括:第一指示器排列为识别第一选择组件是否参考包含在第一存储器部分内的对象。
其中,所述标记进一步包括对对象的参考。
本发明还提供了一种计算机系统,包括:存储器,包括第一存储器部分和分段为多个块的第二存储器部分;耦合到存储器的处理器,处理器组成为用来排列标记阵列,一组根段阵列、第一无用存储单元收集、以及利用存储器的第二无用存储单元收集,每个标记对应于第二存储器部分的相关块,该标记组成为指示其相关块何时参考其相关块之外的对象;所述根段阵列排列为保留对象的地址,其中从标记阵列选择的标记与一组根段阵列相关;所述第一无用单元收集,用于恢复第一存储器内的空间;和所述第二无用单元收集,用于至少部分根据标记阵列内的标记的状态恢复第二存储器内的空间。
其中从标记阵列选择的第一标记包括指示器部分,该指示器识别第一标记的相关块何时参考第一存储器部分的第一对象。
其中将多个块排列为多个车厢,将多个车厢进一步排列为多个列车。
本发明还提供了一种计算机系统,包括:被分为多个块的存储器;耦合到存储器的处理器,处理器组成为用来排列标记阵列,一组根段阵列、以及利用存储器的一个无用存储单元收集,根段阵列排列为保留对象的地址,其中从标记阵列选择的标记与该组根段阵列相关;所述无用存储单元收集用于至少部分根据标记阵列的标记状态恢复存储器内的空间。
本发明还提供了一种用于动态管理与计算机系统相关的存储器的计算机可读媒体,该计算机可读媒体包括:在计算机的第一存储器部分执行第一无用存储单元收集的计算机代码;在计算机的第二存储器部分执行第二无用存储单元收集的计算机代码,第二存储器部分被分为多个块,其中第二无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定从多个块选择的块是否包括参考第二对象的第一对象,第二对象未包括在选择块中。
本发明还提供了一种用于使计算机系统的处理器动态管理与计算机系统相关的存储器的计算机可读媒体,该计算机可读媒体包括:在计算机的第一存储器部分执行第一无用存储单元收集的计算机代码;在计算机的第二存储器部分执行第二无用存储单元收集的计算机代码,第二存储器部分被分为多个块,其中第二无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定从多个块选择的块是否包括参考第二对象的第一对象,第二对象未包括在选择块。
在阅读下面的详细描述并研究附图的各种特征时本发明的这些和其他特征将变得显而易见。
参考下面结合附图所做的描述将更好地理解本发明及其进一步的优点。
附图说明
图1是表示包含根据已有技术的对象的计算机存储器区的图。
图2是表示根据已有技术的在根段与包括新一代和老一代的存储器之间的接口的图。
图3是表示根据已有技术的与记录置位有关的存储器的图。
图4a是表示根据本发明一个实施例的被分段为列车(train)的老一代存储器的图
图4b是表示根据本发明一个实施例的卡片标记阵列和相关的根段阵列库的图
图5是表示执行根据本发明一个实施例的计算机程序的相关步骤的处理流程图。
图6是表示执行根据本发明一个实施例的无用存储单元收集,即,图5的步骤510的过程的处理流程图。
图7a是表示与根据本发明一个实施例的新一代存储器的无用存储单元收集,即,图6的步骤604有关的步骤的处理流程图。
图7b是表示与根据本发明一个实施例的跟随单个根段有关的步骤的处理流程图。
图7c-7e是表示与根据本发明一个实施例的更新卡片标记,即,图7b的步骤728有关的步骤的处理流程图。
图8a-8b是表示与根据本发明一个实施例的执行老一代存储单元的无用存储单元收集,即,图6的步骤608有关的步骤的处理流程图。
图9是表示适合于利用本发明的计算机系统的图。
具体实施方式
使用无用存储单元收集来动态分配计算机程序使用的计算机存储器。通常,无用存储单元收集产生程序执行中的暂停。减少与无用存储单元收集有关的暂停时间的一个方法是将存储器分为多个世代。举例来说,在两代存储器结构中,可以将存储器分为包括新近分配对象的新一代,和包括已分配对象的老一代。应该清楚新近分配的对象较已分配的对象更易于失去作用。因此,在新一代存储器较老一代存储器更经常执行无用存储单元收集。通常,与存储器的整个尺寸相比新一代存储器相对较小。因此,在基本上不引起执行程序期间的中断的情况下通常可以执行新一代存储器的无用存储单元收集。
尽管新一代存储器的无用存储单元收集可能不导致显著的暂停时间,老一代存储器的无用存储单元收集可能仍会导致程序执行期间的显著的暂停时间,这是由于老一代存储器通常比新一代存储器大。另外,如果存在从老一代存储器的对象到新一代存储器的对象的代间指针,在程序执行期间要经常跟踪代间指针。由于与这样的指针有关的老一代存储器的对象被认为是新一代存储器的根段,所以要跟踪代间指针。指针的跟踪,或者从老一代存储器的对象到新一代存储器的对象的参考常常是复杂的,由此也是费时的。
通过将老一代存储器分为较小的区,或块,可以减少与老一代存储器的无用存储单元收集有关的暂停时间。在每次执行老一代存储器的无用存储单元收集时,可以在老一代存储器的特定块执行老一代存储器的无用存储单元收集。通过限定在其中执行老一代存储器的无用存储单元收集的块,并通过在每次执行老一代存储器的无用存储单元收集时收集无用存储单元,可以提高老一代存储器的无用存储单元收集的效率。
如上所述,将老一代存储器分为块来便利老一代存储器的无用存储单元收集。每次执行老一代存储器的无用存储单元收集时,在任何适宜的块执行老一代存储器的无用存储单元收集。即,可以增量地执行老一代存储器的无用存储单元收集。在一个实施例中,可以在已不执行无用存储单元收集的最老的块执行无用存储单元收集。在另一个实施例中,可以在最近很少执行无用存储单元收集的块执行无用存储单元收集。
参考图4a,根据本发明的一个实施例描述在老一代存储器内将存储器分为块。老一代存储器404包括存储器块408。通常按需分配存储器块。即,当基本上全部存在的块被占满时分配附加块。包含与特定程序有关的对象的块408常常被称为“车厢”(cars)。将块或“车厢”408排列为链接的一组,称为”列车”(train)412。例如,列车412a包括车厢408a,408b,而列车412b包括车厢408c,408d,408e以及列车412c包括车厢408f,408g。
通常在特定的车厢408增加到特定的列车412时对列车412内的车厢408排序。例如,在列车412a内,如果车厢408b在车厢408a之后增加到列车412a,将车厢408a与车厢408b都认为是相同列车内的较后车厢。同样,当创建列车412时通常还要对列车412排序。如图所示,如果列车412b在列车412c之后增加到存储器404,则列车412c相对于列车412b以及列车412b内的车厢408c、408d、408e为较后的列车。
使用列车412执行老一代存储器404内的无用存储单元收集的算法一般一次收集规定数目的车厢408。尽管应该清楚在每次老一代存储器的无用存储单元收集期间可以收集任意适合数目的车厢,但在所述实施例,在每次老一代存储器的无用存储单元收集期间仅收集一个单独的车厢408。通过每次收集一个车厢408,老一代存储器的无用存储单元收集的整个长度,和由此与老一代存储器的无用存储单元收集有关的暂停-时间在本质上被限定。这样,在每次老一代存储器的无用存储单元收集期间通过仅收集规定数目的车厢408可以减少通常与老一代存储器的无用存储单元收集有关的较长的暂停时间。
通常,为执行车厢408的无用存储单元收集,跟踪发自或访问老一代存储器的每个车厢408内的对象的全部指针。参考图4b下面将描述一种跟踪指针的方法。当要收集的特定车厢408包括可用存储单元对象时,将该对象复制到指向该对象的或者由该对象指向的列车412。然后,一旦完成对象的复制,就收集或恢复“原始”对象。通常,当选择的列车412不再具有其本身外部的指针时,可以消除选择的列车412,即,释放分配给选择的列车412的存储器。同样,当选择的车厢408不再具有其本身外部的指针时,可以消除选择的车厢408。
在所述实施例,给定的列车412的车厢408的尺寸固定。即,全部的车厢408基本上是相同尺寸。因此,可能单独的车厢408不具有足够的空间容纳链接对象,可以将一个车厢408,例如,车厢408f的一个对象416a链接到第二个车厢408,例如,车厢408g的对象416b。在老一代存储器的无用存储单元收集期间,由于对象416a,416b处在分开的车厢,并互相参考,对象416a,416b可能会继续存在。因此,老一代存储器的无用存储单元收集可以导致车厢408f,408g的收集。因此,除非跟踪列车412c内的车厢408f,408g之间的指针,通常将不释放与车厢408f,408g有关的存储器。
通常,列车412的长度,以及车厢408的尺寸可以有很大变化。车厢408的尺寸与老一代存储器404的尺寸,无用存储单元收集算法的速度,和计算机运行无用存储单元收集算法的速度这些因素有关,但不受这些因素限定。举例来说,在当前的系统下车厢尺寸在大约20KB的存储器到大约100KB的存储器的量级上效果较好,在所述实施例,车厢408包括大约64KB的存储器。
车厢408通常被分为有助于在车厢408执行老一代存储器无用存储单元收集的卡片420,下面参考图4b对其进行描述。尽管卡片420常常包括大约100到大约1000字节,与车厢408一样,卡片420可以采取任何适宜的尺寸。例如,对于包括大约64KB的存储器的车厢408,卡片420可以包括大约512字节。
通过提供存储,或标记可以提高跟踪从老一代存储器对象指向新一代存储器对象的代间指针的效率,该存储,或标记与老一代存储器的不同区相关。在一个实施例中,标记是一个包括一个标志的字,设置该标志来表示特定区的相关部分是否包括指向新一代存储器的对象的指针。使用这样的字可以提供用于跟踪从老一代存储器对象指向新一代存储器对象的代间指针的有效结构。尽管将标记描述为一个字,应该清楚该标记可以任何适宜的存储类型,例如位,字节,和类似的类型。
为跟踪从与老一代存储器的卡片有关的对象指向新一代存储器对象的代间指针,卡片可以具有“跟踪结构”。可以使用跟踪结构,或卡片标记来识别是否存在卡片的代间指针,以及卡片内的对象是否包括指针。图4b是表示根据本发明一个实施例的卡片标记阵列和相关的根段阵列库的图。根段阵列通常是包含根段定位的较小阵列,根段定位被规定为相对卡片的偏移。换言之,根段阵列基本上是一个较小的记录置位。卡片标记452的阵列450包括指向包含在根段阵列460的库464的根段阵列460的指针456。卡片标记452通常与列车内的车厢有关。具体地说,可以将列车内的车厢分为保留新一代存储器对象的多个卡片。因此,列车内的车厢与很多卡片标记452有关。将可以包括或不包括与车厢有关的全部卡片标记452的一组卡片标记452认为是卡片标记452的阵列450。在所述实施例,阵列450可以包括与老一代存储器有关的全部卡片标记452。
在所述实施例,尽管应该清楚卡片标记452通常可以是任何适宜长度的字,但就实例卡片标记452a而言,其为32-位字。在另一个方案中,可以将构成卡片标记的数据结构分为多个部件。尽管可以以任何适合于特定应用的方式赋值构成卡片标记452a的位,在一个实施例,将卡片标记452a的最低位,或最低有效位基本上用作识别卡片标记452a的“状态”,或全部条件的标志。卡片标记452a的最低有效位468是“无效”标志。即,最低有效位468通常用于表示卡片标记452a,具体地说,与卡片标记452a有关的卡片(如图4a所示),是否“无效”。无效的卡片是这样的卡片,即,自最近的无用存储单元收集时起已存储该卡片处的指针。这样的指针包括从老一代存储器指向新一代存储器的代间指针,指向较后的列车的指针,和指向与卡片标记452a有关的同一列车的较后车厢的指针,但不限于这些指针。当设定最低位468时,例如,将最低位468设定为“0”时,该指示为卡片标记452a无效。
卡片标记452a的第二最低位是新一代存储器标志,用于表示卡片标记452a是否包括指向新一代存储器的代间指针。当设定第二最低位470时,例如,设定为“0”时,该指示是卡片标记452a包括指向新一代存储器的代间指针。在所述实施例第三最低位472是较后列车标志。较后列车标志用于表示卡片标记452a是否具有指向较后列车的指针。当设定较后列车标志,或第三最低位472时,该指示是卡片标记452a包括指向较后列车的指针。第四最低位474是相同列车标志,用于表示卡片标记452a是否包括指向同一列车的较后车厢的指针。
在所述实施例,为使卡片标记452a清除,卡片标记452a通常不包括从老一代存储器指向新一代存储器的指针,指向较后的列车的指针,或指向同一列车的较后车厢的指针。因此,在卡片标记452a清除的情况下最低位468,第二最低位470,第三最低位472和第四最低位474全部具有值“1”。换言之,当卡片标记452a清除时卡片标记452a的四个最低位清除。因此,如图所示,卡片标记452a,452b清除,而具有设定的最低位的卡片标记452c是“无效”
卡片标记452a的剩余的28位可以全部被用作指向基本保留与卡片标记452a有关的指针地址的相关根段阵列460的指针。在另一种方案中,就所述实施例的实例而言,卡片标记452a包括27位指针478和保留位480。27位指针478识别从卡片标记452a指向根段阵列460a的指针456a。尽管根段阵列460a的字数目可以有很大变化,根段阵列460a常常由8个字或者16个字组成。根段阵列460通常用于保留到根段的参考。举例来说,根段阵列460a保留与卡片标记450a有关的根段,即,与卡片标记450a有关的卡片(如图4b所示)。
当适合的根段阵列460被占满,就表明发生“根段阵列溢出”。当给定的根段阵列460不能存储太多的根段时,不再跟踪根段。当指向库464的根段阵列460的指针的数量相对于库464中用于分配的可用根段阵列460过大时发生根段阵列溢出。因此,当执行无用存储单元收集时,一般查找与根段阵列溢出有关的指针和卡片以识别根段。当发生根段阵列溢出时,27位指针478设定为空。即,27位指针478内的27位设定为“0”。
保留位480可以用于与无用存储单元收集过程直接相关或不直接相关的多个适当的目的。适当的目的包括使用保留位480指示卡片标记452a的使用时间,但不限于该目的。应该清楚通过减少与卡片标记452a内的指针,例如,27位指针478有关的位数目也可以将附加保留位包括在卡片标记452a。
使用卡片标记与无用存储单元收集处理一起跟踪包括到新一代存储器的对象的代间指针的车厢内的卡片。在一个实施例,在计算机程序执行期间,可以更新卡片标记使得该卡片标记基本上保持为当前状态。然后,在无用存储单元收集期间,可以使用代间指针检查卡片标记来识别卡片。
当卡片标记用于协助计算机程序执行期间的无用存储单元收集时,通常查找并更新卡片标记来识别被该卡片标记参考的对象。下面参考图5,根据本发明的一个实施例将描述与执行使用无用存储单元收集的程序有关的步骤。在执行程序之前,在步骤502初始化与程序有关的卡片阵列。在一个实施例,如上文参照图4b所提到的,与一个车厢有关的卡片阵列包括与程序使用的对象有关的卡片标记,或到卡片标记的参考。因此,卡片阵列通常用于跟踪程序使用的对象。在初始化卡片阵列之后,在步骤503执行程序直到要求分配一个对象或存储一个对象的指针为止。分配一个对象通常包括将存储器指定给一个对象,而存储一个对象的指针包括存储到第一对象内的另一个对象的指针。
在执行期间,存在周期性存储指针的指令。当存储指针时,如步骤504所示,在步骤512,识别对应于其指针被存储的对象的卡片阵列中的一入口。一旦识别卡片阵列入口,在步骤514将该卡片阵列入口标记为无效。标记卡片阵列入口,即,卡片标记,为无效包括设定该入口的无效标志,即,上文参照图4b描述的入口452a最低位468。在卡片标记标记为无效之后,使用任何适宜的方法在步骤516存储指针。一旦写入指针,处理流程返回到步骤503,在这里继续执行程序。当程序终止时,在初始化卡片标记阵列的步骤502再次开始程序的任何重复执行。
执行程序通常提供分配对象的指令。在一个实施例,返回步骤504,当分配一个对象时,在步骤506确定是否存在足够的新一代存储器用于要分配的对象。如果步骤506确定存在足够的新一代存储器用于分配一个对象,在步骤508分配一对象,处理流程返回步骤503,在这里确定是否存在要存储的指针。
如果步骤506确定不存在足够的新一代存储器用于要分配的对象,处理流程返回步骤510,在这里执行无用存储单元收集。在无用存储单元收集期间,可以清除新一代存储器和可能的老一代存储器以释放新一代存储器部分以便可以分配对象。尽管应该清楚可以使用任何适宜的无用存储单元收集方法,下面参考图6将描述一个特定的适宜的无用存储单元收集方法。在步骤510执行无用存储单元收集之后,处理流程返回步骤506,在这里确定无用存储单元收集是否提供足够的新一代存储器用于要分配的一个对象,即,在步骤503进行其分配的对象。
参考图6,根据本发明的一个实施例描述与执行无用存储单元收集有关的步骤。即,描述图5的步骤510。可以在新一代存储器和老一代存储器执行无用存储单元收集以释放足够的存储器空间用于要分配的对象。如果在其上执行无用存储单元收集的系统是多-进程系统,就使用任何适宜的方法在步骤602同步这些进程。只要要求同步的任何进程被同步了,在步骤604就执行新一代存储器的无用存储单元收集。下面参考图7a描述与执行这样的新一代存储器的无用存储单元收集的一个方法有关的步骤。
在步骤604执行新一代存储器的无用存储单元收集之后,处理流程进入步骤606,在这里确定是否必须对老一代存储器执行无用存储单元收集。在所述实施例,周期性执行老一代存储器的无用存储单元收集。即,在经过预定的时间量之后,执行老一代存储器的无用存储单元收集。然而,在另一个实施例,在确定是否必须对老一代存储器执行无用存储单元收集时可以使用不同的或附加的标准。
如果确定必须对老一代存储器执行无用存储单元收集,在步骤608执行使用卡片标记方案的老一代存储器的无用存储单元收集。尽管与使用卡片标记方案执行老一代存储器的无用存储单元收集有关的方法可以有很大变化,参考图8a和8b描述一个适宜的老一代存储器的无用存储单元收集方法。
一旦在步骤608完成老一代存储器的无用存储单元收集,执行无用存储单元收集的整个过程就能够完成分配对象。因此,处理流程进入图5的步骤506,在这里确定是否存在足够的新一代存储器用于要分配的一个对象。同样,如果步骤606确定不必进行老一代存储器的无用存储单元收集,处理流程也进入图5的步骤506。
图7a是表示根据本发明的一个实施例的与新一代存储器无用存储单元收集,即,图6的步骤604有关的步骤的流程图。在步骤701,跟踪固定根段。如前所述,固定根段为这样的根段,即,直接指向通过无用存储单元收集被清除的新一代存储器或老一代存储器的堆栈的可用存储单元对象。跟踪固定根段通常需要传递地跟踪根段的参考。下面参考图7b-7e描述与跟踪固定的或其他的根段有关的实际步骤。
在跟踪固定根段之后,在步骤702扫描卡片阵列以便使用设定的无效标志或者新生成标志或者二者都使用以便定位卡片阵列的下一入口。如前所述,在一个实施例,“设定”一位的含义是将值“0”赋值给该位,而“清除”一位的含义是将值“1”赋值给该位。在步骤703,使用一个新生成标志或者设定的无效标志束判定是否已找到一入口或一个卡片标记。如果已找到这样的一入口,处理流程进入步骤704,在这里确定该入口是否无效。
如果步骤704确定该入口无效,在步骤707将与该入口有关的卡片标记为清除。应该清楚将卡片标记为清除的含义是标记与该卡片有关的卡片标记为清除。在步骤707将该卡片标记为清除之后,处理流程进入步骤708,在这里扫描卡片内的全部对象以定位接着要跟踪的根段。如前所述,下面参考图7b-7e将讨论与跟踪根段有关的步骤。一旦跟踪根段,处理流程返回步骤702,在这里扫描卡片阵列使用无效标志或设定的新生成标志定位下一入口,即,卡片标记。
如果步骤704确定该入口未无效,该入口就具有设定的新标志。换言之,该入口包括代间指针。如果该入口未无效,处理流程从步骤704进入步骤706,在这里确定与该入口有关的根段阵列是否已溢出。溢出的根段阵列是不具有足够的空间来接受附加根段的插入的根段阵列。如果确定与该入口有关的根段阵列溢出,处理流程进入步骤707,在这里将与该入口有关的卡片标记为清除。
处理流程从步骤714进入步骤718,其中扫描与该入口有关的块,并跟踪与该块有关的根段。接着,处理流程返回步骤702,该步骤是扫描卡片阵列来寻找卡片阵列的具有设定为零的最低位的下一入口。
当在步骤703未找到一个适当的入口,即,具有设定为零的最低位的入口,就跟踪新一代存储器内的根段直到在步骤710已扫描全部复制的对象。一旦已扫描全部复制的对象,就完成新一代存储器无用存储单元收集。
通常,如前所述,无用存储单元收集包括跟踪根段。下面参考图7b,将描述根据本发明的一个实施例的与跟踪单独的一个根段有关的步骤。处理从步骤720确定根段是否指向其中正进行无用存储单元收集的存储器区开始。如果确定根段未指向其中正进行无用存储单元收集的区,就完成跟踪根段的处理。另一方面,如果步骤720确定根段确实指向其中正进行无用存储单元收集的区,然后,在步骤721,确定卡片标记的标题区是否保留正向指针。即,确定是否通过与卡片标记有关的正向指针识别新存储器定位。
如果确定标题区确实保留正向指针,处理流程从步骤721进入步骤722,在这里将根段更新到通过正向计数器识别的新定位。在更新根段之后,相应地在步骤728更新卡片标记。下面参考图7c描述与更新卡片标记有关的步骤。一旦更新卡片标记,就完成跟踪根段的过程。
回到步骤721,如果确定标题区未保留正向指针,在步骤724将由该根段识别的对象复制到新定位,并将正向指针插入到该对象的标题。正向指针识别该对象的新定位。当正向指针已插入到标题时,在步骤726将根段更新到新定位。然后,在步骤728,更新相关的卡片标记,并完成跟踪根段的过程。
参考图7c-7e,将描述根据本发明的一个实施例的与更新卡片标记有关的步骤,即,图7b的步骤728。在步骤740,确定指针是否从老一代存储器指向新一代存储器。如果指针未从老一代存储器指向新一代存储器,然后,在步骤746,确定是否设定新一代存储器标志来指示存在从老一代存储器指向新一代存储器的指针。
在步骤752,确定当步骤746确定已设定新一代存储器标志时根段阵列是否已溢出。如果根段阵列溢出,就完成更新卡片标记的过程。然而,如果根段阵列未溢出,在步骤754确定根段阵列是否占满。如果确定根段阵列未占满,处理流程进入步骤750,其中将根段,即,被跟踪的根段,插入到根段阵列,并完成更新卡片标记的过程。如果步骤754确定根段阵列占满,处理流程进入步骤755,在这里设定卡片标记来指示存在根段阵列的溢出。在设定卡片标记之后,完成卡片标记更新过程。
回到步骤746并确定是否设定新一代存储器标志,当确定未设定新一代存储器指针时,在步骤747,设定新一代存储器指针来指示该指针从老一代存储器指向新一代存储器。在步骤748分配根段阵列并设定卡片标记来指向分配的根段阵列。处理流程从步骤748进入步骤749,确定根段阵列的分配是否成功。如果根段阵列的分配成功,在步骤750将跟踪的根段插入到根段阵列。另一方面,如果根段阵列的分配未成功,处理流程就进入步骤755,在这里设定卡片标记来指示根段阵列溢出。在一个实施例,设定卡片标记来指示根段阵列溢出包括将指针,即,卡片标记内的27-位指针,设定为空。
如果步骤740的确定是指针未从老一代存储器指向新一代存储器,处理流程进入步骤742,确定是否存在指向老一代存储器内的较后列车的指针。如果确定该指针指向老一代存储器内的老一代存储器较后列车,在步骤760就确定是否设定新一代存储器标志来指示存在指向新一代存储器的指针。如果指示为设定新一代存储器标志,处理流程进入步骤775,确定是否设定较后列车标志。在上述实施例,较后列车标志是卡片标记的第三最低位,并指示指针是否指向较后列车,如上所述。如果确定设定较后列车标志,就完成更新卡片标记的过程。同样,如果确定未设定较后列车标志,在步骤776设定较后列车标志。一旦设定较后列车溢出标志,就完成卡片标记更新过程。
如果步骤760确定未设定新一代存储器标志,处理流程进入步骤766,在这里确定是否设定较后列车标志。如果步骤766确定未设定较后列车标志,在步骤767设定较后列车标志来指示到较后列车的指针的存在。一旦设定较后列车标志,在步骤768分配根段阵列并设定卡片标记来指向分配的根段阵列。在步骤769确定新根段阵列的分配是否成功。如果分配成功,在步骤770,在根段已不出现在根段阵列的情况下将跟踪根段插入到根段阵列。然后,完成更新卡片标记的过程。另一方面,如果在步骤769新根段阵列的分配未成功,处理流程就从步骤769进入步骤762,在这里设定卡片标记来指示根段阵列溢出。在设定卡片标记来指示根段阵列溢出之后,完成更新卡片标记的过程。
回到步骤766,如果确定设定较后列车标志来指示存在到较后列车的指针,在步骤772就确定对应的根段阵列是否溢出。如果根段阵列溢出,在步骤762就设定卡片标记来指示根段阵列溢出。另一方面,如果在步骤772确定根段阵列未溢出,并且如果根段已不出现在根段阵列,在步骤770就将跟踪根段插入到根段阵列。
回到步骤742,确定指针是否指向老一代存储器的较后列车,如果确定指针未指向老一代存储器的较后列车,然后,在步骤744,确定指针是否指向同一列车的较后车厢。如果指针未指向同一列车的较后车厢,就完成卡片标记更新过程。然而,如果确定指针指向同一列车的较后车厢,处理流程进入步骤780,确定是否设定新一代存储器标志来指示存在到新一代存储器的指针。
如果步骤780指示为设定新一代存储器标志,在步骤782确定是否设定同一列车标志。即,确定是否存在到同一列车的较后车厢的指针。如果设定同一列车标志,就完成更新卡片标记过程。同样,如果未设定同一列车标志,在步骤783设定同一列车标志。一旦设定同一列车标志,就完成更新卡片标记过程。
当步骤780确定未设定新一代存储器标志时,处理流程进入步骤786,在这里确定是否设定卡片标记的较后列车标志来指示存在到较后列车的指针。如果设定较后列车标志,处理流程进入步骤782,在这里确定是否设定相同列车标志。
如果未设定较后列车标志,或指示到较后列车的指针不存在,处理流程从步骤786进入步骤788,在这里确定是否设定卡片标记的相同列车标志。换言之,步骤788确定卡片标记是否指示存在到相同列车的较后车厢的指针。如果确定设定相同列车标志,在步骤790确定与该卡片标记有关的根段阵列是否溢出。如果根段阵列溢出,在步骤793就设定卡片标记指示根段阵列溢出。换句话说,如果确定根段阵列未溢出,在步骤792,在根段已不出现在根段阵列的情况下将根段插入到根段阵列。在根段插入到块阵列之后,如果有必要,就完成更新卡片标记的过程。
回到步骤788,如果确定未设定相同列车标志,在步骤794就分配根段阵列。另外,设定卡片标记来指向分配的根段阵列。在步骤796,确定根段阵列的分配是否成功。如果根段阵列的分配未成功,在步骤782设定卡片标记指示根段阵列溢出。另一方面,如果根段阵列的分配成功,处理流程进入步骤792,在这里如果根段已不出现在根段阵列,就将根段插入到根段阵列。
图8a和8b是表示根据本发明的一个实施例,与执行老一代存储器的无用存储单元收集有关的步骤,即,图6的步骤608的处理流程图。在步骤802,跟踪固定根段或,在该实施例,直接指向老一代存储器的根段。上面参考图7b-7e描述根据本发明的一个实施例,与跟踪固定根段有关的步骤。
在步骤804跟踪新一代存储器的根段。即,跟踪从老一代存储器指向新一代存储器的根段的关联。处理流程从步骤804进入步骤806,其中为定位具有设定的较后列车标志的下一入口扫描卡片阵列,或卡片标记阵列。在步骤808,确定是否已找到这样的一入口,即,具有设定的较后列车标志的入口。如果确定已找到这样的一入口,在步骤812确定找到的入口是否具有设定的任何一个,或两个新一代存储器标志或根段阵列溢出。如果设定任何一个,或两个新一代存储器标志或根段阵列溢出,在步骤814,扫描卡片内用于根段的全部对象,并跟踪根段。此外,前面参考图7b-7e讨论了与跟踪根段有关的步骤。在跟踪根段之后,处理流程回到步骤806,在这里扫描卡片阵列来定位具有设定的较后列车标志的下一入口。
如果步骤812确定该入口,即,在步骤808找到的卡片标记不具有设定的新一代存储器标志或溢出的根段阵列,处理流程就进入步骤816,在这里扫描与该入口有关的根段,并跟踪与根段阵列有关的根段。在跟踪根段之后,在步骤806,为具有设定的较后列车标志的下一入口扫描卡片阵列。
回到步骤808,如果扫描寻找具有设定的较后列车标志的入口的卡片阵列结果是未发现这样的入口,在步骤820,在老一代存储器内跟踪根段直到已扫描全部复制的对象。在一个实施例,将被其他列车参考的一个列车内的对象复制到这些列车。当已扫描全部复制的对象时,在步骤830确定在扫描处理期间是否遇到指向较后列车的根段。如果确定未遇到指向较后列车的根段,在步骤840就释放全部的较后列车。换言之,释放由较后列车保留的老一代存储器。由于如果不存在指向较后列车的指针的话,较后列车仅包含无用存储单元,所以全部较后列车可能处于空闲。应该清楚当全部较后列车处于空闲时可以收集互相参考并定位在同一列车的不同车厢的循环结构。一旦全部较后列车处于空闲,就执行与老一代存储器无用存储单元收集有关的步骤。
如果步骤830确定遇到到较后列车的根段,在步骤832,扫描卡片阵列来寻找下一入口,即,具有设定的相同列车标志的卡片标记。在步骤834,确定是否已找到具有设定的相同列车标志的入口。如果确定还未找到具有设定的相同列车标志的入口,在步骤836在老一代存储器内跟踪根段直到已扫描全部复制的对象。在一个实施例,扫描全部复制的对象包括指针的传递搜索。一旦已扫描全部复制的对象,在步骤837释放较后列车的较后车厢,并完成老一代存储器无用存储单元收集过程。
回到步骤834,如果确定还未找到具有设定的相同列车标志的入口,或卡片标记,处理流程进入步骤838,在这里确定该入口是否具有设定的新一代存储器标志,设定的较后列车标志,或溢出的根段阵列。如果该入口具有设定的任何一个或全部的新一代存储器标志,在步骤850,为被跟踪的根段扫描卡片内的全部对象。一旦跟踪根段,处理流程返回步骤832,在这里再次扫描卡片阵列来寻找具有设定的相同列车标志的下一入口。
如果步骤838确定步骤834找到的入口不包括设定的新一代存储器,设定的较后列车标志,或溢出的根段阵列,在步骤856扫描与该入口有关的根段阵列,并跟踪根段阵列内的根段。在跟踪根段之后,处理流程返回步骤832,在这里扫描卡片阵列来寻找具有设定的相同列车标志的下一入口。
应该清楚可以在多个不同的计算机系统实现使用根据本发明的代间无用存储单元收集的计算机程序。图9表示适用于实现本发明的一般的,通用的计算机系统。计算机系统930包括连接到存储器装置的任何数目的处理器932(也称为中央处理单元,或CPUs),存储器装置包括主存储装置934(通常为只读存储器,或ROM)和主存储装置936(通常为随机存取存储器,或RAM)。如本领域所公知的,ROM用于向CPU 932单向传送数据和指令,而RAM一般用于以双向方式传送数据和指令。主存储装置934,936都可以包括任何适宜的计算机可读介质。通常海量存储器的第二存储媒介938也双向连接到CPU 932并提供附加的数据存储容量。海量存储器938是用于存储包括计算机代码,数据和类似数据的程序的计算机可读媒介,并且一般是通常比主存储装置934,936慢的诸如硬盘或磁带之类的存储媒介。海量存储器938可以采取磁或纸带输入机的形式或某些其他公知的装置。应该清楚在适当的情况下,保留在海量存储器装置938内的信息以标准方式加入到象虚拟存储器一样的RAM936部分。诸如CD-ROM之类的特定主贮存器装置934也可以单向传送数据到CPU。
CPU 932也连接到一个或多个输入/输出装置940,输入/输出装置940包括诸如视频监视器,跟踪球,鼠标,键盘,麦克风,触控式显示器,传感器卡片阅读器,磁或纸带输入机,输入板,指示笔,语音或手写识别器,或其他公知的输入装置之类的装置。最后,CPU 932使用通常在912所示的网络连接可以有选择地连接到计算机或电信网络,例如,国际互连网络或企业内部互连网络。使用这样的网络连接,可以期望CPU 932在执行上述方法的步骤的过程中从网络接收信息,或向网络输出信息。可以以嵌入载波的计算机数据信号的形式从网络接收信息并输出这样的信息到网络,该信息通常表示为使用CPU 932执行的指令序列。上述装置和内容对计算机硬件和软件领域的技术人员来说是公知知识。
尽管仅描述本发明的几个实施例,应该清楚在不脱离本发明的精神和范围的情况下,可以以很多其他特定的形式体现本发明。例如,可以重新排序新一代存储器无用存储单元收集和老一代存储器无用存储单元收集所包含的步骤。在不脱离本发明的精神和范围的情况下,也可以删除和添加步骤。
尽管已描述了在老一代和新一代存储器内执行的代无用存储单元收集,可以在很多存储器代之间执行代无用存储单元收集。即,可以在分为多个代,例如,新一代、“中间代”、和老一代,的存储器上执行本发明的世代无用存储单元收集方法,这些代以每一代内的对象的使用寿命来区分。应该明白,对于存在多个代的实施例,代间指针通常可以在任意两代之间指向。
将卡片标记作为32-位字已进行了描述,该卡片标记包括27-位指针,保留位,相同列车标志,新一代存储器标志,和无效标志。然而,应该清楚在不脱离本发明的精神和范围的情况下,卡片标记可以有所变化。例如,至少部分根据给定系统的特定要求,卡片标记可以包括少于或多于32位的位数。换言之,卡片标记内的位也可以有很大变化。例如,在一个实施例,卡片标记内的32-位可以包括26-位指针和两个“状态指示器”位,或标签位。可以排列状态指示器位使得状态指示器位的不同值的组合表示卡片标记是无效,还是干净,包括新一代存储器指针,还是不包括新一代存储器指针。卡片标记也可以包括指示是否存在指向较后列车的指针的较后列车标志,指示在给定列车内是否存在指向该列车内的较后车厢的相同列车标志,较后列车溢出标志和相同列车溢出标志。
另外,如上所述,已描述了将卡片标记内的最低位用来表示,例如,卡片标记是否无效,应该清楚卡片标记内的标志可以位于卡片标记内任何适宜的位置。表示标志的位可以是卡片标记内的最高位。换言之,这些位可以遍布在卡片标记内。
尽管将老一代存储器的车厢尺寸描述为固定的,应该清楚,在一个实施例,可以动态分配一个车厢的尺寸。即,可以根据要放置在车厢内的对象的特定要求确定一个车厢的尺寸。例如,在不脱离本发明的精神和范围的情况下,在无用存储单元收集处理的过程中可以分配一个车厢的尺寸以减少发自该车厢内的对象的指针的数目。
应该清楚在老一代存储器中可以间或使用无用存储单元收集的常规方法。例如,在某些情况下,老一代存储器可能会占满。当老一代存储器占满时,执行一个车厢的老一代存储器无用存储单元收集可能不会释放足够的用于直接使用的存储器量。因此,在不脱离本发明的精神和范围的情况下,当老一代存储器占满时,可以使用诸如标记扫描收集处理之类的常规无用存储单元收集处理以进可能多地释放老一代存储器。因此,将本实施例仅是说明性不具有限定性,并且本发明也不限于给出的细节,在附属权利要求书的范围内及其等效形式的全部范围内可以对其进行修改。

Claims (24)

1.一种计算机实现的用于动态管理与计算机系统相关的存储器的方法,存储器包括分为多个块的第一存储器部分和第二存储器部分,第二存储器部分的每一个块具有一个相关标记,该方法包括:
在第一存储器部分执行第一无用存储单元收集;
在选择的第二存储器部分的一个块执行第二无用存储单元收集;
在第二存储器部分的选择块执行第三无用存储单元收集,其中第三无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定选择块是否包括参考第二对象的第一对象,第二对象未包括在选择块内,其中该状态包括在第二无用存储单元收集完成之后是否存储到第二对象的参考的指示;和
当在第二无用存储单元收集完成之后存储到第二对象的参考时,使用与选择块相关的标记创建一个新的根段阵列。
2.如权利要求1所述的方法,其中当确定第一对象不参考未包括在选择块内的第二对象时,该方法进一步包括释放选择块。
3.如权利要求1或2所述的方法,其中当确定选择块包括参考第二对象的第一对象时,执行第三无用存储单元收集的步骤进一步包括:
使用选择块标记确定第二对象是否处于第一存储器部分;和
当确定第二对象处于第一存储器部分时,更新与选择块标记有关的根段阵列以保证与选择块标记有关的根段阵列包括到第二对象的指针。
4.如权利要求1或2所述的方法,其中当确定选择块包括参考第二对象的第一对象时,执行第三无用存储单元收集的步骤进一步包括:
使用选择块标记确定第二对象是否处于第二存储器部分;和
当确定第二对象处于第二存储器部分时,扫描与选择块标记有关的根段阵列以识别对其它对象的参考。
5.如权利要求4所述的方法,进一步包括跟踪对其它对象的参考。
6.如权利要求1或2所述的方法,其中将多个块排列为多个列车,选择块包括在多个列车中的第一个中,执行第三无用存储单元收集的步骤进一步包括:
至少部分根据与该块相关的标记指示的状态确定第二对象是否包括在多个列车中的第二个中。
7.如权利要求6所述的方法,其中当确定第二对象未处于多个列车中的第二个中时,该方法进一步包括释放第二个列车。
8.如权利要求1或2所述的方法,其中将多个块排列为多个车厢,多个车厢进一步排列为多个列车,选择块包括在多个车厢的第一个中,从多个列车中选择的一个列车由这些车厢构成,执行第三无用存储单元收集的步骤进一步包括:
至少部分根据与该块相关的标记指示的状态确定第二对象是否处于构成选择的列车的多个车厢的第二个。
9.如权利要求8所述的方法,其中当确定第二对象未处于选择的列车的第二个车厢中时,该方法进一步包括释放第二车厢。
10.一种计算机实现的用于动态管理与计算机系统相关的存储器的方法,存储器被分为多个块,每一个块具有一个相关标记,该方法包括:
在选择的一个块执行第一无用存储单元收集;
在选择块执行第二无用存储单元收集,其中第二无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定选择块是否包括参考第二对象的第一对象,第二对象未包括在选择块,该标记指示的状态包括第一无用存储单元收集完成之后是否存储对第二对象的参考的指示;和
当第一无用存储单元收集完成之后存储对第二对象的参考时,使用选择块创建一个新的根段阵列。
11.如权利要求10所述的方法,其中当确定第一对象不参考未包括在选择块的第二对象时,该方法进一步包括释放选择块。
12.如权利要求10或11所述的方法,其中将多个块排列为多个列车,选择块包括在多个列车的第一个,执行第二无用存储单元收集的步骤进一步包括:
至少部分根据与该块相关的标记指示的状态确定第二对象是否处于多个列车的第二个;和
当确定第二对象未处于多个列车的第二个中时,该方法进一步包括释放第二列车。
13.如权利要求10所述的方法,进一步包括一个附加的存储器部分,其中当确定第二对象未包括在选择块中时,在选择块执行第二无用存储单元收集的步骤进一步包括:
至少部分根据与选择块相关的标记指示的状态确定第二对象是否包括在附加的存储器部分。
14.一种计算机实现的用于在计算机存储器内分配一个选择对象的方法,该计算机存储器包括第一部分,第二部分,和与第二部分的组件相关的字阵列,该字被排列为指示其相关组件的内容是否参考第一部分内的对象,该方法包括:
确定第一部分是否适合于要分配的选择对象;
当确定第一部分适合于要分配的对象时分配选择的对象;和
当确定第一部分不适合于要分配的对象时在第一部分执行无用存储单元收集,其中执行无用存储单元收集包括扫描定位选择字的字阵列,该选择字表示其在第二部分的相关组件参考第一部分的特定对象,以及在无用存储单元收集期间保留第一部分内的特定对象。
15.如权利要求14所述的方法,其中当表示其在第二部分的相关组件参考特定对象的选择字被定位时,在第一部分执行无用存储单元收集进一步包括:
跟踪第二部分的相关组件的根段的关联,其中跟踪根段的关联包括将根段更新到计算机存储器内的新位置并更新选择字。
16.如权利要求15所述的方法,其中更新选择字包括:
确定选择的一个根段处于第二部分并参考选择的第一部分的一个特定对象的时间;和
当确定选择的根段处于第二部分并参考第一部分内的选择的一个特定对象时,更新选择字来指示选择的根段处于第二部分并且选择的特定对象处于第一部分。
17.如权利要求14所述的方法,进一步包括:
在第二部分执行无用存储单元收集,其中第二部分执行无用存储单元收集包括跟踪与选择的一个组件相关的根段关联,该根段与新一代存储器有关,因此跟踪根段关联包括更新字阵列中的某些字。
18.一种用于计算机系统的由计算机实施的方法,该计算机系统包括第一存储器部分和排列为多个组件的第二存储器部分,该由计算机实施的方法包括:
组成一个标记,该标记与从所述多个组件中选择的第一组件有关,使得第一指示器被排列为识别第一选择组件是否参考包含在第一存储器部分内的对象,其中通过所述标记对第一存储器部分和第二存储器部分执行自动存储—恢复的动态管理。
19.如权利要求18所述的由计算机实施的方法,其中,所述标记进一步包括对对象的参考。
20.一种计算机系统,包括:
存储器,包括第一存储器部分和分段为多个块的第二存储器部分;
耦合到存储器的处理器,处理器组成为用来排列标记阵列,一组根段阵列、第一无用存储单元收集、以及利用存储器的第二无用存储单元收集,每个标记对应于第二存储器部分的相关块,该标记组成为指示其相关块何时参考其相关块之外的对象;
所述根段阵列排列为保留对象的地址,其中从标记阵列选择的标记与一组根段阵列相关;
所述第一无用存储单元收集,用于恢复第一存储器内的空间;和
所述第二无用存储单元收集,用于至少部分根据标记阵列内的标记的状态恢复第二存储器内的空间。
21.如权利要求20所述的计算机系统,其中从标记阵列选择的第一标记包括指示器部分,该指示器识别第一标记的相关块何时参考第一存储器部分的第一对象。
22.如权利要求20或21所述的计算机系统,其中将多个块排列为多个车厢,将多个车厢进一步排列为多个列车。
23.一种计算机系统,包括:
被分为多个块的存储器;
耦合到存储器的处理器,处理器组成为用来排列标记阵列,一组根段阵列、以及利用存储器的一个无用存储单元收集,根段阵列排列为保留对象的地址,其中从标记阵列选择的标记与该组根段阵列相关;所述无用存储单元收集用于至少部分根据标记阵列的标记状态恢复存储器内的空间。
24.一种用于动态管理与计算机系统相关的存储器的由计算机实施的方法,该由计算机实施的方法包括:
在计算机系统的第一存储器部分执行第一无用存储单元收集;
在计算机系统的第二存储器部分执行第二无用存储单元收集,第二存储器部分被分为多个块,其中第二无用存储单元收集包括至少部分根据与选择块相关的标记指示的状态确定从多个块选择的块是否包括参考第二对象的第一对象,第二对象未包括在选择块中。
CNB991057449A 1998-03-06 1999-03-06 用于计算机存储器的世代动态管理的方法和装置 Expired - Lifetime CN100343821C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US7706998P 1998-03-06 1998-03-06
US60/077069 1998-03-06

Publications (2)

Publication Number Publication Date
CN1236921A CN1236921A (zh) 1999-12-01
CN100343821C true CN100343821C (zh) 2007-10-17

Family

ID=22135895

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB991057449A Expired - Lifetime CN100343821C (zh) 1998-03-06 1999-03-06 用于计算机存储器的世代动态管理的方法和装置

Country Status (6)

Country Link
US (1) US6308185B1 (zh)
EP (1) EP0940755B1 (zh)
JP (1) JP2000047931A (zh)
KR (1) KR100567082B1 (zh)
CN (1) CN100343821C (zh)
DE (1) DE69932874T2 (zh)

Families Citing this family (75)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9906629D0 (en) * 1999-03-23 1999-05-19 Koninkl Philips Electronics Nv Memory reclamation method
US6415302B1 (en) 1999-08-19 2002-07-02 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing farthest-forward-car indicator
US6185581B1 (en) * 1999-08-19 2001-02-06 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing fixed-size remembered sets
US6434577B1 (en) * 1999-08-19 2002-08-13 Sun Microsystems, Inc. Scalable-remembered-set garbage collection
US6424977B1 (en) * 1999-08-19 2002-07-23 Sun Microsystems, Inc. Train-algorithm-based garbage collector employing reduced oversized-object threshold
US6449626B1 (en) * 1999-08-19 2002-09-10 Sun Microsystems, Inc. Reduced-cost remembered-set processing in a train-algorithm-based garbage collector
US7096238B2 (en) 1999-08-19 2006-08-22 Sun Microsystems, Inc. Dynamic feedback for determining collection-set size
US6434576B1 (en) * 1999-08-19 2002-08-13 Sun Microsystems, Inc. Popular-object handling in a train-algorithm-based garbage collector
US6681306B1 (en) * 1999-11-29 2004-01-20 Sun Microsystems, Inc. Method and apparatus for increasing scavenging garbage collection effectiveness
US6393440B1 (en) * 1999-12-13 2002-05-21 International Business Machines Corporation Data structure for keeping track of objects remaining to be traced by concurrent garbage collector
US6529919B1 (en) 2000-02-15 2003-03-04 Sun Microsystems, Inc. Incremental class unloading in a train-algorithm-based garbage collector
CA2421591C (en) 2000-09-13 2011-08-23 Geodesic Systems, Incorporated Conservative garbage collectors that can be used with general memory allocators
GB0027045D0 (en) * 2000-11-06 2000-12-20 Ibm Computer system with heap reset
US7216136B2 (en) * 2000-12-11 2007-05-08 International Business Machines Corporation Concurrent collection of cyclic garbage in reference counting systems
US6567905B2 (en) * 2001-01-23 2003-05-20 Gemstone Systems, Inc. Generational garbage collector with persistent object cache
JP3939975B2 (ja) * 2001-12-14 2007-07-04 松下電器産業株式会社 ガベージコレクション装置、ガベージコレクション方法及びガベージコレクションプログラム
US6928460B2 (en) * 2002-07-01 2005-08-09 Sun Microsystems, Inc. Method and apparatus for performing generational garbage collection in a segmented heap
US6999980B2 (en) * 2002-08-23 2006-02-14 Sun Microsystems, Inc. Eliminating write barriers for young objects
US6999979B2 (en) * 2002-11-05 2006-02-14 Sun Microsystems, Inc. Efficient encoding of references into a collection set
US7035884B2 (en) * 2002-11-05 2006-04-25 Sun Microsystems, Inc. Placement of allocation trains in the train algorithm
US7539713B2 (en) 2002-11-05 2009-05-26 Sun Microsystems, Inc. Allocation of likely popular objects in the train algorithm
US7188129B2 (en) * 2002-11-15 2007-03-06 Sun Microsystems, Inc. Merging trains in a collector based on the train algorithm
US7209935B2 (en) 2002-11-27 2007-04-24 Sun Microsystems, Inc. Avoiding remembered-set maintenance overhead for memory segments known to be in a collection set
US7136887B2 (en) * 2002-12-04 2006-11-14 Sun Microsystems, Inc. Method and mechanism for finding references in a card in time linear in the size of the card in a garbage-collected heap
US7039664B2 (en) * 2002-12-04 2006-05-02 Sun Microsystems, Inc. Combining entries in a card object table
US7069280B2 (en) 2002-12-06 2006-06-27 Sun Microsystems, Inc. Collection-tick mechanism for a collector based on the train algorithm
US7024437B2 (en) * 2002-12-06 2006-04-04 Sun Microsystems, Inc. Better placement of objects reachable from special objects during collection based on the train algorithm
US7085790B2 (en) * 2002-12-06 2006-08-01 Sun Microsystems, Inc. Advancing cars in trains managed by a collector based on the train algorithm
US7143124B2 (en) 2002-12-06 2006-11-28 Sun Microsystems, Inc. Detection of dead regions during incremental collection
US7031990B2 (en) 2002-12-06 2006-04-18 Sun Microsystems, Inc. Combining external and intragenerational reference-processing in a garbage collector based on the train algorithm
US7058670B2 (en) * 2002-12-20 2006-06-06 Sun Microsystems, Inc. Scalable, space-efficient, parallel remembered-sets
US7146390B2 (en) 2003-02-24 2006-12-05 Sun Microsystems, Inc. Staging the processing of remembered-set entries as part of collection based on the train algorithm
US7069281B2 (en) 2003-02-24 2006-06-27 Sun Microsystems, Inc. Efficient collocation of evacuated objects in a copying garbage collector using variably filled local allocation buffers
US7062519B2 (en) * 2003-02-27 2006-06-13 Sun Microsystems, Inc. Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection
US7096329B2 (en) * 2003-02-27 2006-08-22 Sun Microsystems, Inc. Better placement of objects promoted into a generation managed by the train algorithm
US7225439B2 (en) * 2003-03-21 2007-05-29 Sun Microsystems, Inc. Combining write-barriers within an inner loop with fixed step
US20040186863A1 (en) * 2003-03-21 2004-09-23 Garthwaite Alexander T. Elision of write barriers for stores whose values are in close proximity
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
US7089272B1 (en) 2003-06-18 2006-08-08 Sun Microsystems, Inc. Specializing write-barriers for objects in a garbage collected heap
US8108628B2 (en) * 2003-08-04 2012-01-31 Azul Systems, Inc. Processor instruction used to perform a matrix test to generate a memory-related trap
US7149762B1 (en) 2003-08-20 2006-12-12 Sun Microsystems, Inc. Handling futile collections in the train algorithm through selective extension of the collection set
US7019998B2 (en) * 2003-09-09 2006-03-28 Silicon Storage Technology, Inc. Unified multilevel cell memory
US7404182B1 (en) 2003-10-03 2008-07-22 Sun Microsystems, Inc. Deferring and combining write barriers for a garbage-collected heap
US7412580B1 (en) 2003-10-06 2008-08-12 Sun Microsystems, Inc. Concurrent incremental garbage collector with a card table summarizing modified reference locations
US7114045B1 (en) * 2003-12-23 2006-09-26 Sun Microsystems, Inc. Garbage collection with a dynamic window
US7792880B2 (en) * 2004-01-05 2010-09-07 International Business Machines Corporation Method and apparatus for efficient implementation of discontiguous objects
US7340494B1 (en) 2004-03-12 2008-03-04 Sun Microsystems, Inc. Garbage-first garbage collection
US7428560B1 (en) * 2004-03-12 2008-09-23 Sun Microsystems, Inc. Age segregation for garbage collector
US8131955B2 (en) * 2004-04-15 2012-03-06 Microsoft Corporation Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles
US7620943B1 (en) 2004-06-30 2009-11-17 Sun Microsystems, Inc. Using class properties to segregate objects in a generation managed by the train algorithm
US7676801B1 (en) 2004-08-31 2010-03-09 Sun Microsystems, Inc. Scanning of evacuated objects in a generation managed by the train algorithm
US7272695B1 (en) 2004-09-13 2007-09-18 Sun Microsystems, Inc. Hot-card caching to avoid excessive remembered-set updating
US7313566B1 (en) 2004-12-23 2007-12-25 Sun Microsystems, Inc. Method and apparatus for isolating selected heap objects using a faulting address trap
US7882505B2 (en) * 2005-03-25 2011-02-01 Oracle America, Inc. Method and apparatus for switching between per-thread and per-processor resource pools in multi-threaded programs
US7565499B1 (en) 2005-03-28 2009-07-21 Sun Microsystems, Inc. Method and apparatus for recording modified reference locations in garbage-collected heap memory
US7650350B1 (en) 2005-05-18 2010-01-19 Sun Microsystems, Inc. Method and apparatus for concurrently processing remembered sets in a space-incremental garbage collector
GB0512809D0 (en) * 2005-06-23 2005-08-03 Ibm Arrangement and method for garbage collection in a computer system
US20070100919A1 (en) * 2005-11-01 2007-05-03 Electronics And Telecommunications Research Institute Garbage collection unit and method thereof
KR100753821B1 (ko) 2005-11-01 2007-08-31 한국전자통신연구원 가비지 컬렉션 장치 및 그 방법
US7599973B2 (en) * 2006-01-12 2009-10-06 Sun Microsystems, Inc. Method and apparatus for decreasing object copying by a generational, copying garbage collector
US8825718B2 (en) * 2006-12-28 2014-09-02 Oracle America, Inc. Methods and apparatus for marking objects for garbage collection in an object-based memory system
US7870171B2 (en) * 2007-02-12 2011-01-11 Oracle America, Inc. Method and system for garbage collection in a multitasking environment
US7627621B2 (en) * 2007-02-12 2009-12-01 Sun Microsystems, Inc. Method and system for minor garbage collection
US9785549B2 (en) 2007-04-27 2017-10-10 Microsoft Technology Licensing, Llc Managing object lifetime for native/managed peers
US7685182B2 (en) * 2007-05-08 2010-03-23 Microsoft Corporation Interleaved garbage collections
US8478738B2 (en) * 2007-12-10 2013-07-02 International Business Machines Corporation Object deallocation system and method
JP5120455B2 (ja) * 2008-08-11 2013-01-16 富士通株式会社 ガーベジコレクションプログラム、及びガーベジコレクション方法、ならびにガーベジコレクションシステム
US9384129B2 (en) 2011-06-16 2016-07-05 Microsoft Technology Licensing Llc Garbage collection based on total resource usage and managed object metrics
US8694562B2 (en) 2012-05-22 2014-04-08 Microsoft Corporation Generational garbage collection for a pool-based heap
US8954398B1 (en) * 2013-01-04 2015-02-10 Symantec Corporation Systems and methods for managing deduplication reference data
US9189382B2 (en) 2013-05-08 2015-11-17 Red Hat, Inc. Noncontiguous representation of an array
KR101730991B1 (ko) 2014-10-28 2017-04-28 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
US9747250B2 (en) 2015-03-25 2017-08-29 International Business Machines Corporation Effective memory management for host objects in a runtime environment with embedded garbage-collected based dynamic language
US10180902B2 (en) * 2015-06-30 2019-01-15 International Business Machines Corporation Pauseless location and object handle based garbage collection
US9734052B2 (en) * 2015-06-30 2017-08-15 International Business Machines Corporation Multi-section garbage collection

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4797810A (en) * 1986-06-26 1989-01-10 Texas Instruments Incorporated Incremental, multi-area, generational, copying garbage collector for use in a virtual address space
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US5136706A (en) * 1987-04-30 1992-08-04 Texas Instruments Incorporated Adaptive memory management system for collection of garbage in a digital computer

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845298A (en) * 1997-04-23 1998-12-01 Sun Microsystems, Inc. Write barrier system and method for trapping garbage collection page boundary crossing pointer stores
US5903900A (en) * 1997-04-23 1999-05-11 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap
US5953736A (en) * 1997-04-23 1999-09-14 Sun Microsystems, Inc. Write barrier system and method including pointer-specific instruction variant replacement mechanism
US6148310A (en) * 1998-08-25 2000-11-14 International Business Machines Corporation Method for combining card marking with remembered sets for old area of a memory heap

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4797810A (en) * 1986-06-26 1989-01-10 Texas Instruments Incorporated Incremental, multi-area, generational, copying garbage collector for use in a virtual address space
US4989134A (en) * 1987-03-20 1991-01-29 Hewlett-Packard Company Method and apparatus for enhancing data storage efficiency
US5136706A (en) * 1987-04-30 1992-08-04 Texas Instruments Incorporated Adaptive memory management system for collection of garbage in a digital computer

Also Published As

Publication number Publication date
US6308185B1 (en) 2001-10-23
EP0940755B1 (en) 2006-08-23
DE69932874T2 (de) 2007-02-22
EP0940755A1 (en) 1999-09-08
JP2000047931A (ja) 2000-02-18
KR19990077655A (ko) 1999-10-25
KR100567082B1 (ko) 2006-03-31
DE69932874D1 (de) 2006-10-05
CN1236921A (zh) 1999-12-01

Similar Documents

Publication Publication Date Title
CN100343821C (zh) 用于计算机存储器的世代动态管理的方法和装置
US7143124B2 (en) Detection of dead regions during incremental collection
CN1205549C (zh) 用于多-线程虚拟机的存储器分配的方法和装置
US6640290B1 (en) Easily coalesced, sub-allocating, hierarchical, multi-bit bitmap-based memory manager
EP1686482B1 (en) File recording device
CN1154928C (zh) 用于多任务设施信息处理系统的资源管理方法和设备
CN101727355B (zh) 用于内存访问事件的处理方法和系统
JP4177960B2 (ja) 増分不要情報収集
CN1214325C (zh) 用于通过存储器管理提高引用局部性的方法和装置
US6173294B1 (en) Method for combining card marking with remembered set for generational garbage collection with more than two generations
CN1614555A (zh) 用于自主硬件辅助的线程栈跟踪的装置与方法
US7010555B2 (en) System and method for compacting a computer system heap
CN101075209A (zh) 在异构多处理器系统中收集垃圾的系统和方法
JP3560535B2 (ja) ガーベッジ収集中に空き領域を検出し合体させる方法およびシステム
US20040123065A1 (en) Binned remembered sets
US20060294167A1 (en) Method and system for dynamically managing storage of data objects generated during execution of a computer program
CN1717663A (zh) 管理缓存旁路的方法和装置
CN1499530A (zh) 非易失性存储器系统内有效允许失序写处理的方法和装置
JP2003507814A (ja) 固定サイズのリメンバードセットを使用する、トレインアルゴリズムに基づくガーベッジコレクター
US6999979B2 (en) Efficient encoding of references into a collection set
CN1717661A (zh) 数据记录装置
CN1258046A (zh) 一并擦除型非易失性存储器和快速存储器的的控制方法
CN107797772A (zh) 一种基于闪存介质的垃圾回收系统及方法
CN101063976A (zh) 用于快速删除物理群集数据的方法和设备
US20050021576A1 (en) Mostly concurrent garbage collection

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1065284

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term

Granted publication date: 20071017

CX01 Expiry of patent term