增量压缩堆时用于更新引用的系统和方法

文档序号:6611430阅读:218来源:国知局

专利名称::增量压缩堆时用于更新引用的系统和方法
技术领域
:本发明一般涉及数据处理系统领域。特别是,本发明涉及数据处理系统内的存储器管理领域。更特别地,本发明涉及增量压缩(compact)堆(heap)时用于更新引用的系统和方法。
背景技术
:中间件组件(如由Java虚拟机(JVM)提供的那些)经常使用堆来存储在环境中创建的对象。Java虚拟机的堆存储由运行的Java应用创建的全部对象。对象由各种指令创建,但是从来没有由代码明确地释放(即released,释放)。垃圾收集(garbagecollection)是自动释放不再被程序引用的对象的过程。Java虚拟机规范不需要任何特定的垃圾收集技术。"垃圾收集,,的名字意味着那些不再被程序所需要的对象是"垃圾",并且所述各对象能够被丢弃。更准确的比喻可能是"存储器再循环"。当对象不再被程序引用时,它占用的堆空间能够被再循环,使得该空间对于接下来的新的对象可用。垃圾收集必须以某种方式确定哪些对象不再被程序引用,并且使得由这样的不被引用的对象占用的堆空间可用。除了释放不引用的对象外,垃圾收集也可以抵抗(combat)堆碎片(heapfragmentation)。堆碎片通过正常的程序执行的过程创建。新的对象被分配,并且不引用的对象被释放,使得堆存储器的空闲部分留在活动(live)对象所占用的各部分之间。分配新的对象的请求可能必须通过扩展堆的大小来满足,即使在现有的堆中有足够的总的未用空间。这将发生在没有新的对象将适合的、足够连续自由堆空间可用的情形。在虚拟存储器系统上,为服务不断增大的堆而要求的额外分页(或者交换)可能劣化执行程序的性能。在具有更低存储器容量的嵌入式系统上,碎片可引起虛拟机不必要地"用尽存储器(runoutofmemory)"。另外,大部分的虚拟机对堆的大小有限制。在这些系统中,即使在堆中还有足够的总的自由空间,碎片也可能引起过早的垃圾收集事件,其导致应用停止运行。而且,依赖于所使用的对象分配方案,当堆分割为碎片时,定位合适大小的自由存储器片的时间可能大大增加。确定何时经由垃圾收集明确地释放已分配的存储器会是困难的。将该任务委派给Java虚拟机有几个优点。第一,它能够增加程序员生产率。当以无垃圾收集语言编程时,程序员会花大量的时间检测和修补难捉摸的存储器管理问题。垃圾收集的第二个优点是,它帮助确保程序完整性。垃圾收集是Java安全策略的重要部分。Java程序员不能通过不正确地释放存储器,来意外地(或故意地)使Java虚拟机崩溃。然而,垃圾收集增加了处理开销,其可对程序性能产生不利影响。在程序执行期间,Java虚拟机必须跟踪哪些对象正被执行程序引用,并且释放未引用的对象。这个活动通常比若程序明确地释放不需要的存储器将要的时间消耗更多的CPU时间。另外,垃圾收集环境中的程序员对调度CPU时间具有更少的控制,所述CPU时间专用于释放不再需要的对象。在管理垃圾收集的堆中的额外挑战是,需要周期性地压缩堆以便抵抗堆碎片。在压缩期间,对象被移动以便对堆空间整理碎片。当堆空间被整理碎片时,对象被移动到连续的存储器区域,在被移动的对象之间有很少或没有存储器。对象的移动导致更大的自由空间的连续块,其能够被用来存储额外的对象。在压缩传统的垃圾收集的堆期间,整个堆被遍历(traverse),并且在堆内移动许多对象。堆大小能够相当大并且能够存储数百或数千对象。结果,移动这么大量的对象花费显著的计算资源。使用该资源以执行压缩经常对用户以及其它也在该系统上执行的软件应用造成明显的停顿。本领域的技术人员将理解在压缩中,对不同对象的引用的实际更新必须出现在分开的阶段,其跟随新地址的发展。在更新阶段,必须为每个被更新的引用计算新的目标地址,即使单个目标可能被引用多次。新地址的计算典型地包括利用中断表(breaktable)的冗长的查询过程。因此,需要一种系统、方法和计算机可使用的介质,用于处理上述的现有技术的限制。
发明内容本发明包括一种方法、系统和程序产品,用于在增量压缩堆时更新引用。压缩管理器用终值初始化压缩数据结构中的每个入口(entry),其中压缩数据结构内的每个入口对应于第一压缩区域内的地址。压缩管理器定位对应于第一对象的地址的压缩数据结构内的第一入口。压缩管理器将第二对象的地址存储在第一入口中,并且将存储在第一入口中的值存储在第二对象中。压缩管理器为第一对象计算新地址,遍历从第一入口开始的引用链,并且用新地址更新该链直到遇到终值,并且将第一对象移动到新地址。在下面的详细描述中,上面以及本发明的另外的目的、特征和优点将变得明显。被认为是本发明特征的新颖特征在权利要求中提出。然而,当结合附图阅读时,通过参照以下说明性实施例的详细描述,将最好地理解发明本身以及优选的使用模式、进一步的目的及其优势,附图中图1是显示示例性数据处理系统的方框图,在该数据处理系统中可以实现本发明的优选实施例;图2是描绘根据本发明的优选实施例的、系统存储器的示例性内容的方框图;图3A是显示根据本发明的优选实施例的、示例性程序执行的高级逻辑流程图;图3B是描绘根据本发明的优选实施例的、示例性垃圾收集方法的高级逻辑流程图;图3C是显示根据本发明的优选实施例的、示例性方法的伪代码,该方法用于在压缩阶段内构造引用链;图3D和3E是描绘根据本发明的优选实施例的、示例性方法的伪代码,该方法用于为每个压缩对象计算新地址,并且用新计算的地址更新引用链;图4A是显示根据本发明的优选实施例的、示例性堆的方框图;图4B是描绘根据本发明的优选实施例的、在压缩数据结构的初始化之后的示例性堆和压缩数据结构的方框图;图4C是显示根据本发明的优选实施例的、在构造引用链之后的示例性堆和压缩数据结构的方框图;图4D是描绘根据本发明的优选实施例的、在利用引用链更新引用之后的示例性堆和压缩数据结构的方框图;以及图4E是显示根据本发明的优选实施例的、在将压缩对象移动到新计算的地址之后的示例性堆和压缩数据结构的方框图。具体实施方式参照各附图,并且更具体地,现在参照图1,图示了示例性数据处理系统的方框图,在该数据系统中可以实现本发明的优选实施例。如所描绘的,示例性数据处理系统100包括处理器102a-n,其经由系统总线106耦合到系统存储器104。优选地,系统存储器104可以实现为动态随机存取存储器(DRAM)模块的集合。夹层(mezzanine)总线108担当系统总线106和外围总线114之间的中介(intermediary)。本领域的技术人员将会理解外围总线114可以实现为外设组件互连(PCI)、图形加速端口(AGP)或其它任何外围总线。耦合到外围总线114的是硬盘驱动器110,其作为大容量存储设备被数据处理系统100利用。还耦合到外围总线114的是外围设备的集合112a隱n。本领域技术人员将会理解数据处理系统100能够包括许多没有在图1中具体示出的另外的组件。因为这些另外的组件对于理解本发明不是必要的,它们没有在图1中示出或在此进一步讨论。然而,还应当理解,对于由本发明提供的、对数据处理系统100的堆的增量垃圾收集的增强,适用于任何系统架构的数据处理系统,并且决不限于通用多处理器架构或图1中示出的对称多处理(SMP)架构。图2是显示根据本发明的优选实施例的、数据处理系统100的系统存储器104的示例性内容的方框图。如图所示,系统存储器104包括操作系统202,其进一步包括提供对数据处理系统100的资源的透明的用户访问的壳(shell)204。通常,壳204是在用户和操作系统之间提供解释程序(interpreter)和接口的程序。更具体地,壳204执行输入到用户接口或文件的命令行的命令。因此,壳204(如在UNIX⑧中所称的),在Window⑧中也称为命令处理器,通常是操作系统软件层次的最高级,并且作为命令解释程序。该壳提供系统提示符,解释由键盘、鼠标或其它用户输入介质输入的命令,并且将解释过的命令发送到操作系统的适当的低级(例如,内核206)去进行处理。注意到,尽管壳204是基于文本的、面向行的用户接口,本发明将同样好地支持其它用户接口模式,如图形、声音、姿态等。如图所示,操作系统202还包括内核206,其包括操作系统202的更低级的功能性,包括提供由操作系统202的其它部分和应用程序208需要的基本服务,包括存储器管理、进程和任务管理、盘管理、以及鼠标和键盘管理。应用程序208能够包括用于访问因特网的浏览器,字处理器、电子制表软件以及其它应用程序。而且,如图2所示,系统存储器104包括堆210(细分为区域212a-n)、压缩数据结构216、标记代码218以及压缩管理器214。如果压缩管理器214结合标记代码218,确定堆210需要压缩,压缩管理器214在堆210上执行增量压缩,这结合图3A-3E和图4A-4E更详细地描述。为了理解以下将要使用的术语,假设有对象"x,,以及存储位置"z",其包括对象x的地址。我们称对象x为"Objectx",并且称对象x的地址为"@Objectx"。存储位置"z"是"对象引用,,,并且会被称为"Referencez"。存储位置"z"的地址将被称为"@Referencez"。引用z(对象的地址)的内容被称为'"Referencez"。"对象粒"(objectgrain)是用于对象开始的字节最小对准(minimumalignmentinbytes)。各图利用缩写"Obj"和"Ref,代替"Object"和"Reference"。各图中描绘的示例仅仅显示常驻堆210(即包括对象地址的活动对象内的字段)中的对象引用。本领域的技术人员将理解对象引用可以出现在其它位置(如程序栈、全局变量和已保存寄存器组)中。图3A是显示根据本发明的优选实施例的、示例性程序执行的高级逻辑流程图。通常,应用程序(例如应用程序208之一)在应用程序执行期间,利用堆210作为存储器存储。周期性地,堆210在程序执行期间遇到"存储器溢出(outofmemeory)"情况,并且需要压缩管理器214、标记代码218和垃圾收集管理器220,来移除未使用的对象,并且在堆210内重新安排"活动,,对象,以创建更多连续自由空间。如图4A中所示,堆210包括区域212a,其进一步包括碎片化的对象。如图3A中所示,过程在步骤300开始,并且进行到步骤302,其显示了垃圾收集管理器220执行垃圾收集初始化。在本发明的优选实施例中,垃圾收集初始化可以包括但不限于,分配压缩数据结构216用于以后使用,并且将堆210分为各压缩区域(例如,区域212a-n)。过程继续到步骤304,该步骤显示数据处理系统100执行或运行应用。步骤306显示做出关于应用在执行期间是否已经遇到"存储器溢出"情况的判断。如果没有遇到"存储器溢出"情况,则过程返回到步骤304并且以迭代方式进行。如果遇到了"存储器溢出,,情况,则过程继续到步骤308,该步骤显示垃圾收集管理器220、压缩管理器214以及标记代码216,在区域212a-n内执行垃圾收集。过程返回到步骤304并以迭代方式进行。图3B是图示根据本发明的优选实施例的、示例性垃圾收集方法的高级逻辑流程图。如图所示,过程在步骤310开始并且继续到步骤312,该步骤显示压缩管理器214确定在当前的垃圾收集循环中压缩是否激活(active)。本领域的技术人员将理解确定压缩是否激活能够由存储在系统存储器104中的"压缩激活"变量(例如,布尔等)管理。如果"压缩激活"变量设置为"真",则压缩对于当前的垃圾收集循环激活。如果"压缩激活"变量设置为"假",则压缩对于当前的垃圾收集循环未激活。如果"压缩激活"变量设置为假,则压缩管理器214确定堆210的压缩是否有益于当前的垃圾收集循环,如步骤314中所描绘的。如果堆210的压缩无益(即,将不会显著提高应用执行的性能等),则过程继续到步骤316,该步骤显示垃圾收集管理器220执行垃圾收集而没有压缩。过程结束,如步骤336所示。返回到步骤314,如果压缩管理器214确定压缩将有益于当前的垃圾收集循环,则过程继续到步骤320,该步骤描绘压缩管理器214内的指针指定堆210的第一区域(例如区域212a)为用于压缩的当前区域,并且设置"压缩激活"变量为"真"。过程继续到步骤318。返回步骤312,如果压缩管理器214确定"压缩激活"变量设置为"真",则过程继续到步骤318,该步骤描绘建立当前区域信息。例如,压缩管理器214可以检查要被压缩的当前区域(例如,区域212a),确定区域的大小,并且建立压缩数据结构216,其大小与要被压缩的区域的大小成比例。在本发明的另一优选实施例中,压缩管理器214在垃圾收集初始化(图3A中的步骤302)期间,可以完成建立压缩数据结构216的步骤。过程继续到步骤322,该步骤显示压缩管理器214用终值初始化压缩数据结构216,所述终值在图4B-4C中描绘为"TermV"。终值(例如,TermV)指定"引用链"的尾端,在此更详细讨论。过程进行到步骤324,该步骤显示标记代码218在压缩激活时,执行标记阶段。垃圾收集循环中的标记阶段需要标记代码218,其扫描堆是否有包括对象引用的各对象(也称为"活动对象")。例如,参照图4B,对象A400被认为是"活动对象",因为对象A400有两个对象引用,它们是包括对象A400的对象地址的两个字,殳区域212b内的引用E408和区域212n内的引用1416。过程继续到步骤326和328,它们被并行处理并且描绘清扫阶段(步骤326)和压缩阶段(步骤328)。步骤326中所示的清扫阶段包括垃圾收集管理器220识别各"活动"对象之间的自由空间,其将被用于将来的分配。步骤328中描绘的压缩阶段包括计算新地址、创建引用链、以及将压缩区域内的对象移动到新位置。过程继续到步骤330,该步骤显示压缩管理器214确定当前区域是否是堆210内要被压缩的最后区域。如果当前区域不是要压缩的最后区域,则压缩管理器214将它的"当前区域"指针设置到堆210中的下一个区域,如步骤334中所示的,并且过程结束,如步骤336中所描绘的。返回到步骤330,如果压缩管理器214确定当前区域是堆210内要被压缩的最后区域,则压缩管理器214将压缩激活变量设置为"假",并且过程结束,如步骤336中所示的。在讨论图3C-3E中的伪代码期间,将参照图4A-4E中描绘的各种结构,特别是压缩数据结构216,其包括数组421、大小字段432、状态字段434以及内容字段436。压缩管理器214利用压缩数据结构216在堆210上执行垃圾收集和压缩。图3C是根据本发明的优选实施例的伪代码,该伪代码显示在由图3B的步骤324代表的标记阶段期间执行的逻辑。过程从行2开始,其显示定位下一对象引用的标记阶段。在行6,对象引用的内容被放置在临时变量(^Object中。在行10,做出关于(^Object是否在压缩区域内的判断。如果是,则过程继续到行14,其开发(devel叩)在对应于对象的压缩数据结构216内的数组421中入口的索引。在行18,检查数组入口的内容字段436,以确定在该标记阶段期间,是否这是第一次检测到该对象的引用。这通过比较内容字段436和TermV(该字段初始化的值)来完成。对于第一次引用,过程继续到行22到24,其中状态字段434被设置为指示是否该对象是可移动的。在行28,入口的大小字段432被设置为对象的大小,并且过程进行到行34。返回到行14,如果内容字段不等于TermV,则过程进行到行34。行34显示设置到数组入口的内容字段的值的对象引用的内容。然后在行38,数组入口的内容字段436被设置到对象引用的地址。过程在行48继续。返回到行10,如果对象不在压缩区域,则过程在行48继续。行48显示不管压缩是否激活,必要时为对象执行正常的标记活动。过程以迭代方式从行2继续,直到全部对象引用已经被处理。图3D和3E是代表在压缩阶段中执行的步骤的伪代码。该压缩阶段包括开发每个压缩对象的新地址,用新地址更新每个引用,以及最后将压缩对象移动到它的新位置。注意到,对象不能被移动直到全部引用被更新,由于有些引用可能包含在压缩区域内的对象中。参照图3D和3E,行4至22检查压缩数组,其寻找有最低地址的压缩对象。过程从行4开始,其中到数组421的索引被初始化为零。行6通过参照该索引确定是否已经到达数组421的尾端。如果没有,则到达行8,将通过索引识别的当前数组入口的内容字段436与TermV(终值)比较。如果它们不相等,则第一压缩对象已经被定位,并且过程继续到行IO,其中表示该第一对象的入口的索引已^皮保存。然后在行12,新对象地址(new—obj—address)被设置为指向第一对象的尾端,并且过程继续到行14,其通过行26的标签将流程指引到行34。返回到行8,如果当前数组入口的内容字段436等于TermV,则过程继续到行18,其增加索引,然后以迭代方式返回到行6。返回到行6,如果全部入口的内容字段436等于TermV,则压缩阶段完成(行22),没有发现压缩对象。否则过程在行34继续,行34与行6类似,通过参照索引做出是否有更多入口要处理的判断。注意到,索引现在为第一压缩对象寻址入口,并且新对象地址(new—obj—address)包括该压缩对象的地址。过程在行38继续,其中检查当前的入口,以确定是否它表示压缩对象。如果不是(即,内容字段436包含TermV),则索引在行76增加,并且过程返回到行34,并且以迭代方式进行。在行38,如果发现内容字段436不等于TermV,则它必须包含对象引用的地址(@Reference)。在这种情况下,过程继续到行40,其中计算了对象的旧地址,然后到行42,其中⑥Reference从内容字段加载。然后行48至56显示每个引用对象用新地址更新。行48检查识别链的尾端的终值。行50保存引用的当前内容,并且行52设置引用指向新地址。如果到达尾端,则行51用链中的下一个引用的地址或TermV加载⑨Reference。在更新全部引用之后,行60显示如果对象不需要被移动(即新对象地址与老对象地址(old—obj—address)相同),则内容字段^皮设置为TermV(行62)。否则,在行66将内容字段设置到新对象地址。然后在行70,调整新对象地址以说明(accountfor)当前对象,并且过程继续到行76,其中增加索引,然后在行34返回到循环的顶部。在全部入口已经被处理后,移动对象,如行86到102中所描述的。行86设置索引到代表第一压缩对象的入口之后的入口。行88检查数组的尾部,当到达尾部时终止过程。行92查看是否有对象要被移动,如果是,则行94开发所述对象的当前地址,并且行96调用将对象移动到它的新位置的移动功能。该过程迭代直到数组421内的全部入口已经被处理。图4A-4E显示在程序执行的各种阶段中的、堆210和压缩数据结构216。图4A显示垃圾搜集循环之前的堆210。注意到,区域212a包括以碎片方式排列的对象211a-h。图4B描绘在压缩数据结构216内的、数组421已经用内容字段436中的TermV初始化之后(图3B,步骤322)、在垃圾收集循环之前的堆210和压缩^:据结构216。注意到,引用E、F、G和H408-414指对象A、B、C和D400-406,并且引用I416也指对象A400。图4C描绘在引用链已经形成后(图3C,行34-38)、在垃圾收集循环期间的堆210和压缩数据结构216。图4D显示在引用E、F、G、H和I408-416已经用对象A、B、C和D400-406的新地址更新(图3D,行30-82)后的、堆210和压缩数据结构216。图4E描绘在压缩管理器214已经将对象A、B、C和D400-406移动到新位置(图3E,行84-108)后的、堆210和压缩数据结构216。本领域的技术人员将理解,本发明可以包括在多线程垃圾收集系统中的实现。在本发明的另一优选实施例中,多线程系统中的每个线程包括引用的本地队列。在如图3B中步骤324所示的标记阶段期间,当标记线程(其可实现为标记代码218)遇到压缩区域内的对象地址时,该标记线程将对象引用的地址("@objectreference")推到本地队列上。当本地队列变满时(以及在标记阶段完成时),获取锁定以串行化对压缩数据结构216的访问,并且压缩数据结构216内的每个入口按如图3A-3E中所描述的那样处理。而且当以多线程运行时,压缩区域被细分,使得每个线程具有进行工作的私有部分。图3D中所描述的过程然后能够继续,而不需要进一步的串行化。如所讨论的,本发明包括一种在增量压缩堆时更新引用的方法、系统和程序产品。压缩管理器用终值初始化压缩数据结构中的每个入口,其中压缩数据结构内的每个入口对应于第一压缩区域内的地址。压缩管理器定位对应于第一对象的地址的压缩数据结构内的第一入口,以响应第一对象被存储在压缩区域内。压缩管理器将第二对象的地址存储在第一入口中,并且将存储在第一入口中的值存储在第二对象中。压缩管理器为第一对象计算新地址,遍历从第一入口开始的引用链,并且用新地址更新该链直到遇到终值,并将第一对象移到新地址。应当理解,至少本发明的一些方面可以可替换地实现为程序产品。本发明中定义各功能的程序代码,能够经由各种信号承载介质传递到数据存储系统或计算机系统,所述信号承载介质包括但不限于非可写的存储介质(例如,CD-ROM);可写的存储介质(例如,硬盘驱动器、读/写CD-ROM、光介质);系统存储器,如但不限于随机存取存储器(RAM);以及通信介质,如计算机和电话网络,其包括以太网、因特网、各无线网络以及各类似网络系统。因此应当理解,当携带或编码指向本发明中的各方法功能的计算机可读的指令时,该信号承载介质代表本发明的可替换的实施例。此外要理解,本发明可以由具有各装置的系统实现,所述装置为如在此描述的硬件、软件、或软件和硬件的组合,或其等价物的形式。尽管参考优选实施例,对本发明进行了具体地显示和描述,但本领域的技术人员将会理解,可以在其中进行各种形式和细节的改变,而不背离本发明的精神和范围。权利要求1.一种用于重新引用包括第一对象和第二对象的存储器的方法,其中所述第二对象包括所述第一对象的地址,所述方法包括用终值初始化压缩数据结构中的每个入口,其中所述压缩数据结构中的每个入口对应于第一压缩区域内的地址;响应于确定至少所述第一对象被存储在所述压缩区域内,定位对应于所述第一对象的所述地址的所述压缩数据结构内的第一入口;通过下述创建引用链将所述第二对象的地址存储在所述第一入口中;以及将存储在所述第一入口中的值存储在所述第二对象中;为所述第一对象计算新地址;遍历从所述第一入口开始的所述引用链,并且用所述新地址更新所述链,直到遇到所述终值;以及将所述第一对象移动到由所述新地址指定的位置。2.根据权利要求1所述的方法,还包括如果压缩是未激活的并且是无益的,则只执行垃圾收集功能。3.根据权利要求1所述的方法,还包括确定是否所述第一对象是可移动的;以及响应于确定所述第一对象是不可移动的,设置所述第一对象的新对象地址等于所述第一对象的当前对象地址。4.根据权利要求3所述的方法,还包括响应于确定所述第一对象是可移动的,设置所述第一对象的所述新对象地址,等于所述压缩区域的起点加上所述第一入口的索引乘以对象粒值。5.根据权利要求4所述的方法,其中所述对象粒值是对象起点的字节最小对准。6.—种用于重新引用存储器的数据处理系统,所述存储器包括第一和第二对象,其中所述第二对象包括所述第一对象的地址,所述数据处理系统包括..处理器;耦合到所述处理器的互连;以及耦合到所述互连的系统存储器,其中所述系统存储器还包括压缩管理器,用于用终值初始化压缩数据结构中的每个入口,其中所述压缩数据结构内的每个入口对应于第一压缩区域内的地址;响应于确定至少所述第一对象存储在所述压缩区域内,定位对应于所述第一对象的所述地址的所述压缩数据结构内的第一入口;通过下述创建引用链将所述第二对象的地址存储在所述第一入口中,以及将存储在所述第一入口中的值存储在所述第二对象中,为所述第一对象计算新地址,遍历从所述第一入口开始的所述引用链,并且用所述新地址更新所述链,直到遇到所述终值;以及将所述第一对象移动到由所述新地址指定的位置。7.根据权利要求6所述的数据处理系统,还包括垃圾收集管理器,用于如果压缩是未激活的并且无益的,那么只执行垃圾收集功能。8.根据权利要求6所述的数据处理系统,还包括标记代码,用于确定是否所述第一对象是可移动的,并且响应于确定所述第一对象是不可移动的,设置所述第一对象的新对象地址等于所述第一对象的当前对象地址。9.根据权利要求8所述的数据处理系统,其中所述标记代码设置所述第一对象的所述新对象地址,等于所述压缩区域的起点加上所述第一入口的索引乘以对象粒值。10.如权利要求9所述的数据处理系统,其中所述对象粒值是对象起点的字节最小对准。全文摘要一种方法、系统和计算机可使用的介质,用于当增量压缩堆时更新引用。压缩管理器用终值初始化压缩数据结构中的每个入口,其中压缩数据结构内的每个入口对应于第一压缩区域内的地址。压缩管理器定位对应于第一对象的地址的压缩数据结构内的第一入口。压缩管理器将第二对象的地址存储在第一入口中,并且将存储在第一入口中的值存储在第二对象中。压缩管理器为第一对象计算新地址,遍历从第一入口开始的引用链,并且用新地址更新所述链直到遇到终值,并且将第一对象移动到由新地址指定的位置。文档编号G06F12/02GK101122884SQ20071014000公开日2008年2月13日申请日期2007年8月7日优先权日2006年8月7日发明者杰弗里·O·布兰迪申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1