CN1894673A - 在多线程处理环境中改进的cheney扫描的执行 - Google Patents

在多线程处理环境中改进的cheney扫描的执行 Download PDF

Info

Publication number
CN1894673A
CN1894673A CNA200380106554XA CN200380106554A CN1894673A CN 1894673 A CN1894673 A CN 1894673A CN A200380106554X A CNA200380106554X A CN A200380106554XA CN 200380106554 A CN200380106554 A CN 200380106554A CN 1894673 A CN1894673 A CN 1894673A
Authority
CN
China
Prior art keywords
pointer
storage
fetch
holding tank
space
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.)
Granted
Application number
CNA200380106554XA
Other languages
English (en)
Other versions
CN100530136C (zh
Inventor
R·赫德森
H·王
W·沃什伯恩
J·申
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN1894673A publication Critical patent/CN1894673A/zh
Application granted granted Critical
Publication of CN100530136C publication Critical patent/CN100530136C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related 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
    • 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
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Image Processing (AREA)

Abstract

在一实施例中,存储器管理方法运用第三指读取运行分配在扫描指针线程和分配指针线程中的第二存储空间里的存储对象的指针线程,使在其被扫描前取出第二存储器空间中的对象。当被扫描的储存槽不具有指向第一储存空间的对象的指针时,读取线程被移至第二储存空间的下一存储位置。当被扫描的存储槽具有一指向第一存储空间对象的指针时,储存对象被预取至共享分配指针线程的高速缓存中。

Description

在多线程处理环境中改进的CHENEY扫描的执行
技术领域
本发明涉及计算系统软件。更特别的是,本发明涉及存储器管理。
技术背景
软件系统的可靠运行通常要求自动确保动态分配存储器的可用性的存储器管理。通常作为无用信息收集可知,这项自动的任务由回收不再会被使用的存储器的无用信息收集器执行。自动无用信息收集使得程序员无需明确地释放存储块并且帮助减少因存储泄漏和过早的存储释放引起的问题。对象是领域与方法的收集。领域可包括具有其他对象的引用指针的可能递归的槽。因为无用信息收集还可以通过减少对用于例示对象的存储器的管理的需求简化程序开发,所以它经常在包括Java及其变体,或者C#(微软公共语言运行时)在内的现代语言中使用。
然而,无用信息收集有一重要的关联的运行时额外开销,其额外开销依赖于具体使用的无用信息收集的算法。对于著名的停机问题来说,通常无用信息收集不可能精确地确定哪些存储对象在活动中以及将来会被程序使用。所有的无用信息收集器使用近似值来确定存储器活动与否。在一“追踪”无用信息收集中,对象如果可被访问,确定为活动中。“复制”无用信息收集是一种通过重新部署可访问对象(选检“无用信息”)以及重新定义残留对象(这些对象不可访问因此是死对象)运行的“追踪”无用信息收集。
例如,一二空间复制收集器是一种把可用存储器分成两个空间的复制无用信息收集器的简单形式。存储对象可处于第一空间,也称之为“从”或“旧”空间。对象可被移动或分配到第二空间,也被称之为“去”或“新”空间。第一个二空间被共同称作被收集空间或C空间。最终,对象可处于第三未收集空间或U空间。对象被分配于第一空间直到满为止。于是,此空间变成“旧”空间。接着,可访问对象被复制到其他“新”空间(通常使用Cheney扫描)且旧空间中以前分配过的存储器被重新定义成为可使用的存储器组合。Cheney扫描是非常有效的无需堆栈或其他辅助空间保存未扫描的存储对象列表的算法。分配在新空间中继续直到满为止,此时,该过程反向重复。值得欣赏的是,可访问对象的复制效率的改良转化为无用信息收集和整个系统执行上的改良。
附图说明
发明可通过以下的详细描述和发明实施例的附图被充分理解,然而,这些详细描述和发明实施例的附图不能把发明限制于所描述的特定实施例中,而只是用于解释和理解。
图1是示意性说明支持多线程处理的计算系统。
图2是CHENEY扫描的操作的现有技术说明。
图3说明了运用多线程的改良的CHENEY扫描的程序逻辑。
图4说明了运用“第三指”指针的改良CHENEY扫描的操作。
具体实施方式
图1说明了含有处理器12和存储器系统13(可以是外部高速缓冲存储器,外部RAM和/或部分内置于处理器的存储器)的计算系统10用来执行指令,指令可由作为计算机程序产品按软件方式从外部提供并保存在数据存储单元18中。处理器12能支持多线程(线程是执行可以独立于其他线程运行而可以直接与其他线程共享数据的指令的序列)。线程支持通常通过例如Java和C#的计算机语言实现。
本发明的计算机系统10包括一个或多个I/O(输入/输出)装置15,它包含诸如监视器的显示装置。I/O装置还可包括输入装置,例如键盘,诸如鼠标、轨迹球或轨迹垫的光标控制。此外,I/O器件也可包括网络连接器使得计算机系统10是局域网(LAN)或广域网(WAN)的一部分。
系统10的实例包括,但并不限于计算机(例如,桌上型电脑、膝上型电脑、服务器、工作站、个人数字助理等等)或与之相关的外围设备;通讯设备(例如电话机、手机、寻呼机等等);电视置顶盒等等。“连接”或“链接”被广泛定义为逻辑或物理通信路径,例如,电线、光纤、电缆、总线轨道、甚至是利用红外线、射频(RF)或其他无线信令机制的无线信道。此外,术语“信息”被定义为一个或多个比特的数据、地址和/或控制。“代码”包括执行时实现某些功能的软件或固件。代码实例包括应用程序、操作系统、applet(Java程序)、引导程序代码或其他指令系列、或微码(即,在特权级和OS下运行的代码)。
或者,实现上述方法和系统的逻辑可以在另外的计算机和/或机器可读媒体上实现,例如离散硬件组件如大规模集成电路(LSI’s),专用集成电路(ASIC’s),微码或如电子可擦可编程只读存储器(EEPRPM’s)的固件;或者通过电、光、声和其他形式传播信号(例如无线电波或者红外线光信号)转送信息的远程计算机。
根据本发明,在一个实施例中,可被数据存储单元18读取的计算机程序产品可以包括一机器或计算机可读媒介,其上存储了可用于对计算机(或其他电子装置)进行编程(即,定义操作)从而执行一过程的指令。数据存储单元18的计算机可读媒介可包括,但并不限于,软盘、光盘、紧致盘、只读存储器(CD-ROMS)、光磁盘、只读存储器(ROMS)、随机存取存储器(RAMS)、可擦可编程只读存储器(EPROMs)、电子可擦可编程只读存储器(EEPROM‘S)、磁卡或光卡、闪存等,其中包括任何升级、改编、产生、激活或保留微码增强激活的方法。
因此,计算机可读媒介包括适合存储电子指令的任何类型的媒体/机器可读媒介。此外,本发明也可以作为计算机程序产品被下载。如此一来,程序就可从远程计算机(例如,服务器)被传送至请求计算机(例如,客户机)。程序传送可通过通讯链接(例如,调制解调器、网络连接等等)借助于包含在载波或其他传播媒介中的数据信号。
在一实施例中,本发明的方法包含在用于控制计算系统10的操作的机器可执行指令中,特别是用于控制处理器、寄存器、高速缓冲存储器以及普通存储器的操作。指令可用于使得用指令编程的通用或专用处理器执行本发明的步骤。或者,本发明的步骤可通过含有执行步骤的硬布线逻辑特殊的特定硬件组件(包括微码)或通过已编程计算机组件和定制硬件组件的任何组合得以实现。
应理解,各种术语和技术被熟练技术人员用来描述通信、协议、应用、实现、机制等等。一种诸如此类的技术是在算法或数学表达方面的技术实现的描述。也就是说,比如虽然此技术可以通过在计算机上执行代码来实现,此技术的表述可以更适宜和简洁地通过公式、算法或数学表达式作为一般定义程序流程逻辑的伪代码传送和传达。
因此,技术熟练人士会意识到将A+B=C表示为以硬件和/或软件实现的附加功能的块将接收两个输入(A和B)并产生一个合计输出(C)。因而,将公式、算法或数学表达式用作描述应该被理解为在至少硬件和/或软件中有物理实施例(例如计算系统,其中本发明的技术可以被实施和实现成实施例)。
图2是现有技术中已知的CHENEY扫描的表示,如图2所示,经典的CHENEY扫描20通过从根目录中复制可以达的对象到“到(to)”空间开始。运用“分配指针”顺序地分配对象,该分配指针标记CHENEY空间中分配和未分配区域的边界。使用扫描指针扫描对象,该指针从分配的第一对象开始并顺序地从左向右扫描对象。如果CHENEY扫描遇到一个表示到已经有一个“到”空间版本的“从(from)”空间中的对象的槽,则该槽会被更新为表示“to”版本。如果CHENEY扫描遇到一个“从”空间中的还没移入“to”空间的对象,则利用分配指针将该对象的版本分配到“到”空间。分配指针受对象尺寸触碰。最后,保持“从”对象地址的槽将被更新成指向对象的新“到”版本。这项技术有时被称为二指技术,其中右指代表分配指针,左指代表扫描指针。扫描移动左指而分配移动右指,当扫描指针跟上分配指针即两指针会合时,Cheney扫描终止。因为“从”空间是有限的,所以可保证算法终止。
不幸的是,操作中,图2的Cheney扫描经常会遇到不在存储器高速缓存中的“从”空间中的对象。Cheney扫描停止,直到该对象被拖入高速缓存内,这降低了无用信息收集性能。
如图3的程序30所示,通过运用共享共用高速缓存的多线程计算系统,可以消除Cheney扫描停止。通过先于扫描指针取来位于第一“从”存储空间的对象放入高速缓存,“第三指”被用于帮助扫描仪。取线程的第三指对扫描指针和分配指针间的对象进行工作。它扫描检查每个槽的对象。如果槽有空指针或指向不在收集区域中的对象的指针,则将被认为是不感兴趣的且取线程移到下一槽。如果槽有一指针指向“从”空间中的对象,则该对象会被预取入高速缓存中,与分配线程共享。如果指针表示第二“到”空间中的对象,则取现程知道其在复制线程后且立即重新开始被引用的对象。换句话说,它向前跳至还没被扫描的对象。此技术导致了低成本的两线程间的无阻断协调。
图4说明了取线程如何在扫描指针前更新指针。当取线程将检查下一对象时,它会注意是否有指针指向在第一存储器“从”空间中没被复制的对象且它会预取那对象使得扫描线程不遭受潜在的高速缓存不命中。
在强存储器存取排序机器中,分配指针在复制对象前清除刚越过边界指针的vtable,以使取指针会看到空vtable并知道其已到达了边界指针。当取线程遇到一有着涉及已被移动的对象的槽时,它将更新该槽使其表示对象的“到”版本。这通过消除加载“从”对象接着解析对象报头以确定它是否已被移动的需要而有助于分配线程。在弱存储器存取排序机器中,取线程必须定期地加载分配指针并扫描到该分配指针。
此程序引进了多种良性竞态条件。首先,分配线程可以移动越过取线程。分配线程是不受影响的。然而,取线程会遇到有着指向“到”空间指针的对象。这是取线程会遇到此类指针的唯一情况。如果其遇到的指针指向位于正被扫描对象的右边的对象时,则取指针可以在该对象处重新开始取,因为分配指针至少可以到达那么远。
当取线程和分配线程互相通过时,这两个线程可以试图更新正被扫描对象中的槽。因为这两个线程试图使用相同的值更新指针,此竞态条件是良性的且算法保持正确。
应注意,取线程不复制对象或更新分配指针。此工作为分配线程预备所以我们不必使分配指针同步。取线程可以通过分配指针且这可以被检测,因为使得超过分配指针的存储器是零。由于分配指针将不会指向越过已初始化的存储器,所以可能发生的最坏情况是取线程会取到一已过时的分配指针于是过早地停止扫描。取线程不必作任何事来确保算法是正确的,它只试图去卸下通常由分配线程做的工作,从而加快了分配线程。
为更清楚地理解该过程,下列伪代码说明了一个改良Cheney扫描的可能实现方案:
  //Allocating thread will clear vtable at frontier pointer.

  FetchingThread(){

      While(the fetch pointer !=allocation_ptr){

          Fetch_ptr=Fetch_object_scan(fetch_ptr);

      }

  }

  void FetchObjectScan(Java_java_lang_Object*obj){

       Java_java_lang_Object *slot=first_slot(obj)

       Java_java_lang_Object *result=obj;

       //Inspact all slots in the object.

      while(slot){

           if(*slot is in a collected area)  {//is the object interesting

                if(*slot has already been forwared){

                    *slot=get_forwarded_obj_for_fetch(slot);

                }
				
				<dp n="d5"/>
         else if(*slot has already been updated.){

                   //we are behind the allocating thread

                  //skip to the right to try and catchup.

                  If(*slot>slot){

                      //*slot has been allocated and is ahead of us so skip to

                      //scanning that object.

                      Return *slot;

                  }else{

                     //object is behind so move ahead as quickly as possible.

                     result+=get_object_size(obj);

                     return result;

                   }

          }else{

              //*slot is uninteresting since it is not in a collected area.

          }

          slot=get_next_slot(obj);
      }

      result+=get_object_size(obj);

      return result;
}
Java_java_lang_object *get_forwarded_obj_for_fetch(Java_java_lang_Object*obj)
{

     if(is_forwarded(*slot)){

        return get_forwarded(*slot);

     }else{

       //fetch the object for the allocating thread.

        unsigned int size=get_object_size(*slot)

        prefetch(*slot,size);

     }
}
  Java_java_lang_Object *get_forwarded_obj_for_alloc_thread

                                              (Java_java_lang_Object *obj)
  {

       if(is_forwarded(*slot)){

          return get_forwarded(*slot);

       }else{

          Java_ja va_lang_Object *forwared_ptr=MARK_FORWARD(allocation_ptr);

          unsigned int size=get_object_size(*slot);

          //we need to copy this object.

          Memcpy(*slot,allocation_ptr,size);

          Allocation_ptr+=size;
          *allocation_Ptr=NULL;//Clear next field(the vtable}to indicate

                               //allocation frontier to prefetching thread.

          *slot=forwarded_ptr;

       }
  }
  void Allocating_Thread (){

    While(allocation_pointer 1=scanning_pointer){

        scanning_ptr=cheney_scan_object(scanning_ptr);

    }
  }
  //Return a pointer to the next object to scan.
  void* CheneyScanObject(Java_java_lang_Object*obj){

     Java_java_lang_Object *slot=first_slot(obj)

     Java_java_lang_Object *result=obj;
     while(slot){

          if(*slot is in collected area){//is the object interesting

              if(is_forwarded_p(*slot))){

                  *slot=**slot;

              }

          }else if(*slot has not been moved){

                 //Move it,remember where we moved it and update the slot.
                  memcopy(*slot,allocation_ptr,get_object_size(*slot));

                 **slot=allocation_ptr;         //Remember to version in from

                 *slot=allocation_ptr;           //Update the slot

                  allocation_ptr+=get_object_siza(*slot);

           }else{
                  //*slot is not interesting.

           }

     }

     result+=get_object_size(obj);

     return result;
  }
在说明书中涉及“一个实施例”、“一实施例”、“一些实施例”或“其他实施例”时,意思是指结合实施例描述的具体特征、结构或特性被包括在至少一些但不必然是所有的发明实施例中。各种“一个实施例”“一实施例”或“一些实施例”的出现不是必然地都涉及相同的实施例。
如果说明书用“可以”被包括表述一元件、特征、结构或特性,那具体的元件、特征、结构或特性不要求被包括。如果说明书或权利要求书涉及“一个”,“一”元件,那并不意味着只有唯一一个元件。如果说明书或权利要求书涉及“一附加”元件,并不排除一个以上附加元件。
那些收益于此披露的熟悉技术人士会感激很多其他来自于上述描述和图象的变化可以在本发明的范围内产生。因此,其中包括任何改进的以下权利说明书确定了发明范围。

Claims (30)

1.一种储存器管理方法,其特征在于,包括:
使一取指针对分配在扫描指针和分配指针间的第二储存空间中的存储对象进行操作,扫描存储对象以找到具有指向第一存储空间中的对象的指针的槽,
当已扫描的存储槽不具有指向第一存储空间中的对象的指针时,移动该取指针至第二存储空间中的下一个存储槽,以及
当已扫描的存储槽具有指向第一空间中的对象的指针时,预取第一空间的存储对象至与支持分配指针的线程共享的高速缓存中。
2.权利要求1中的存储器管理方法,其特征在于,在扫描到空指针时,取指针移动至下一存储槽。
3.权利要求1中的存储器管理方法,其特征在于,当遇到一指向不在收集区域的对象的指针时,取指针被移动至下一存储槽。
4.权利要求1中的存储器管理方法,其特征在于,进一步包括当遇到一具有指向第二空间中的对象的指针的槽时,更新取指针使其等于扫描指针。
5.权利要求1中的存储器管理方法,其特征在于,支持分配指针的线程在复制存储对象前清除刚通过边界指针的vtable,使得取线程看见一空vtable。
6.一种无用信息收集方法,其特征在于,包括:
把被收集的存储器分成第一和第二存储空间,
用取指针、扫描指针和分配指针扫描第二存储空间以确定将哪些存储对象移至第二存储空间;
当被扫描的存储槽没有一指向第一存储空间中的对象的指针时,移动取指针至第二存储空间中的下一个存储槽,以及
当已扫描的存储槽具有指向第一空间中的对象的指针时,预取存储对象至与支持分配指针的线程共享的高速缓存中。
7.权利要求5中的存储器管理方法,其特征在于,当扫描空指针时,取指针移动至下一存储槽。
8.权利要求5中的存储器管理方法,其特征在于,当扫描到指向不在收集区域的对象的指针时,取指针被移至下一存储槽。
9.权利要求5中的存储器管理方法,其特征在于,进一步包括当取指针位于复制指针线程之后时,使指针指向第二存储空间中的对象。
10.权利要求5中的存储器管理方法,其特征在于,支持分配指针的线程在复制存储对象之前清除刚通过边界指针的vtable,使得取线程看见空vtable。
11.一种制品,它包括一存储媒体其上已储存被机器执行时引起存储器管理的指令,其包括:
使一取指针对分配在位于扫描指针和分配指针间的第二存储空间的存储对象进行操作,扫描存储对象以找出具有指向第一存储空间中的对象的指针的槽,
当被扫描的存储槽没有一指向第一存储空间中的对象的指针时,移动取指针至第二存储空间中的下一个存储槽,以及
当已扫描的存储槽具有指向第一空间中的对象的指针时,预取第一空间的存储对象至与支持分配指针的线程共享的高速缓存中。
12.包括存储有如权利要求11所述的指令的存储媒体的制品,其特征在于,在扫描空指针时,取指针移动至下一存储槽。
13.包括存储有如权利要求11所述的指令的存储媒体的制品,其特征在于,当遇到一不指向收集区域的对象的指针时,取指针被移至下一存储槽,。
14.包括存储有如权利要求11所述的指令的存储媒体的制品,其特征在于,进一步包括当遇到一具有指向第二空间中的对象的指针的槽时,更新取指针使其等于扫描指针。
15.包括存储有如权利要求11所述的指令的存储媒体的制品,其特征在于,支持分配指针的线程在复制存储对象前清除刚通过边界指针的vtable,使得取指针看见空vtable。
16.一种制品,包括一存储媒体,其上已存储当被机器执行时产生无用信息收集的指令,其包括:
将被收集的存储器分成第一和第二存储空间,
用取指针、扫描指针和分配指针扫描第二存储空间以确定哪些存储对象移至第二存储空间
当被扫描的存储槽没有指向第一存储空间中的对象的指针时,移动取指针至第二存储空间中的下一个存储槽,以及
当已扫描的存储槽具有指向第一空间中的对象的指针时,预取存储对象至与支持分配指针的线程共享的高速缓存中。
17.包括存储有如权利要求16所述的指令的存储媒体的制品,其特征在于,取指针在扫描空指针时被移至下一存储槽。
18.包括存储有如权利要求16所述的指令的存储媒体的制品,其特征在于,当扫描到一个指向不在收集区域中的对象的指针时,取指针被移至下一存储槽。
19.包括存储有如权利要求16所述的指令的存储媒体的制品,其特征在于,进一步包括当取指针在复制指针线程之后时,使指针指向第二存储空间中的对象。
20.包括存储有如权利要求16所述的指令的存储媒体的制品,其特征在于,支持分配指针的线程在复制存储对象前清除刚通过边界指针的vtable,使得取指针看见空vtable。
21.一种储存管理系统,其特征在于,包括:
具有一被连接的存储器的处理器,该处理器可执行以便运行已连接存储器上的存储对象,存储对象分配在扫描指针和分配指针间的第二存储空间中,所述系统用于扫描存储对象以找到具有指向第一存储空间中的对象的指针的槽,
当已扫描的存储槽没有指向第一存储空间中的对象的指针时,移动取指针至位于第二存储空间的下一个存储槽,以及
当被扫描的存储槽有指向第一空间中的对象的指针时,预取第一空间的存储对象进入与支持分配指针的线程共享的高速缓存中。
22.如权利要求21所述的存储器管理方法,其特征在于,在扫描到空指针时,取指针被移至下一个存储槽。
23.如权利要求21所述的存储器管理系统,其特征在于,当遇到指向不在收集区域内的对象的指针时,取指针被移至下一存储槽。
24.如权利要求21所述的存储器管理系统,其特征在于,进一步包括当遇到具有指向第二空间中的对象的指针的槽时,更新取指针使其与扫描指针相等。
25.如系统21的存储器管理方法,其特征在于,支持分配指针的线程在复制存储对象前清除刚通过边界指针的vtable,使得取指针看见空vtable.
26.一无用信息收集系统,其特征在于,包括:
具有一被连接的存储器的处理器,其可执行以便运行已连接存储器中的存储对象以及将被收集的存储器分成第一和第二存储空间,
用取指针、扫描指针和分配指针扫描第二存储空间以确定哪些存储对象移至第二存储空间;
当被扫描的存储槽没有一指向第一存储空间中的对象的指针时,移动取指针至位于第二存储空间中的下一个存储槽,以及
当已扫描的存储槽具有指向第一空间中的对象的指针时,预取存储对象至与支持分配指针的线程共享的高速缓存中。
27.如权利要求26所述的存储器管理方法,其特征在于,当扫描到一空指针时,取指针被移至下一存储槽。
28.如权利要求26所述的存储器管理方法,其特征在于,当遇到一指向不在收集区域内的对象的指针时,取指针被移至下一存储槽。
29.如权利要求26所述的存储器管理方法,其特征在于,进一步包括当取指针在复制指针线程之后时,使指针指向第二存储空间中的对象。
30.如权利要求26所述的存储器管理方法,其特征在于,支持分配指针的线程在复制存储对象前清除刚通过边界指针的vtable,使得取指针看见空vtable。
CNB200380106554XA 2002-12-20 2003-11-20 存储器管理方法和系统以及无用信息收集方法和系统 Expired - Fee Related CN100530136C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/327,557 2002-12-20
US10/327,557 US6993540B2 (en) 2002-12-20 2002-12-20 Prefetching memory objects into a shared cache during garbage collection with a three-finger Cheney scan in a multithreaded processing environment

Publications (2)

Publication Number Publication Date
CN1894673A true CN1894673A (zh) 2007-01-10
CN100530136C CN100530136C (zh) 2009-08-19

Family

ID=32594286

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB200380106554XA Expired - Fee Related CN100530136C (zh) 2002-12-20 2003-11-20 存储器管理方法和系统以及无用信息收集方法和系统

Country Status (8)

Country Link
US (1) US6993540B2 (zh)
CN (1) CN100530136C (zh)
AU (1) AU2003294425A1 (zh)
DE (1) DE10393835B4 (zh)
GB (1) GB2412203B (zh)
HK (1) HK1075511A1 (zh)
TW (1) TWI249669B (zh)
WO (1) WO2004061674A2 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108351935A (zh) * 2015-11-12 2018-07-31 Arm有限公司 用于控制有界指针的使用的设备及方法
US10235208B2 (en) 2012-12-11 2019-03-19 Nvidia Corporation Technique for saving and restoring thread group operating state

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7870170B2 (en) * 2005-05-03 2011-01-11 International Business Machines Corporation Method and apparatus for determining leaks in a Java heap
US7801801B2 (en) * 2005-05-04 2010-09-21 Rosenthal Collins Group, Llc Method and system for providing automatic execution of black box strategies for electonic trading
US7747565B2 (en) * 2005-12-07 2010-06-29 Microsoft Corporation Garbage collector support for transactional memory
US8799882B2 (en) * 2005-12-07 2014-08-05 Microsoft Corporation Compiler support for optimizing decomposed software transactional memory operations
US8799432B1 (en) * 2006-10-31 2014-08-05 Hewlett-Packard Development Company, L.P. Managed computer network caching requested and related data from remote computers
US7991808B2 (en) * 2008-05-21 2011-08-02 Apple Inc. Per thread garbage collection
US8898376B2 (en) 2012-06-04 2014-11-25 Fusion-Io, Inc. Apparatus, system, and method for grouping data stored on an array of solid-state storage elements
US9208080B2 (en) * 2013-05-30 2015-12-08 Hewlett Packard Enterprise Development Lp Persistent memory garbage collection
US10025702B1 (en) * 2014-12-10 2018-07-17 Amazon Technologies, Inc. Browser capable of saving and restoring content item state
US9639460B1 (en) * 2014-12-18 2017-05-02 Amazon Technologies, Inc. Efficient string formatting
CN104536773B (zh) * 2015-02-03 2017-11-21 积成电子股份有限公司 基于内存扫描的嵌入式软件动态内存回收方法
US11194714B2 (en) 2020-03-31 2021-12-07 International Business Machines Corporation Deep object graph traversal

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5088036A (en) * 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
US5687368A (en) * 1994-07-22 1997-11-11 Iowa State University Research Foundation, Inc. CPU-controlled garbage-collecting memory module
US5590332A (en) * 1995-01-13 1996-12-31 Baker; Henry G. Garbage collection, tail recursion and first-class continuations in stack-oriented languages
US7013454B2 (en) * 1999-02-22 2006-03-14 Sun Microsystems, Inc. Thread suspension system and method using trapping instructions
US6604182B1 (en) * 1999-10-21 2003-08-05 Oracle Corp. Methods for managing memory in a run-time environment including activation and deactivation of objects
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
US6886085B1 (en) * 2000-04-19 2005-04-26 International Business Machines Corporation Method and apparatus for efficient virtual memory management
US7124252B1 (en) * 2000-08-21 2006-10-17 Intel Corporation Method and apparatus for pipelining ordered input/output transactions to coherent memory in a distributed memory, cache coherent, multi-processor system
US7111294B2 (en) * 2001-01-16 2006-09-19 Microsoft Corporation Thread-specific heaps
US6542911B2 (en) * 2001-03-01 2003-04-01 Sun Microsystems, Inc. Method and apparatus for freeing memory from an extensible markup language document object model tree active in an application cache
US6662274B2 (en) * 2001-06-20 2003-12-09 Intel Corporation Method for using cache prefetch feature to improve garbage collection algorithm

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10235208B2 (en) 2012-12-11 2019-03-19 Nvidia Corporation Technique for saving and restoring thread group operating state
CN108351935A (zh) * 2015-11-12 2018-07-31 Arm有限公司 用于控制有界指针的使用的设备及方法
CN108351935B (zh) * 2015-11-12 2023-07-14 Arm有限公司 用于控制有界指针的使用的设备及方法

Also Published As

Publication number Publication date
GB0506294D0 (en) 2005-05-04
AU2003294425A8 (en) 2004-07-29
US6993540B2 (en) 2006-01-31
US20040122876A1 (en) 2004-06-24
GB2412203A (en) 2005-09-21
WO2004061674A2 (en) 2004-07-22
AU2003294425A1 (en) 2004-07-29
DE10393835B4 (de) 2012-10-25
GB2412203B (en) 2006-07-12
CN100530136C (zh) 2009-08-19
TW200413912A (en) 2004-08-01
DE10393835T5 (de) 2005-11-17
HK1075511A1 (en) 2005-12-16
WO2004061674A3 (en) 2006-07-27
TWI249669B (en) 2006-02-21

Similar Documents

Publication Publication Date Title
US10394563B2 (en) Hardware accelerated conversion system using pattern matching
US10042643B2 (en) Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
US9921842B2 (en) Guest instruction block with near branching and far branching sequence construction to native instruction block
US10268588B2 (en) Methods of cache preloading on a partition or a context switch
US10185567B2 (en) Multilevel conversion table cache for translating guest instructions to native instructions
US6460126B1 (en) Computer resource management system
CN100530136C (zh) 存储器管理方法和系统以及无用信息收集方法和系统
EP2542973B1 (en) Gpu support for garbage collection
US20020199065A1 (en) Method for using cache prefetch feature to improve garbage collection algorithm
US5740414A (en) Method and apparatus for coordinating the use of physical registers in a microprocessor
US5644746A (en) Data processing apparatus with improved mechanism for executing register-to-register transfer instructions
CN1894662A (zh) 作为用于执行引导码的ram的处理器缓存存储器
US6668307B1 (en) System and method for a software controlled cache
US20020194210A1 (en) Method for using non-temporal stores to improve garbage collection algorithm
US6119206A (en) Design of tags for lookup of non-volatile registers
CN102109980B (zh) 在托管运行时环境中执行自适应预取操作的方法和装置
US8082399B2 (en) Cache bounded reference counting
US6829686B2 (en) Method and apparatus for bag-to-set, buffering remembered set
US20050132160A1 (en) Platform independent method for establishing a run-time data area
US6993750B2 (en) Dynamic registration of dynamically generated code and corresponding unwind information
US8645651B2 (en) Low-contention update buffer queuing for small systems
US7539831B2 (en) Method and system for performing memory clear and pre-fetch for managed runtimes
US20230236835A1 (en) Cooperative garbage collection barrier elision
US7895603B1 (en) Mechanism for enabling virtual method dispatch structures to be created on an as-needed basis
KR100649799B1 (ko) 고속 서브-클레스 검사 및 서브-타입 검사를 컴퓨터에 의해 구현하는 방법 그 시스템

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: 20090819

Termination date: 20171120

CF01 Termination of patent right due to non-payment of annual fee