CN101809545B - 存储器管理方法及其设备 - Google Patents
存储器管理方法及其设备 Download PDFInfo
- Publication number
- CN101809545B CN101809545B CN2008801084929A CN200880108492A CN101809545B CN 101809545 B CN101809545 B CN 101809545B CN 2008801084929 A CN2008801084929 A CN 2008801084929A CN 200880108492 A CN200880108492 A CN 200880108492A CN 101809545 B CN101809545 B CN 101809545B
- Authority
- CN
- China
- Prior art keywords
- memory area
- action scope
- scope memory
- thread
- root
- 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 - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
一种作用域存储器系统中的存储器管理方法,所述作用域存储器系统包括作用域存储器区域,用于在其中分配对象以便由一个或多个执行中的软件线程访问,所述作用域存储器区域与用于表明所述作用域存储器区域可丢弃的线程计数相关联,所述方法包括步骤:针对在所述作用域存储器区域中分配的对象识别一组根引用;递归地遍历并标记从该组根引用被引用并且在所述作用域存储器区域中分配的对象;以及识别所述作用域存储器区域中没有被这样标记的对象,并且丢弃所识别的对象。
Description
技术领域
本发明涉及计算机系统中的存储器管理。更具体地,本发明涉及作用域存储器(scoped memory)的垃圾收集(garbage collection)。
背景技术
常常设计运行时环境中的存储器管理以便为软件工程师提供便利。由于这个原因,例如Java(Java是Sun微系统公司的注册商标)的运行时环境包括具有垃圾收集器的堆存储器(heap memory)。垃圾收集器是用于从存储器自动地识别并丢弃未使用的数据(例如对象)以便释放存储装置的运行时工具。
垃圾收集是由现代计算机系统的效率提供的“奢侈品”,用于把软件工程师从通过编程来丢弃每一个未使用的对象的任务中解放出来。然而它存在一些缺点。一个这样的缺点是垃圾收集处理通常要求暂停执行用于访问堆的软件线程。这是因为当软件线程主动地分配并访问现有的或新的对象时,无法正常进行用于识别并丢弃未使用的对象的处理。为了使垃圾收集器有效地操作,在垃圾收集处理的持续期间,堆的状态最好是静态的且确定的。用于垃圾收集的线程的暂停持续时间取决于在堆中所存在的数据对象的数目和种类,并且可能在从短到察觉不到的持续时间到长到会被用户察觉的时段的范围内变动。因而垃圾收集处理可能导致具有不确定的频率和持续时间的延迟。这些缺点使垃圾收集运行时环境固有地不适用于依赖于执行的连续性和可预测性的软件。这种软件包括例如在监视和控制应用中使用的那些关键性实时应用,并且一般阻止这些应用访问垃圾收集存储器以便确保它们的连贯性和稳定性。
为了解决垃圾收集堆存储器的这些缺点,运行时环境可以被适配 来使用作用域存储器区域(sloped memory area)。作用域存储器区域是适用于对象的分配和解除分配而没有垃圾收集堆的某些缺点的存储区域。软件线程可以进入作用域存储器区域,然后由该线程在所述作用域存储器区域内进行所有对象分配。所述线程还可以按照嵌套方式进入多个作用域存储器区域。例如,所述线程可以进入变为默认的分配区域的第二作用域存储器区域。在作用域图表(scope graph)中组织作用域存储器区域,每个作用域存储器区域具有一个父辈(parent),该父辈是先前进入的作用域存储器区域。第一作用域存储器区域具有原始的作用域存储器区域作为其父辈。
为每个作用域存储器区域维护该区域中的多个活动线程的线程计数。与作用域图表耦合的线程计数表明作用域存储器区域(包括在所述作用域存储器区域中分配的任何对象)何时是可丢弃的。例如,当相关联的线程计数从一减到零并且作用域存储器区域不是任何其它作用域存储器区域的父辈时,该作用域存储器区域可以是可丢弃的。依照这种方式,作用域存储器区域向对象提供可供选择的分配空间(否则所述对象在垃圾收集运行时环境、例如Java中)。由于作用域存储器区域中的所有对象在按照存储器区域的线程使用和作用域图表的组织所定义的相同时间变得可被丢弃,所以使用这种作用域存储器区域可以解决在应用执行中由垃圾收集算法所导致的延迟和不确定性的问题。
第一作用域存储器区域中的第一对象可以引用第二作用域存储器区域中的第二对象。然而,由于单独的作用域存储器区域可能变得可完全被丢弃,所以必须实施关于在不同作用域存储器区域中的对象之间的有效和无效引用的严格规则。这些规则必须保证父辈作用域存储器区域的寿命至少是其子辈作用域存储器区域的寿命,使得后辈存储区域中的对象可以可靠地引用先辈存储区域中的对象。依照这种方式,可以避免悬空引用(dangling reference)。这在“Efficient Memory-Reference Checks for Real-time Java”(Corsaro和Cytron,ACMSIGPLAN第38卷,2003年7月7日发行)”中有所描述。
一个这样的规则是作用域存储器区域具有至多一个父辈。这被称为“单父辈规则”。单父辈规则规定不同线程进入作用域存储器区域的次序始终是相同的,这是因为线程进入作用域存储器区域的次序定义了作用域图表中的作用域存储器区域的结构。此外,在源作用域存储器区域中分配的源对象只能引用在相同或先辈作用域存储器区域中的目标对象。先辈作用域存储器区域是在源作用域存储器区域之前线程进入的存储区域。源作用域存储器区域被认为是具有相对于目标对象来说更靠内部的作用域。此准则确保了源对象总是在目标对象之前被解除分配。依照Java的实时规范(Bollella等人,Addison-Wesley,2000年),试图创建不满足该准则的引用一定会失败。因而,每当创建对目标对象的新引用时,必须以有效的方式检查所述准则。
确定对于创建对象之间的引用来说是否满足此准则的一种方式是通过作用域图表中的作用域存储器区域进行迭代。迭代开始于源作用域存储器区域,并且通过每个父辈作用域存储器区域前进,以检查目标作用域存储器区域。如果在迭代期间在作用域图表内遇到目标作用域存储器区域,那么因为目标区域是源区域的先辈,所以可以断定满足所述准则。如果迭代到达原始的作用域存储器区域(作用域图表的“根”),那么因为目标作用域存储器区域不是源作用域存储器区域的先辈,所以可以断定不满足所述准则。
一种另选的方式是确定目标对象的作用域存储器区域和原始的作用域存储器区域之间的距离的索引(index)。此距离可以被认为是目标作用域存储器区域的“深度”。另外,源对象的作用域存储器区域和原始的作用域存储器区域之间的距离的索引可以被确定为源作用域的“深度”。这里术语深度用来表明作用域存储器区域存在于与原始的作用域存储器区域有一定距离的层次。较深的作用域存储器区域位于作用域图表中距离原始的作用域存储器区域更远的层次上。比较这些深度的索引将确定目标作用域存储器区域是否是源作用域存储器区域的先辈,这是因为后辈区域将总是比先辈区域更深(与原始的作用域存储器区域相距更远)。因而,如果源作用域存储器区域比目标作用 域存储器区域更深,那么满足所述准则并且可以创建引用。
图1是现有技术中示例性的作用域存储器系统100的框图。该作用域存储器系统是计算机系统的存储装置的一部分的安排,例如在Java的实时规范中所描述的作用域存储器系统(Bollella等人,Addison-Wesley,2000年)。在使用中,作用域存储器系统100包括作用域图表102,所述作用域图表102是零或更多个作用域存储器区域(例如作用域存储器区域106)的数据结构安排。作用域图表102在本领域中通常被称为“作用域栈(scope stack)”,不过作用域图表102的数据结构不一定是栈数据结构。作用域图表102可以被实现为有向图表数据结构、栈数据结构、树数据结构、链接列表或适于存储零或更多个作用域存储器区域的任何数据结构。
作用域存储器区域106是在存储装置中所定义的适于分配和引用软件对象的存储区域。可以通过在作用域存储器区域106的环境中执行的软件线程来在作用域存储器区域的分配对象112部分中分配并访问对象。作用域存储器区域106进一步包括线程计数110,作为在作用域存储器区域106的环境中执行的软件线程数目的计数。线程通过显式地进入作用域存储器区域,例如通过调用应用编程接口函数,来在作用域存储器区域106的环境中执行。一旦线程已经进入作用域存储器区域106,就将在作用域存储器区域106内进行对象分配,除非所述线程在其它地方专门分配,例如在通用堆(general heap)或另一作用域存储器区域中。
作用域存储器区域106进一步包括父辈字段108,后者包括对父辈作用域存储器区域的引用。如上所述,作用域存储器区域具有至多一个父辈。通过其间的父子关系定义的作用域存储器区域的安排定义了作用域图表102。没有特定父辈的初始作用域存储器区域将借助占位符(placeholder)引用原始的作用域存储器区域104作为其父辈。
依赖于执行的连续性和可预测性的关键软件可以使用作用域存储器区域来分配对象。由于不对作用域存储器区域进行垃圾收集,所以与垃圾收集处理相关联的延迟和不确定性不会影响作用域存储器或 使用作用域存储器的软件线程。虽然这为关键软件线程提供了确定性,但是它存在以下缺点:在作用域存储器中分配的各个对象不被丢弃,直到所述作用域存储器中的所有对象都是可丢弃的。因而作用域存储器可能被许多未使用的对象消耗。
因此提供具有作用域存储器的确定性和连贯性的垃圾收集的优点是有益的。
发明内容
在第一方面,本发明提供了一种作用域存储器系统中的存储器管理方法,所述作用域存储器系统包括作用域存储器区域,所述作用域存储器区域用于在其中分配对象以便由一个或多个执行中的软件线程访问,所述作用域存储器区域与用于表明所述作用域存储器区域可丢弃的线程计数相关联,所述方法包括步骤:针对在所述作用域存储器区域中分配的对象识别一组根引用(root reference);递归地遍历并标记从该组根引用被引用并且在所述作用域存储器区域中分配的对象;以及识别在所述作用域存储器区域中未被这样标记的对象,并且丢弃所识别的对象。
运行时环境中的垃圾收集堆(garbage collected heap)可以由执行中的所有软件线程使用。因此,所述堆的垃圾收集处理可能要求暂停所有使用所述堆的执行线程。这向所有这种线程施加了不确定的延迟。相比之下,向作用域存储器区域应用垃圾收集处理能够只影响那些访问所述作用域存储器区域的线程。由于此原因,任何这种不确定延迟的范围只限于那些访问该作用域存储器区域的线程。此外,由于这些访问该作用域存储器区域的线程的数量一般很小(与应用中的所有线程相比),所以任何这种延迟的长度也受到限制。因而,被应用于作用域存储器区域的垃圾收集处理将借助于访问作用域存储器的有限数量的线程来提供具有作用域存储器的确定性的垃圾收集的优点。
优选地是,识别一组根引用的步骤进一步包括使所述一个或多个软件线程进入暂停状态,在该暂停状态中临时停止软件线程的执行, 并且其中识别所有对象的步骤进一步包括使所述一个或多个软件线程离开所述暂停状态。
优选地是,所述方法进一步包括借助以下步骤来压缩(compact)作用域存储器区域的步骤:a)把在作用域存储器区域中分配的对象移动到所述作用域存储器区域中的连续的存储单元;并且b)整理(fixup)对移动后的对象的引用以便引用所述作用域存储器区域中的所述连续的存储单元。
优选地是,识别一组根引用的步骤包括识别具有作为根引用的对在作用域存储器区域中分配的对象的引用的软件线程。
在第二方面,本发明提供了一种用于作用域存储器系统中的存储器管理的设备,所述作用域存储器系统包括作用域存储器区域,所述作用域存储器区域用于在其中分配对象以便由一个或多个执行中的软件线程访问,所述作用域存储器区域与用于表明所述作用域存储器区域可丢弃的线程计数相关联,所述设备包括:用于针对在所述作用域存储器区域中分配的对象识别一组根引用的装置;用于递归地遍历并标记从该组根引用被引用并且在所述作用域存储器区域中分配的对象的装置;和用于识别所述作用域存储器区域中未被这样标记的对象并且丢弃所识别的对象的装置。
在第三方面,本发明提供了一种设备,包括:中央处理单元;存储器子系统;输入/输出子系统;和总线子系统,用于互连所述中央处理单元、所述存储器子系统、所述输入/输出子系统;以及如上所述的设备。
在第四方面,本发明提供了一种计算机程序单元,包括计算机程序代码,用于当被加载到计算机系统中并且在其上执行时使所述计算机执行如上所述方法的步骤。
附图说明
下面参考附图仅以举例形式更详细地描述本发明的优选实施例,其中:
图1是现有技术中示例性的作用域存储器系统的框图;
图2是适于本发明实施例的操作的计算机系统的框图;
图3是依照本发明的优选实施例在软件运行时环境中执行的软件应用的框图;
图4是依照本发明优选实施例的图3的作用域存储器垃圾收集器的方法的流程图;和
图5是依照本发明的优选实施例由线程使用的作用域存储器区域的框图。
具体实施方式
图2是适于本发明实施例的操作的计算机系统的框图。中央处理单元(CPU)202经由数据总线208可通信地连接到存储装置204和输入/输出(I/O)接口206。存储装置204可以是诸如随机存取存储器(RAM)或非易失性存储设备的任何读取/写入存储设备。非易失性存储设备的例子包括盘或磁带存储设备。I/O接口206是用于输入或输出数据、或者输入和输出数据的设备接口。可连接到I/O接口206的I/O设备的例子包括键盘、鼠标、显示器(例如监视器)和网络连接。
图3是依照本发明的优选实施例在软件运行时环境中执行的软件应用的框图。软件应用包括执行线程302到308。每个线程是独立的软件执行流并且包括软件指令和线程数据,所述软件指令和线程数据一般被存储在被称为存储器栈的存储区域中。线程302到308包括进入到分配的堆存储器中的引用310到320,所述堆存储器包括垃圾收集堆332和作用域存储器区域330。垃圾收集堆332是用于在运行时环境中执行的线程的存储器分配空间。在垃圾收集堆332中分配软件对象340、338。垃圾收集器可周期性地操作来处理垃圾收集堆332以便丢弃未使用的对象,如在本领域中公知的那样。作用域存储器区域330也是供执行中的线程使用的存储器分配空间,并且在所述作用域存储器区域330中分配软件对象334、336。作用域存储器区域330包 括被配置为访问作用域存储器区域330的线程的数目的线程计数350。线程计数对于确定作用域存储器区域330何时可丢弃(例如当线程计数350表明没有任何线程访问所述作用域存储器区域330时)是有用的。作用域存储器区域进一步包括对父辈作用域存储器区域(例如原始的作用域存储器区域)的引用,如在本领域中公知的那样。
引用310到320是在线程302到308内的对象引用。例如,每个这种引用可以包括存储器地址、基址和偏移,或者指向软件对象的指针。线程302包括对垃圾收集堆332中的对象340的引用310。线程302进一步包括对垃圾收集堆332中的对象338的引用312。线程304包括对垃圾收集堆中的对象338的引用313和对作用域存储器区域330中的对象336的引用314。线程306包括分别对作用域存储器区域中的对象336和334的引用316和318。线程308包括对作用域存储器区域中的对象334的引用320。因而,线程302只包括对垃圾收集堆中的对象的引用。线程306和308只包括对作用域存储器区域330中的对象的引用。线程304包括对垃圾收集堆332和作用域存储器区域330中的对象的引用。在执行中,具有对在垃圾收集堆332中分配的对象的引用的线程302和304将受到该堆332中的垃圾收集器的周期性处理的影响。另一方面,由于线程306和308没有对垃圾收集堆332中的对象的引用,所以它们不受该堆332中的垃圾收集器的影响。相比之下,线程306和308使用作用域存储器区域330,所述作用域存储器区域330可根据线程计数350而被丢弃。
依照本发明的优选实施例,垃圾收集的技术通过作用域存储器垃圾收集器360被进一步应用于作用域存储器区域330。作用域存储器垃圾收集器360是运行时环境的软件或硬件组件,其可操作来识别和丢弃作用域存储器区域330中的未使用的对象。依照这种方式,向作用域存储器区域330提供了垃圾收集的优点,并且被限制为只使用作用域存储器的线程(例如关键性实时线程)能够得益于垃圾收集。
图4是依照本发明优选实施例的图3的作用域存储器垃圾收集器360的方法的流程图。在步骤402,所述方法针对在作用域存储器区域 330中分配的对象识别一组根引用。根引用是直接或间接地引向在作用域存储器区域330中分配的对象的引用。这种引用通常位于引用链的根部,例如存储在处理器寄存器中,位于软件程序栈(包括局部变量和临时量)和全局变量上。识别一组根引用在垃圾收集方法中是固有的并且在本领域中是公知的。例如,这种识别将包括识别具有对在作用域存储器区域330中分配的对象的直接或间接引用的所有软件线程。因而,用于作用域存储器区域330的一组适当的根引用可以包括已经进入作用域存储器区域330的线程中的所有引用。
在步骤404,递归地遍历该组根引用中的每个引用以便识别在作用域存储器区域330中分配的对象。引用的递归遍历涉及依照例如在完全遍历链接列表或树数据结构时所采用的递归方式访问在被引用位置上存储的所有引用。遍历的目的是识别从根引用被引用的在作用域存储器区域330中分配的所有对象。当这样一个对象被识别时,该对象被标记。可以借助任何适当的方式,例如通过在对象本身内设置标志或者通过在例如表的独立数据结构中产生或修正对应于对象的条目来标记对象。依照这种方式,标记由执行中的软件应用(例如经由线程302到308)引用的作用域存储器区域330中的所有对象。
在步骤406,所述方法识别作用域存储器区域330中的未被标记的对象。在步骤406识别的对象是未使用的对象-即,在软件应用中不存在识别出的引用的对象。丢弃在步骤406识别的对象。丢弃对象尤其可以包括:把对象标记为可丢弃,把对象消耗的存储器标记为空闲存储器,或者从存储器主动地删除对象等等。
图5是依照本发明的优选实施例由线程502使用的作用域存储器区域503的框图。线程502进入用于分配对象B和A的作用域存储器区域503。其它对象C、D、E和F也在作用域存储器区域503中被分配并且分别被引用和未被引用。现在图4的方法将被应用于图5的方案以便图示本发明的优选实施例的方法。最初,在步骤402,识别用于在作用域存储器区域503中分配的所有对象的一组根引用。该组只包括线程502中的引用,因为线程502是具有对作用域存储器区域503 中的对象的引用的唯一线程。因而,该组根引用包括引用510和504。在步骤404,所述方法遍历每个根引用510和504并且标记作用域存储器区域503中的对象。因而,遍历根引用510,对象B被标记,因为该对象B在作用域存储器区域503中被分配。对象B的标记由勾号来表明。遍历根引用504,对象A被标记,因为该对象A在作用域存储器区域503中被分配。对根引用504的遍历递归到对对象E的引用506,所述对象E也在作用域存储器区域503中因此也被标记。此外,遍历对对象D的引用508,所述对象D也在作用域存储器区域503中因此也被标记。因而,在完成步骤404时,由于从根引用510和504直接或间接地引用对象B、A、E和D,所以在作用域存储器区域503中标记这些对象。最后在步骤406,所述方法识别在作用域存储器区域503中被分配的、未被标记的对象。因此识别对象C和F,并且丢弃这些对象。依照这种方式,垃圾收集处理可以被应用于作用域存储器区域503。
为了进行上述图4的步骤,可能必须防止改变对作用域存储器内对象的引用,以及防止改变作用域存储器内的对象,以便作用域存储器垃圾收集器360可以在静态下对作用域存储器区域330进行操作。为了实现这一点,用于访问作用域存储器区域330的所有线程优选地被转变为暂停状态,在所述暂停状态中停止执行软件线程。相应地,在完成垃圾收集处理时,用于访问作用域存储器区域330的所有线程优选地被从暂停状态转变到活动状态。
此外,在完成垃圾收集操作时,优选可以通过压缩(compaction)来整理作用域存储器区域330。压缩是在存储器空间内移动对象的过程,使得它们所占据的存储器基本上是连续的,留下相对较大的空闲存储器区域。相比之下,在未压缩的存储器中,许多分配的对象可能被广泛分布,在它们之间留下许多小的空闲存储器区域。压缩涉及把在作用域存储器区域330中分配的对象移动到所述作用域存储器区域330中连续的(或基本上连续的)存储单元。另外,需要更新对每个移动后的对象的引用以便对应于所述对象的新存储器单元。这被称为 整理(fix up)引用的过程。
所描述的本发明的实施例可以至少部分地使用软件控制的可编程处理设备来实现,例如微处理器、数字信号处理器或其它处理设备、数据处理设备或系统,应当理解,用于配置可编程装置、设备或系统以实现上述方法的计算机程序被认为是本发明的一个方面。计算机程序可以被实现为源代码或经过编译以在处理装置、设备或系统上实现或者例如可以被实现为目标代码。
适当地是,计算机程序以机器或设备可读的形式被存储在载体介质上,例如存储在固态存储器、例如磁盘或磁带之类的磁存储器、例如光盘或数字多用盘等光或磁光可读存储器,并且处理装置利用程序或其一部分来配置它以用于操作。计算机程序可以从用通信介质实现的远程源提供,所述通信介质例如电子信号、射频载波或光学载波。这种载体介质也被设想为本发明的一个方面。
本领域技术人员应当理解,尽管已经相对于上述示例性实施例描述了本发明,但本发明并不局限于此并且存在落入本发明范围内的许多可能的变化和修改。
本发明的范围包括这里公开的任何新颖的特征或特征组合。申请人在此提请注意,在本申请或从本申请衍生的任何这种进一步申请的审批期间可能针对这些特征或特征的组合形成新的权利要求。特别地是,参考所附权利要求,可以把从属权利要求的特征与独立权利要求的那些特征相组合并且可以依照任何适当的方式而不仅是依照在权利要求中列举的具体组合来组合各个独立权利要求的特征。
Claims (8)
1.一种作用域存储器系统中的存储器管理方法,所述作用域存储器系统包括作用域存储器区域,所述作用域存储器区域用于在其中分配对象以便由一个或多个执行中的软件线程访问,所述作用域存储器区域与用于表明所述作用域存储器区域可丢弃的线程计数相关联,所述方法包括步骤:
针对在所述作用域存储器区域中分配的对象识别一组根引用;
递归地遍历并标记从该组根引用被引用并且在所述作用域存储器区域中分配的对象;并且
识别所述作用域存储器区域中未被这样标记的对象,并且丢弃所识别的对象。
2.如权利要求1所述的方法,其中识别一组根引用的步骤进一步包括使所述一个或多个软件线程进入暂停状态,在该暂停状态中临时停止软件线程的执行,并且其中识别所有对象的步骤进一步包括使所述一个或多个软件线程离开所述暂停状态。
3.如权利要求1所述的方法,进一步包括步骤:
借助以下步骤来压缩所述作用域存储器区域:
a)把在所述作用域存储器区域中分配的对象移动到所述作用域存储器区域中的连续的存储单元;并且
b)整理对移动后的对象的引用以便引用所述作用域存储器区域中的所述连续的存储单元。
4.如权利要求1所述的方法,其中识别一组根引用的步骤包括识别具有作为根引用的对在作用域存储器区域中分配的对象的引用的软件线程。
5.一种用于作用域存储器系统中的存储器管理的设备,所述作用域存储器系统包括作用域存储器区域,所述作用域存储器区域用于在其中分配对象以便由一个或多个执行中的软件线程访问,所述作用域存储器区域与用于表明所述作用域存储器区域可丢弃的线程计数相关联,所述设备包括:
用于针对在所述作用域存储器区域中分配的对象识别一组根引用的装置;
用于递归地遍历并标记从该组根引用被引用并且在所述作用域存储器区域中分配的对象的装置;和
用于识别所述作用域存储器区域中未被这样标记的对象,并且丢弃所识别的对象的装置。
6.如权利要求5所述的设备,其中用于识别一组根引用的装置进一步包括用于使所述一个或多个软件线程进入暂停状态的装置,在该暂停状态中临时停止软件线程的执行,并且其中用于识别所有对象的装置进一步包括用于使所述一个或多个软件线程离开所述暂停状态的装置。
7.如权利要求5所述的设备,进一步包括:
用于借助以下步骤来压缩所述作用域存储器区域的设备:
a)把在所述作用域存储器区域中分配的对象移动到所述作用域存储器区域中的连续的存储单元;并且
b)整理对移动后的对象的引用以便引用所述作用域存储器区域中的所述连续的存储单元。
8.如权利要求5所述的设备,其中用于识别一组根引用的装置包括用于识别具有作为根引用的对在作用域存储器区域中分配的对象的引用的软件线程的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP07117129 | 2007-09-25 | ||
EP07117129.2 | 2007-09-25 | ||
PCT/EP2008/061713 WO2009040228A1 (en) | 2007-09-25 | 2008-09-04 | Memory management |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101809545A CN101809545A (zh) | 2010-08-18 |
CN101809545B true CN101809545B (zh) | 2012-06-13 |
Family
ID=39870301
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008801084929A Expired - Fee Related CN101809545B (zh) | 2007-09-25 | 2008-09-04 | 存储器管理方法及其设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8291187B2 (zh) |
EP (1) | EP2203827A1 (zh) |
CN (1) | CN101809545B (zh) |
WO (1) | WO2009040228A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7927119B2 (en) * | 2006-06-05 | 2011-04-19 | Thomas & Betts International, Inc. | Electrical connector including cable end seals with tear stop member and related methods |
US8122068B2 (en) | 2007-09-25 | 2012-02-21 | International Business Machines Corporation | Memory management using garbage collection of objects in child scoped memory areas |
US8266190B2 (en) * | 2007-09-25 | 2012-09-11 | International Business Machines Corporation | Memory management for garbage collection of critical real time threads |
JP5153539B2 (ja) * | 2008-09-22 | 2013-02-27 | 株式会社日立製作所 | メモリ管理方法およびその方法を用いるコンピュータ |
JP5391422B2 (ja) * | 2009-09-01 | 2014-01-15 | 株式会社日立製作所 | メモリ管理方法、計算機システム及びプログラム |
JP5459009B2 (ja) * | 2010-03-25 | 2014-04-02 | 富士通株式会社 | 演算処理装置およびメモリリーク検出方法 |
US8819382B2 (en) | 2012-08-09 | 2014-08-26 | Apple Inc. | Split heap garbage collection |
JP6051733B2 (ja) * | 2012-09-25 | 2016-12-27 | 日本電気株式会社 | 制御システム、制御方法、及び、制御プログラム |
WO2014142861A1 (en) * | 2013-03-14 | 2014-09-18 | Intel Corporation | Memory object reference count management with improved scalability |
US9934482B2 (en) * | 2013-05-24 | 2018-04-03 | Sap Se | Content maintenance optimization |
CN113767370A (zh) * | 2019-05-31 | 2021-12-07 | 英特尔公司 | 避免高性能内存管理系统中的垃圾收集 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6341293B1 (en) * | 1994-07-13 | 2002-01-22 | Object Technology Licensing Corp | Real-time computer “garbage collector” |
US5687368A (en) * | 1994-07-22 | 1997-11-11 | Iowa State University Research Foundation, Inc. | CPU-controlled garbage-collecting memory module |
US5873105A (en) * | 1997-06-26 | 1999-02-16 | Sun Microsystems, Inc. | Bounded-pause time garbage collection system and method including write barrier associated with a source instance of a partially relocated object |
US6654948B1 (en) * | 1999-10-12 | 2003-11-25 | International Business Machines Corporation | Methods and apparatus for partial and consistent monitoring of object-oriented programs and systems |
US7089173B1 (en) * | 2000-04-26 | 2006-08-08 | Altera Corporation | Hardware opencore evaluation |
US6865657B1 (en) * | 2000-06-02 | 2005-03-08 | Sun Microsystems, Inc. | Garbage collector for a virtual heap |
US20020078002A1 (en) * | 2000-08-25 | 2002-06-20 | Bottomley Thomas Mark Walter | Memory garbage collection method and apparatus |
US6874074B1 (en) * | 2000-11-13 | 2005-03-29 | Wind River Systems, Inc. | System and method for memory reclamation |
US20030097537A1 (en) * | 2001-10-23 | 2003-05-22 | Sun Microsystems, Inc. | Method and apparatus for scoped memory |
US7092978B2 (en) * | 2003-02-24 | 2006-08-15 | Sun Microsystems, Inc. | Space-efficient, depth-first parallel copying collection technique making use of work—stealing on the same structures that maintain the stack of items to be scanned |
JP4031404B2 (ja) * | 2003-07-29 | 2008-01-09 | シャープ株式会社 | 移動体の位置制御装置 |
US7469324B2 (en) | 2005-01-07 | 2008-12-23 | Azul Systems, Inc. | System and method for concurrent compacting self pacing garbage collection using loaded value and access barriers |
US7822790B2 (en) * | 2003-12-23 | 2010-10-26 | International Business Machines Corporation | Relative positioning and access of memory objects |
US7496897B1 (en) | 2004-03-17 | 2009-02-24 | Timesys Corporation | Multiple code sets for multiple execution contexts |
US7484067B1 (en) * | 2004-05-24 | 2009-01-27 | Sun Microsystems, Inc. | System and method for ensuring non-interfering garbage collection in a real time multi-threaded environment |
EP1717706A1 (en) | 2005-04-29 | 2006-11-02 | Alcatel | Method to reduce the latency caused by garbage collection in a java virtual machine |
US7779054B1 (en) * | 2005-09-30 | 2010-08-17 | Oracle America, Inc. | Heuristic-based resumption of fully-young garbage collection intervals |
US7650580B2 (en) * | 2006-01-03 | 2010-01-19 | Synopsys, Inc. | Method and apparatus for determining the performance of an integrated circuit |
GB0608406D0 (en) * | 2006-04-28 | 2006-06-07 | Ibm | Creating references in a scoped memory system |
US7756911B2 (en) * | 2006-06-09 | 2010-07-13 | International Business Machines Corporation | Method and system for executing a task and medium storing a program therefor |
JP5064134B2 (ja) * | 2007-08-03 | 2012-10-31 | 株式会社日立製作所 | メモリ管理方法およびその方法を用いるコンピュータ |
US8122068B2 (en) * | 2007-09-25 | 2012-02-21 | International Business Machines Corporation | Memory management using garbage collection of objects in child scoped memory areas |
US8266190B2 (en) * | 2007-09-25 | 2012-09-11 | International Business Machines Corporation | Memory management for garbage collection of critical real time threads |
-
2008
- 2008-09-04 WO PCT/EP2008/061713 patent/WO2009040228A1/en active Application Filing
- 2008-09-04 CN CN2008801084929A patent/CN101809545B/zh not_active Expired - Fee Related
- 2008-09-04 EP EP08803683A patent/EP2203827A1/en not_active Withdrawn
- 2008-09-23 US US12/235,636 patent/US8291187B2/en not_active Expired - Fee Related
Non-Patent Citations (1)
Title |
---|
Bollella G. Gosling J..The Real-Time Specification for Java.《COMPUTER》.IEEE Computer Society,2000,第33卷(第6期),第47-54页. * |
Also Published As
Publication number | Publication date |
---|---|
EP2203827A1 (en) | 2010-07-07 |
US8291187B2 (en) | 2012-10-16 |
WO2009040228A1 (en) | 2009-04-02 |
US20090083509A1 (en) | 2009-03-26 |
CN101809545A (zh) | 2010-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101809545B (zh) | 存储器管理方法及其设备 | |
CN101595460B (zh) | 用于收集非托管存储空间的实现 | |
US9870317B2 (en) | Incremental class unloading in a region-based garbage collector | |
EP2225646B1 (en) | Memory management | |
US20110264712A1 (en) | Copy planning in a concurrent garbage collector | |
US10572181B2 (en) | Multiple stage garbage collector | |
US9740716B2 (en) | System and method for dynamically selecting a garbage collection algorithm based on the contents of heap regions | |
CN101405703B (zh) | 在区域性存储器系统中创建引用的方法、装置及其系统 | |
EP3577565B1 (en) | Garbage collector | |
US8631051B2 (en) | Hybrid fragmenting real time garbage collection | |
US20200379955A1 (en) | Incremental metadata aggregation for a file storage system | |
US20050149346A1 (en) | Method and apparatus for efficient implementation of discontiguous objects | |
US11188460B2 (en) | Arena-based memory management | |
Tong et al. | Skew-space garbage collection | |
US20120131069A1 (en) | Object consolidation to a grid of a virtual machine | |
Weemeeuw et al. | A fine-grained parallel memory compaction algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120613 |
|
CF01 | Termination of patent right due to non-payment of annual fee |