一种使用非暂态流存储来改进垃圾收集算法的方法

文档序号:6357176阅读:323来源:国知局
专利名称:一种使用非暂态流存储来改进垃圾收集算法的方法
技术领域
本发明一般地涉及运行时环境中的存储器管理,具体而言涉及一种使用非暂态存储来减少垃圾收集时间的垃圾收集算法。
背景技术
计算系统的随机存取存储器(RAM)是一种大小固定的资源;现在RAM的大小一般为32兆字节(Mb)。为了保持系统性能,必须正确管理RAM。在例如Java或者Microsoft CLI的运行时环境中,存储器管理是由系统来控制的。存储器管理包括被称为“垃圾收集”的处理。垃圾收集是以在循环再利用存储器过程中尽量无干扰为目的的一种处理。当计算机程序运行时,它基于正在进行的情况分配和使用存储器的各部分。在有些时候程序可能不再需要使用存储器的一个特定部分,例如,存储器曾被分配用于一个现在已经不再有关的特定目的。识别(收集)那些现在不会再被使用的部分(垃圾),使得它们能够被回收以用于以后的分配。垃圾收集处理给中央处理单元(CPU)增加负担并且降低系统的性能,对应用程序产生影响。因此人们非常希望能够减少回收存储器不被使用的部分所花的时间。
一般的计算系统在CPU和主存之间有高速缓冲存储器。与一般为128Mb的主存相比,高速缓存比较小,一般为2Mb或者更小。高速缓存用于存储来自最近被使用的存储单元的数据和提供对这些数据的快速访问。数据被放入高速缓存中,预期它会很快被再次访问。垃圾收集发生在主存中,但是由于大多数程序在最近被访问的数据会很快被再次访问的假设之下运行,所以垃圾收集的处理发生在高速缓存内,如以下所描述的那样。
在运行时环境中使用的一种通用垃圾收集算法是移动垃圾收集算法(MGCA,moving garbage collection algorithm)。MGCA检查存储块,该存储块的大小一般可为1Mb到4十亿字节(Gb)。MGCA确定来自该块的存储器数据哪些是在使用中的(活的数据),哪些是垃圾。正如其名称所表示的,MGCA将所有活的数据都移到新的连续的存储单元中。这将活的数据压缩到了相对于其与垃圾放置在一处时的更小的空间中。一旦活的数据被拷贝到新的单元中,可以回收和重新分配整个块。
一般的MGCA具有三个阶段标记、重新指向(repoint)和拷贝。在标记阶段,确定将被移到新的存储单元的活的对象。数据对象的新存储单元在这一阶段确定。在重新指向阶段,检查活的对象并改变它们的引用使得它们指向新的存储单元。在拷贝阶段,各个活的对象的内容被拷贝到该新存储单元中。
在很多程序中当数据被访问时,例如被拷贝时,数据被放入高速缓冲存储器中。如上所述,高速缓存提供对频繁使用的存储器的快速访问,并假设最近被访问的数据可能很快需要被再次访问。如果数据没有很快被使用,则将其从高速缓存中删除。这种基于暂态访问模式的处理常常造成被存储到高速缓存中的数据只是当其没有很快被访问时被删除。这种处理增加了高速缓冲存储器的负担,高速缓冲存储器要确定哪些数据可以被从高速缓存上删除,还必须实际地删除它并且有可能要将改变后的数据反写到主存中去。
当活的数据对象被拷贝到新存储单元时,拷贝到新存储单元的数据将来并不必须被访问。所以,预期数据很快会被访问的将数据拷贝到高速缓存不必要地增加了CPU/高速缓存资源的负担。


本发明将以举例方式来说明,但是并不限于附图中的图形,附图中相同的标号表示相似的元件,在附图中图1是用于实现本发明的移动垃圾收集器的示例性的计算系统的图解;以及图2A和2B描述了为了减少垃圾收集所需的时间对CPU的非暂态流存储特征的使用。
具体实施例方式
下面将描述一种改进的移动垃圾收集算法。该算法允许有效利用非暂态存储来减少垃圾收集所需的时间。非暂态存储(或拷贝)是一个CPU特征,其允许在主存内拷贝数据对象而没有高速缓冲存储器的干扰或污染。被拷贝到新存储单元的活的对象在就近的将来不会被访问,所以无需通过高速缓存来拷贝。如果被实现,那么这避免了拷贝操作,也避免了增加硬件的负担。本发明的算法利用了活的数据对象将被存储到连续的新存储单元中以执行流拷贝过程这一事实。由于每个拷贝过程都有相关的CPU开销,所以将拷贝流化的处理减少了系统性能的损失,并从而减少了垃圾收集的总的时间。
图1是图示了用于实现本发明的MGCA的示例性计算系统100的示图。这里所描述的为了更有效的垃圾收集而对非暂态拷贝特征和流拷贝的使用可以在计算系统100内被实现和应用。系统100可表示通用计算机、便携式计算机或者其它类似的设备。计算系统100的组成部分是示例性的,可以在其中省略或添加一个或多个组成部分。例如,计算系统100可能使用一个或多个存储设备。
参照图1,计算系统100包括经由总线101耦合到显示电路105、主存104、静态存储器106和大容量存储设备107的中央处理单元102和信号处理器103。计算系统100还可经由总线101耦合到显示器121、键盘输入122、光标控制器123、硬拷贝设备124、输入/输出(I/O)设备125以及声频/语音设备126。
总线101是标准系统总线,用于传送信息和信号。CPU 102和信号处理器103是计算系统100的处理单元。CPU 102或信号处理器103或者两者可被用于为计算系统100处理信息和/或信号。CPU 102包括控制单元131、算术逻辑单元(ALU)132和几个寄存器133,它们被用于处理信息和信号。信号处理器103也可包括与CPU 102类似的组成部分。
主存104可以是,例如,随机存取存储器(RAM)或其它动态存储设备,用于存储被CPU 102或信号处理器103使用的信息或指令(程序代码)。主存104可在CPU 102或信号处理器103执行指令过程中存储临时变量或其它中间信息。静态存储器106可以是,例如,只读存储器(ROM)和/或其它静态存储设备,用于存储也可以被CPU 102或信号处理器103使用的信息或指令。大容量存储设备107可以是,例如,硬盘或软盘驱动器或者光盘驱动器,用于存储计算系统100的信息或指令。
显示器121可以是,例如,阴极射线管(CRT)或液晶显示器(LCD)。显示设备121向用户显示信息或图表。计算系统100可经由显示电路105与显示器121对接(interface)。键盘输入122是具有模数转换器的字母数字混编的输入设备。光标控制器123可以是,例如,鼠标、轨迹球或光标方向键,用于控制显示器121上目标的移动。硬拷贝设备124可以是,例如,激光打印机,用于在纸张、胶片或其它类似介质上打印信息。可耦合若干输入/输出设备125到计算系统100上。
根据本发明的垃圾收集的自动处理可以通过包含在计算系统100内的硬件和/或软件实现。例如,CPU 102或信号处理器103能够执行存储在例如主存104的机器可读介质上的代码或指令。
机器可读介质可包括以例如计算机或数字处理设备的机器能够读的形式提供(即存储和/或传送)信息的机构。例如,机器可读介质可以包括只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质和闪存设备。代码或指令可以由载波信号、红外信号、数字信号以及其它类似信号来表示。
如上所述,一般的MGCA包括拷贝阶段,其中活的对象被拷贝到新的存储单元。本发明的一个实施例使用非暂态流存储(NTSS)来完成垃圾收集的拷贝阶段。对NTSS的使用使得能够以较少的时间完成拷贝阶段,从而实现更快的垃圾收集。图2A描述了为了减少垃圾收集所需的时间而对CPU的非暂态存储特征的使用。
图2A中数据对象被示为A到O。例如,数据对象A、B、C和D是数据的根集(即,例如CPU寄存器内的引用)。然后,A、B、C、D以及所有可达到(相关)的数据对象被认为是活的并将被移动。箭头是指示数据对象之间关联的引用。所有传递闭包(transitive closure)活的对象都在MGCA的标记阶段被确定。在一个实施例中,标记阶段可以引起如205所示的标记堆栈的建立。如图2A所示,数据对象G和I没有包括在标记堆栈中,因为它们既不是根集的一部分,也不能从根集成员直接或传递地达到。
当每个数据对象都被确定为是活的时,分配新的存储地址。在数据对象被添加到标记堆栈的时候,为数据对象确定新的存储单元,因为认为该数据对象是经过垃圾收集而存留下来的。例如,如图2B所示,为标记堆栈中所引用的每一个活的数据对象分配和指定新的存储单元。标记堆栈如205B所示,对应新存储单元的引用阵列如210B所示。这里,改变了每个数据对象的引用。这就是重新指向阶段。例如,数据对象A引用了数据对象J和K。A的新的引用将是A’,而A’将引用J’和K’。
在拷贝阶段,数据对象A的实际的内容(数据的实际的位)将被拷贝到被引用为A’的新的存储单元。这包括了引用相关数据的数据对象A的部分。这部分可能已经被更新,也就是说对J和K的引用已经被改变成分别引用J’和K’。在另一个实施例中,数据对象A被拷贝到被引用为A’的新的存储单元,然后更新与A关联的数据对象(即J和K)。
在数据对象A被拷贝到A’之后,A’不必再次被访问。关于数据对象A的垃圾收集的部分完成了。MGCA只是继续到标记堆栈中引用的下一个数据对象,并继续更新和移动。在MGCA的拷贝阶段,被拷贝的数据对象(例如,数据对象A)被放入高速缓存。但是因为数据对象(即A’)在近的将来不会被访问,所以A’的内容不需要被拷贝到高速缓存中。本发明的算法,这里作为附件A,使用非暂态存储(NTS)来将数据对象直接拷贝到所指定的存储器的新单元。CPU连同存储控制器执行非暂态存储,在没有高速缓冲存储器的干扰或污染的情况下产生A到A’存储单元的拷贝。对NTS的使用减少了垃圾收集所必需的时间,因为它减少了被不必要地拷贝到高速缓存中但只是在一段时间之后就被删除的数据的量。
本发明的算法还使用了复合写入技术(write combining)(流拷贝)来减少垃圾收集所需的时间。如图2B所示,标记堆栈205B中所引用的数据对象将被拷贝到如标记堆栈210B所引用的新存储单元中。例如,数据对象A、B和C将被拷贝到A’、B’和C’所引用的新单元。本发明的算法被设计为使得所有活的对象被拷贝到连续的新存储单元,也就是说,例如A’、B’和C’是连续的单元。这使得能够使用CPU的复合写入(流拷贝)特征来异步透明地拷贝几个数据对象。因为每个拷贝过程都有相关的CPU开销,所以将拷贝流化的处理减少了系统性能的损失,从而减少了垃圾收集的时间。当然,能够被拷贝的数量是因平台而不同的,并且取决于占优存储器总线条件。
在上述说明中,通过参考其示例性的特定实施例对本发明做了描述。但是显然在不背离如所附权利要求所陈述的本发明的更宽的精神和范围的情况下可以对其做各种变形和改变。因此说明书和附图被认为是解释性的而不是限制性的。
权利要求
1.一种方法,包括访问引用阵列,所述引用阵列引用至少一个数据对象,该至少一个数据对象具有存储于存储器中的内容;为所述至少一个数据对象的每一个的所述内容确定新的存储单元;以及将所述至少一个数据对象的所述内容拷贝到所述新存储单元,使得一旦拷贝了所述新存储单元的所述内容,该数据就不会再被存储到高速缓冲存储器中。
2.如权利要求1所述的方法,其中被连续地引用的数据对象的所述内容被拷贝到连续的存储单元。
3.如权利要求2所述的方法,其中拷贝还包括使用复合写入操作绕过所述高速缓存拷贝所述至少一个数据对象的所述内容。
4.如权利要求3所述的方法,其在具有中央处理单元的计算系统上实现,其中被拷贝的数据的量取决于中央处理单元的参数。
5.如权利要求4所述的方法,其中所述计算系统运行在动态运行时环境中。
6.如权利要求5所述的方法,其中所述运行时环境选自由JAVA和CLI组成的组。
7.如权利要求6所述的方法,其被实现为移动垃圾收集算法的拷贝阶段。
8.一种机器可读介质,所述介质提供可执行指令,当由处理器执行时,该可执行指令使所述处理器执行一种方法,该方法包括访问引用阵列,所述引用阵列引用至少一个数据对象,所述至少一个数据对象具有存储于存储器中的内容;为所述至少一个数据对象的每一个的所述内容确定新的存储单元;以及将所述至少一个数据对象的内容拷贝到新存储单元,使得一旦拷贝,所述新存储单元的所述内容不会被存储到高速缓冲存储器中。
9.如权利要求8所述的机器可读介质,其中被连续引用的数据对象的所述内容被拷贝到连续的存储单元。
10.如权利要求9所述的机器可读介质,其中拷贝还包括通过采用非暂态流存储操作的复合写入特征绕过所述高速缓存拷贝所述至少一个数据对象的所述内容。
11.如权利要求10所述的机器可读介质,其在具有中央处理单元的计算系统上实现,其中被拷贝的数据的量取决于中央处理单元的参数。
12.如权利要求11所述的机器可读介质,其中所述计算系统运行在动态运行时环境中。
13.如权利要求12所述的机器可读介质,其中所述运行时环境选自由JAVA和CLI组成的组。
14.如权利要求13所述的机器可读介质,其被实现为移动垃圾收集算法的拷贝阶段。
15.一种设备,包括寄存器,用于保存引用阵列,所述引用阵列引用至少一个数据对象,所述至少一个数据对象具有内容;存储区域,用于保存所述至少一个数据对象的所述内容;和中央处理单元,用于为所述至少一个数据对象的每一个的所述内容确定新存储单元,所述至少一个数据对象的所述内容被拷贝到所述新存储单元,使得一旦将所述内容拷贝到所述新存储单元,该数据就不会被存储到高速缓冲存储器中。
16.如权利要求15所述的设备,其中所述被连续地引用的数据对象的所述内容绕过高速缓存被拷贝到连续的存储单元。
17.如权利要求16所述的设备,其中拷贝还包括通过采用非暂态流存储操作的复合写入特征绕过所述高速缓存拷贝所述至少一个数据对象的所述内容。
18.如权利要求17所述的设备,其在具有中央处理单元的计算系统上实现,其中被拷贝的数据的量取决于中央处理单元的参数。
19.如权利要求18所述的设备,其中所述计算系统运行在动态运行时环境中。
20.如权利要求19所述的设备,其中所述运行时环境选自由JAVA和CLI组成的组。
21.如权利要求20所述的设备,其被实现为移动垃圾收集算法的拷贝阶段。
全文摘要
本发明描述了一种改进的移动垃圾收集算法。该算法允许有效地使用非暂态存储来减少垃圾收集所需的时间。非暂态存储(或拷贝)是一种CPU特征,该特征使得能够在没有高速缓冲存储器干扰或污染的情况下在主存内拷贝数据对象。被拷贝到新存储单元的活的对象在近的将来不会被再次访问,因此无需被拷贝到高速缓存。这避免了拷贝操作,并且避免了给CPU增加高速缓存确定(cache determination)的负担。在优选实施例中,本发明的算法利用了活的数据对象会被存储到连续的新存储单元中以执行流拷贝的这个事实。由于每个拷贝过程都有相关的CPU开销,所以将拷贝流化的处理减少了系统性能的损失,并从而减少了用于垃圾收集的时间。
文档编号G06F12/02GK1509435SQ02809793
公开日2004年6月30日 申请日期2002年6月6日 优先权日2001年6月19日
发明者斯里尼瓦斯·苏布拉马尼, 斯里尼瓦斯 苏布拉马尼, L 赫德森, 理查德·L·赫德森 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1