CN1411576A - 用于通过存储器管理提高引用局部性的方法和装置 - Google Patents
用于通过存储器管理提高引用局部性的方法和装置 Download PDFInfo
- Publication number
- CN1411576A CN1411576A CN01806074A CN01806074A CN1411576A CN 1411576 A CN1411576 A CN 1411576A CN 01806074 A CN01806074 A CN 01806074A CN 01806074 A CN01806074 A CN 01806074A CN 1411576 A CN1411576 A CN 1411576A
- Authority
- CN
- China
- Prior art keywords
- field
- class
- storer
- classes
- order
- 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
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
-
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- Y—GENERAL 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
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99937—Sorting
-
- Y—GENERAL 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
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage 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)
Abstract
公开了用于创建一个用于在存储器中重新排列多个对象的机制的方法和装置。在一个计算机应用程序执行期间,与该多个对象相关联的一个或多个字段在存储器中彼此之间相对的访问频率被确定了。然后产生一种用于根据确定的、由与多个对象相关联的一个或多个字段引用的数据在储存器中彼此之间相对的访问频率,在存储器中重新排列多个对象的机制。
Description
本发明的技术背景
1.发明技术领域
本发明通常涉及计算机软件。尤其是,本发明涉及改进数据在存储器中的位置以增加该数据可以被访问的速度。
2.相关技术的讨论
高速缓冲存储器经常结合主存储器使用以提供一个增加的存储器速度。一般地,从主存储器中复制部分数据以便使该高速缓存包含主存储器这些部分的一份拷贝。当CPU试图读取一个字时,进行一个检查以确定该字是否在该高速缓存中。如果该字是在该高速缓存中,则从高速缓存中读取该字。否则,从主存储器中读取多个字以保存在高速缓存中,并且把该字提供给CPU。
当一个字不在高速缓存中时,它必须从主存储器中读取,这增加了存储器访问时间。为了增加请求的数据存在于高速缓存中的可能性,高速缓存一般使用直观推断来猜测哪个数据将被访问并且复制这个数据到高速缓存中。因此,计算机存储器系统经常依赖高速缓存来保持最经常访问的条目接近于处理器。
因为多个字同时被保存在高速缓存中,所以数据在存储器中的位置能够影响高速缓存的效率由此影响一个计算机系统操作的整体速度。因此有效地在存储器中布置数据(例如,对象)以最大化速度是重要的。先前的提议技术具有大的开销或者不能在诸如执行Java字节码的一个动态环境中使用。
为了删除不再从存储器中引用的对象,经常执行垃圾收集。两个执行垃圾收集的通常使用方法是“标记和扫除”方法以及“复制垃圾收集”方法。如将在下面进一步详细描述的那样,在垃圾收集处理期间可以在某种程度上执行在存储器中的数据重新定位。
图1A是一个示例框图,说明了在一个传统的标记和扫除垃圾收集处理期间、对象在存储器中的放置。如图1A所示,说明了对象102、104、106、和108。更详细地说,对象102引用了对象104和106,而且由一个执行线程引用。一般在二次扫描中执行标记和扫除垃圾收集。在第一次扫描期间,标记每一个没有被任意对象引用的对象。例如,对象108没有被任何对象102、104、或者106引用,因此被标记用于删除。在第二次扫描期间,回收用于每一个没有被标记的对象的存储器。
图1B是一个框图,说明了当一个传统的标记和扫除垃圾收集过程完成时、图1A中的存储器。如同所示,在图1A中标记的对象108被删除了,因此没有在图1B中显示。在垃圾收集处理完成之后,剩余对象102、104、和106。重要的是注意到:在标记和扫除垃圾收集期间通常没有重定位对象。
通常也使用另一种垃圾收集方法,复制垃圾收集。图2A是一个示例框图,说明了在一个传统的复制垃圾收集处理期间、在存储器中的对象。如所示,在存储器200内有多个对象。例如,一个第一对象202″A″、一个第二对象204″B″、以及一个第三对象206″D″,被保存在存储器中和所有可以从一个根达到。此外,一个第四对象208″C″被保存在存储器200中,但是没有被在存储器中的任何其他对象引用。
图2B是一个框图,说明了当一个传统的复制垃圾收集处理完成时、图2A中的存储器。在复制垃圾收集期间,所有被一个或多个对象引用的对象被复制了,同时那些没有被任何其他对象引用的对象没有被复制。因此,所有没有被复制的对象是垃圾。例如,如图2B所示,第四对象208″C″没有被复制。一旦复制了,用于在图2A中显示的原有对象的存储器则可以被回收。
在复制垃圾收集期间,在复制过程期间对象可以以各种次序放置。图3A是一个框图,说明了对象在存储器中的一个示例配置。如所示,存储器300存储一个第一对象302″A″、一个第二对象304″B″、一个第三对象306″D″。第一对象302引用第二对象304和第三对象306。一个第四对象308″C″,没有由对象引用。
因为第一对象302引用了第二和第三对象304和306,这些对象可以以两个不同的次序放置。图3B是一个框图,说明了当复制垃圾收集完成时,图3A中的对象的一个可能的配置。如所示,第二对象304可以放置在接近于第一对象302地方,同时第三对象306可以放置在接近于第二对象304的地方。
图3C是一个框图,说明了当复制垃圾收集完成时,图3A中的对象的另一个可能的配置。如所示,而不是把第二对象304放置在接近于第一对象302地方,第三对象306被放置在接近于第一对象302的地方。在图3B和图3C中说明的简化示例中,对象可以以两个不同的次序进行放置。如果一种机制被设计成能允许对象被排序的同时最大化对象在存储器中的访问速度的话,将是有利的。
在定向对象的程序设计中,代码和数据被合并到对象中。每一个对象经由它的类定义,其中类确定了一个对象的属性。换句话说,对象是一个类的单独实例。此外,每一对象可以包含各种字段以及方法。
如在1998年10月的International Symposium on MemoryManagement(ISMM′98)发表的、由Trishul M.Chilimbi和James R.Larus所著、标题为“Using Generational Garbage Collection ToImplement Cache-Conscious Data Placement”的文章中公开的那样,在时间方面被紧密访问的对象可以被保存在存储器中,以便它们将在同一个高速缓冲线中被读取。在Chilimbi中公开的处理过程将简要地参考图4A、4B、和4C加以描述。图4A是一个框图,说明了保存在存储器中的一示例组对象和相关的字段。如所示,第一对象400″A″包含一个第一字段402″x″和一个第二字段404″y″。类似地,第二对象406″B″包含一个第一字段408″w″和一个第二字段410″z″。第三对象412″C″包含一个字段414″e″,而第四对象416″D″包含一个字段418″f″。
图4B是一个框图,说明了在访问如图4A所示的对象和字段的一个计算机应用程序执行期间,可以产生的存储器访问的一个示例记录。在Chilimbi中,一个计算机应用程序被检测了,以便记录存储器引用(例如,加载和存储命令)。当该被检测的计算机应用程序被执行时,产生一个存储器访问记录420。更具体地说,对象422对每一次存储器访问进行记录。例如,当从存储器中读取第一对象400″A″的一个字段(例如,第一字段402)时,如图所示,这次存储器访问被记录在入口426中。
该存储器访问记录然后被用于创建一个临时的引用图形,其模型化在对象之间的引用位置。图4C是一个示例临时引用图形,其说明了在存储器中的对象访问以及可以由如图4B所示的存储器访问记录产生的这些存储器访问的临时关系。如临时引用图形428所示,依据在存储器访问记录420中显示的存储器访问临时关系,对象的访问被放置在该图形中。该临时引用图形428然后可以用来实现对象的恰当放置以便那些在时间方面被紧接着访问的对象被彼此紧密接近放置。更详细地说,该临时引用图形428用来在复制垃圾收集期间引导对象被复制的次序。然而,重要的是要注意到:Chilimbi忽略了在相应存储器访问内访问的具体字段。此外,因为记录的创造需要实质的开销用于每一个存储器引用,所以这个记录的创建需要时间和存储器资源。
虽然Chilimbi公开了在存储器中重新排序对象,但是在这些对象内访问的具体字段被忽略了。虽然Chilimbi忽略了字段的访问,但是已经考虑了在单个对象内字段的重新排序而且将参考图5A、图5B、和图5C对其加以描述。
图5A是一个框图,说明了保存在存储器中的一示例组对象和相关的字段。如所示,第一对象500″A″具有一个第一字段502″y″、一个第二字段504″x″、和一个第三字段506″v″。此外,第二对象508″B″包含一个第一字段510″z″、和一个第二字段512″w″。
图5B是一个框图,说明了在访问如图5A所示的对象和字段的一个计算机应用程序执行期间,可以产生的、存储器访问的一个示例记录。标识和记录其中每一个对象516和相关的字段518在存储器中被访问的一个存储器访问记录514。例如,如同所示,当在第一对象″A″500中的第二字段″x″504被访问时,记录被访问的对象″A″520,和被访问的字段″x″522。
一旦存储器访问的记录被创建了的话,该记录然后被用于确定在记录的存储器访问之间的临时关系。然后创建模型化在对象之间的引用位置的一个临时引用图形。图5C是一个示例临时引用图形524,其说明了在图5B的记录中显示的字段引用之间的临时关系。而不是说明在访问的对象之间的关系,图形524说明了在访问的字段之间的关系。如同所示,第一对象500A的第一和第二字段502和504,x和y,被图形化了。该临时的引用图形524然后被用于重新排序在对象A内的字段x和y。如所示,该临时引用图形524指示字段x和y彼此之间的相对次序是不相关的。然而第三字段506,v,的存储将不会干涉x和y的存储,以便x和y彼此非常接近。用这样的方式,在一个特定对象内的字段可以被重新排序。虽然已经在单个对象内重新排序了字段,但是还没有分析字段访问来重新排序那些字段引用的对象。
并不是检测每一个存储器引用,而是有可能检测由一个通过路径简档的执行程序遇到的控制流路径。图6A是一个示例框图,说明了在一个计算机应用程序执行期间所有可能的路径。在这个示例中,每块表示一个或多个计算机指令。块600在条件语句602之前被执行。例如,该条件语句602可以是一个如果-则-否则(if-then-else)语句。取决于该如果-则-否则(if-then-else)语句的结果,有两个分支可以被执行。第一个分支包含块604和606。第二分支包含块608和610。
当执行路径简档(Path profiling)时,控制流的路径被检测了。图6B是一个说明了一个示例路径简档的图,该路径简档说明了与图6A的计算机应用程序相关联的可能路径。如所示,而不是如在Chilimbi中执行的那样检测每一个加载和存储命令,而是把代码插入在显示为块612的判定点处。因为控制流的路径被检测了,路径简档能够确定每一个分支(即,路径)被使用的频率。因此,因为和检测在每一个路径内的每个加载和存储命令相比,路径简档需要较小的开销,所以它是有利的。
鉴于以上所述,如果在存储器中的对象能够通过一个诸如复制垃圾收集的处理过程被重新排序,以最大化该对象的字段可以被访问的速度是所期望的。此外如果使用一个诸如路径简档的处理过程、能够用减小的开销分析该对象字段的访问频率和接近性以确定该对象要被复制的次序,将是有利的。
概述
本发明产生一种机制用于根据获得的、有关从存储器中访问对象字段的信息,在存储器中重新排序对象。例如,这可以通过在复制垃圾收集期间修改字段遍历的次序来完成。用这样的方式,对象可以在存储器中排序以最小化随后从存储器中检索对象的速度。
依据本发明的一个方面,创建了一种用于在存储器中重新排列多个对象的机制。在一个计算机应用程序执行期间,与该多个对象相关联的一个或多个字段在存储器中彼此之间相对的访问频率被确定了。然后产生一种用于根据确定的、与多个对象相关联的一个或多个字段在储存器中彼此之间相对的访问频率,在存储器中重新排列多个对象的机制。
依据这发明的一个方面,产生的机制包含垃圾收集代码,用于在垃圾收集期间重新排列该多个对象。垃圾收集可以以各种方式实现。例如可以执行复制垃圾收集或者复制垃圾收集的某些变化。
依据这发明的还有另一个方面,可以从指示贯穿单个类所有实例的字段引用频率和接近性的信息中创建一个用于在存储器中重新排序对象的机制。依据一个实施例,创建了一种用于在垃圾收集期间修改对象字段被访问的次序的机制。首先,为一个类的所有实例获得字段引用信息,其中该字段引用信息指示由该类的字段彼此之间相对引用的对象引用的频率和接近性。然后从相关的字段引用信息中确定一个类字段次序,其中该类字段次序标识在垃圾收集期间该类的字段将被遍历的一个次序。该处理过程可以为多个类重复,以便该类字段次序与每一个相应的类相关联。
依据本发明的另一个方面,使用该重新排序机制执行垃圾收集。依据一个实施例,标识一个对象并且确定与该对象相关联的一个类。确定与该对象的类相关联的一个类字段次序,其中该类字段次序标识在垃圾收集期间该对象的类字段将被遍历的一个次序。然后在垃圾收集(例如,复制垃圾收集)期间,根据与该对象的类相关联的类字段次序访问该对象的字段。例如,对于每一个访问的字段,可以复制每一个被直接或者间接指向的对象。
本发明允许根据指示在存储器中对象字段引用的接近性和频率的信息,重新排序对象。用这样的方式,那些由这些字段引用的对象在垃圾收集期间可以在存储器中被重新排序。因此,在时间方面被彼此接近访问的对象可以紧密接近地保存在存储器中。这在那些实现了高速缓存的系统中尤其有利,因为这增加了该对象将在同一条高速缓存线中被检索和存储的可能性。因此,可以显著地减少检索彼此紧密接近被访问的对象的时间。
附图简要说明
有可能通过参考下列描述并结合附图,可以理解本发明连同它的进一步优点,其中附图为:
图1A是一个示例框图,说明了在一个传统的标记和扫除垃圾收集处理期间、对象在存储器中的放置。
图1B是一个框图,说明了当一个传统的标记和扫除垃圾收集处理过程完成时、图1A中的存储器。
图2A是一个示例框图,说明了在一个传统的复制垃圾收集处理期间、在存储器中的对象。
图2B是一个框图,说明了当一个传统的复制垃圾收集处理完成时、图2A中的存储器。
图3A是一个框图,说明了对象在存储器中的一个示例配置。
图3B是一个框图,说明了当复制垃圾收集完成时,图3A中对象的一个可能配置。
图3C是一个框图,说明了当复制垃圾收集完成时,图3A中对象的另一个可能配置。
图4A是一个框图,说明了保存在存储器中的一示例组对象和相关字段。
图4B是一个框图,说明了在访问如图4A所示的对象和字段的一个计算机应用程序执行期间,可以产生的存储器访问的一个示例记录。
图4C是一个示例临时引用图形,其说明了在存储器中的对象访问以及可以由如图4B所示的存储器访问记录产生的这些存储器访问的临时关系。
图5A是一个框图,说明了保存在存储器中的一示例组对象和相关字段。
图5B是一个框图,说明了在访问如图5A所示的对象和字段的一个计算机应用程序执行期间可以产生的、存储器访问的一个示例记录。
图5C是一个示例临时引用图形,其说明了在图5B的记录中显示的字段引用之间的临时关系。
图6A是一个示例框图,说明了在一个计算机应用程序执行期间所有可能的路径。
图6B是一个说明了一个示例路径简档的图,该路径简档说明了与图6A的计算机应用程序相关联的可能路径。
图7A是一个框图,说明了单个类“A”的一个示例组实例。
图7B是一个示例框图,说明了在一个树数据结构中、图7A的类实例的使用。
图7C是一个示例框图,说明了在一个链表数据结构中、图7A的类实例的使用。
图8是一个说明了一个通用处理过程的处理流程图,该通用处理过程用于在存储器中重新排列对象,以便依据本发明的一个实施例,让具有在时间方面被紧接着访问的字段的对象被紧密靠近地保存在存储器中。
图9是一个处理流程图,说明了一种如在图8中的块806所示、在存储器中重新排列对象的一般方法。
图10是一个图,说明了当如在图9中的块906处执行的复制垃圾收集完成时,一个示例组的对象。
图11是一个处理流程图,说明了依据本发明的一个实施例、在存储器中重新排列对象的一种详细方法。
图12是一个框图,说明了如在图11中的块1104处产生的那样一个示例第一表格。
图13是一个框图,说明了如在图11中的块1106处产生的那样、一个示例第二表格。
图14是一个框图,说明了从诸如在图12和图13中说明的那些表格中、在图11中的块1108处产生的一个示例第三表格。
图15是一个示例框图,说明了如在图11中的块1110处所示那样、排序字段的结果。
图16是一个示例数据结构,其可以在一个垃圾收集处理过程期间被遍历。
图17是一个处理流程图,说明了一种如在图11中的块1114处所示、使用诸如在图15中所示的一个排序处理过程结果和诸如在图16中所示的一个对象数据结构,执行垃圾收集的方法。
图18是图,说明了使用本发明来实现在存储器中对象的存储,以便于在一个高速缓存中有效的访问对象。
图19是一个框图,说明了一个适于实现本发明的典型、通用计算机系统。
最佳实施例的详细说明
在下面描述中,阐述了许多具体的细节以便提供对本发明的一个彻底理解。然而,对于在本领域的技术人员来说,显然可以实践本发明而不用这些细节的某些或者全部。在其它实例中,没有详细描述众所周知的处理过程步骤以便不会不必要地弄模糊本发明。
本发明允许依据由该对象的字段引用的其它对象被引用的频率,在存储器中重新排序对象。依据一个实施例,这个通过贯穿一个给定类的所有实例概括那个类的字段的引用(例如,存储器访问)频率来完成。
此外,依据一个实施例,使用了路径简档。可以在一个短暂时期内,例如在解释一个Java程序期间获取简档,然后在运行时间期间用少量的开销从编译的代码中去掉该简档。以这样的方式,可以重新排序对象而不需要大量的时间和存储器。
一个复制垃圾收集器可以选择各种次序来在存储器中放置对象。依据一个实施例,那些在时间方面将由该应用紧接着访问的对象通过一个复制垃圾收集处理过程被群集在同一条高速缓存线上。
而不是相对于一个给定类的每一个对象检查字段引用的频率,依据一个实施例,本发明贯穿一个给定类的所有实例概括字段访问(即,字段引用)的频率。因为一个给定类的对象经常被用于同一个目的,所以这些对象的行为经常是实质上相同的。因此,相对于单个类的多个实例执行的存储器访问经常是实质上相同的。这个现象将参考图7A到7C进行进一步详细的描述。
图7A是一个框图,说明了单个类700、A的一个示例组实例。第一实例702、对象A1,和第二实例704、对象A2,都具有一个第一字段706、x,和一个第二字段708、y。因此,单个类的多个实例将具有相同的字段而且因此具有相同类型的字段。
由于同一个类的实例具有相同的字段,这些实例将很可能用于相同的环境中。例如,这些对象将经常用于相同的数据结构中,而且因此关于这些对象的字段的存储器访问将以实质上相同的频率和次序发生。
这样一个数据结构的一个示例是一个树数据结构。图7B是一个示例框图,说明了在一个树数据结构中、图7A的类实例的使用。如同所示,一个树数据结构710包含一个根节点712和两个子节点、714和716。例如,第一实例702、对象A1,可以是第一个子节点714同时第二实例704、对象A2,可以是第二子节点716。由于关于在一个树数据结构中子节点的存储器访问实质上一般是类似的,关于单个类实例的存储器访问可以在这个实例中贯穿类进行概括。
一个其中使用了单个类的多个实例的数据结构的另一个示例是一个链表。图7C是一个示例框图,说明了在一个链表数据结构中、图7A中的类实例的使用。显示的链表718包含三个对象:第一对象720、第二对象722、和第三对象724。如同所示,在链表718中的第一对象720可以是类A的第一实例702。类似地,在链表718中的第二对象722可以是类A的第二实例704。关于在一个链表中单元的存储器访问一般用实质上相同的频率执行,而且因此关于单个类实例的存储器访问可以贯穿该类进行概括。
图8是一个说明了一个通用处理过程的处理流程框图,该通用处理过程用于在存储器中重新排列对象,以便依据本发明的一个实施例,让具有在时间方面被紧接着访问的字段的对象被紧密靠近地保存在存储器中。在块802处执行一个计算机应用程序。当该计算机应用程序执行时,在块804处创建在存储器中字段引用的一个记录(例如,路径简档或者字段引用的记录)。然后在块806处使用该字段引用(例如,路径简档或者字段引用的记录)的产生记录,在存储器中重新排列对象。例如,该对象可以在一个复制垃圾收集处理过程期间被重新排列。当上述处理过程完成时,对象被重新排列,以便那些具有在时间方面被紧接着一起访问的字段的对象被紧密接近地保存在存储器中。因此,当从存储器中检索数据到高速缓存中时,这些对象将很可能被保存在同一条高速缓存线中。
在块806处可以使用各种处理过程在存储器中重新排列对象。依据一个实施例,如在图8的块804处记录的那些在字段引用时间方面的频率和接近性贯穿一个给定类的所有实例进行概括。图9是一个处理流程框图,说明了一种如在图8中的块806所示、在存储器中重新排列对象的一般方法。在块902处,对于每一个类,在该类的所有实例上为每一个字段计算在图8的块804处产生的记录中字段彼此之间相对的临时紧密引用的出现率,以产生字段次序信息。例如,可以被收集以产生在一个特定类内字段次序信息的数据可以包含:每一个字段被访问的次数,相对于同一个类的其它字段、在由该字段引用的数据访问之间的时间,相对于同一个类的其它字段、在该字段引用之间的指令(或者存储器访问)数目,以及该类的字段被访问的次序。然后在块904处,依据该字段次序信息排序该字段。
在垃圾收集期间遍历的对象可以被保存在一个诸如树或者有向图的数据结构中。例如,该对象可以以一个一阶深度被复制。在复制集合期间,必须有某些机制用于确定哪个对象或者哪组对象下一个被复制。换句话说,必须有某些机制用于确定下一个遍历哪个指针。依据一个实施例,该字段次序信息被用来确定在该数据结构内遍历的适当路径。因此,在垃圾收集期间,在块906处以排序的次序扫描字段。当每一个字段被“扫描”时,由该字段指向的对象(直接或者间接)被复制了。换句话说,由该字段指向的对象及/或一个相关的对象被复制了。因此,在垃圾收集期间,对于每一个对象,根据与该对象的类相关联的字段次序信息遍历字段,并且由每一个排序字段指向(直接或者间接地)的对象被复制了。例如,可以以一种深度优先方式执行对象的复制。
如上所述,依据一个实施例,对于具有一个或多个字段的对象,依据与该适当类相关联的字段次序信息、在复制垃圾收集期间遍历那些字段。图10是一个框图,说明了在如图9中的块906处执行的复制垃圾收集期间,一个示例组的对象以及那些对象在存储器中的放置。在垃圾收集之前,这些对象被存储在一个存储器1000内。如同所示,第一对象1002、A,具有一个第一字段1004、y,和一个第二字段1006、x。该第一字段1004、y,引用一个第二对象1008、B,而且第二字段1006、x,引用一个第三对象1010、Q。在这个示例中,当相对于在同一个类内的其它字段、字段引用的总数被确定了以及该字段由字段引用的总数排序了时,可以发现由第一字段1004、y引用的数据比由第二字段1006、x引用的数据大很多倍数。因此,当执行复制垃圾收集时,由第一字段1004、y引用的对象被首先复制了。然后复制由第二字段1006、x引用的对象。因此,如同所示,首先复制第二对象1008、B,以便它最靠近第一对象1002、A,同时其次复制第三对象1010、Q。
已经相对于图9和图10在上面描述了一种重新排列对象的一般方法。图11是一个处理流程框图,说明了依据本发明的一个实施例、在存储器中重新排列对象的一种具体方法。依据这个实施例,使用了一个路径简档而不是一个记录以便提供更大的效率。因此,在块1102处,分析一个计算机应用程序的控制流以在该计算机应用程序中插入代码,以允许计算指示每一个路径在运行时间被使用的次数总数的每一个路径的计数。在块1104处,对于每一个路径,计算每一个字段的相关引用数目(相对于在同一个类内的其它字段)以为每一个类产生一个第一表格。将参考图12显示以及进一步详细地描述一个第一表格的一个示例。在块1106处,然后使用插入的代码计算在运行时间使用的每一个路径的计数,以为每一个类产生一个第二表格。将参考图13显示以及进一步详细地描述第二表格的一个示例。然后在块1108处组合第一和第二表格以在运行时间期间在所有路径上获得每一个字段的字段引用数目(相对于在同一个类内的其它字段)。将参考图14进一步详细描述组合第一和第二表格的结果。然后在块1110处为那个类,由在所有路径上引用的字段数目排序每一个类的字段。将参考图15显示以及进一步详细地描述这样一个排序处理过程的结果。然后在块1112处产生以排序次序在存储器中遍历对象字段以及复制由该字段指向的对象的垃圾收集代码。然后在块1114处执行垃圾收集。将参考图17进一步详细描述使用产生的垃圾收集代码(或者其它机制)执行垃圾收集的一种更详细的方法。
如在图11中说明的实施例所示,在编译时间1116期间执行块1102-1104而在运行时间期间执行块1106-1114。然而,重要的是要意识到:在Java中在运行时间期间执行编译。因此,上述仅仅是说明性的而且步骤不需要在单独的编译和执行过程期间执行。
如上参考图11中的块1104所述,计算每一个字段的相关引用(即,存储器访问)的数目(相对于在同一个类内的其它字段)以在每一个路径上为每一个类产生一个第一表格。图12是一个框图,说明了如在图11中的块1104处产生的那样一个示例第一表格。如同所示,对于一个特定路径1202(例如,路径S11),与用于在一个特定类内的每一个字段1206的路径1204相关联的字段引用数目(相对于在同一个类内的其它字段)以表格格式形式给出。例如,在1210处,对于在类A内的字段y1208,与路径511相关联的字段引用1208的数目(相对于字段x)被显示为2。类似地,对于在类A内的字段x1212,与路径511相关联的字段引用数目1214(相对于字段y)被显示为零。重要的是要注意到:字段引用的数目不仅仅是那个字段被引用的次数,而且还包含字段次序信息。作为一个示例,字段引用的数目1204可以指定一个特定字段在同一个类内的另一个字段之后被马上引用(即,从存储器中访问)的次数。作为另一个示例,字段引用数目1204可以指定紧挨在同一个类内的另一个字段之前、一个特定字段被引用的次数。其它示例包含计算一个特定字段在同一个类内每一个其它字段之后/之前被引用的次数,以便为单个字段编辑多个计数。以这样的方式,可以最终编辑字段次序信息。
类似地,如上关于图11中的块1106所述的那样,计算在运行时间期间被遍历的每一个路径次数。图13是一个框图,说明了如在图11中的块1106处产生的那样、一个示例第二表格。如同所示,第二表格标识每一个路径1302以及指示该标识的路径1302在执行计算机应用程序期间被遍历的次数的、相关的路径计数1304。
一旦诸如在图12和图13中说明的第一和第二表格被创建了,则如上所述参考图11中的块1108组合该表格。图14是一个框图,说明了从诸如在图12和图13中说明的那些表格中、在图11中的块1108处产生的一个示例第三表格。当表格都被组合了时,对于在一个特定类内的每一个字段1402,相对于同一个类中的其它字段确定那个字段的引用数目1404。例如,如同所示,对于类A的字段y,在运行时间期间,相对于类A的字段x、在所有路径上的字段引用数目是53。换句话说,这个结果应当等于如果一个记录被创建了而不是一个路径简档被创建了的话、所获得的结果。类似地如同所示,对于类A的字段x,在运行时间期间,相对于类A的字段y、在所有路径上的字段引用数目是5。如上所述,字段引用的数目暗示着该相关字段相对于同一个类其它字段的某些次序信息。
一旦每一个类的字段被排序了,字段次序信息与每一个类的该字段相关联。图15是一个示例框图,说明了如在图11中的块1110处所示那样、排序字段的结果。例如,对于类A1502,每一个字段1504都被排序了。结果,在复制垃圾收集期间字段x1506将首先被遍历,而在复制垃圾收集期间字段y1508将然后被遍历。类似地,对于类B1510,每一个字段1512都被排序了。结果,在复制垃圾收集期间字段z 1514将首先被遍历,而在复制垃圾收集期间字段w1516将然后被遍历。
在垃圾收集处理过程期间复制的对象可以被保存在一个诸如树或者有向图的数据结构中。图16是一个示例数据结构,其可以在一个垃圾收集处理过程期间被遍历。如同所示,垃圾收集处理过程从一个根节点或者根指针1600开始。例如,根指针1600可以从一个堆栈中获得或者可以是一个静态变量。该根指针指向一个第一对象1602。如同所示,每一个对象1602、1604、1606、1608、和1610都具有一个链接到(即,指向)与该对象相关联的类的字段次序的对象头部。例如,如同所示,第一对象1602链接到类A1612。在每一个类的描述中,一般存储一个偏移列表(没有显示以简化说明),该偏移的每一个都与一个特定字段相关联。此外,每一个类都具有一个用于那个类的字段的相关字段次序,其标识在一个诸如复制垃圾收集的垃圾收集处理过程期间相关对象的字段要被遍历的次序。例如,用于类A1612的字段次序1614可以指定字段x要在字段y之前被遍历。类似地,如图16所示,第四对象1604和第三对象1608两个都链接到类B1616。类B1616具有一个相关的字段次序1618,其指定字段z要在字段w之前被遍历。因此关于第四对象1604,例如,由字段z指向的第二对象1606要被遍历而且因此在由字段w指向的第五对象1610之前被复制。
如上参考图11中的块1114所述,使用与每一个相关类相关联的字段次序信息执行垃圾收集处理过程。更详细地说,对于在垃圾收集(例如,复制收集)期间复制的每一个对象,确定该对象的类并且根据与该对象的类相关联的字段次序信息在复制收集期间访问该对象的字段。图17是一个处理流程框图,说明了一种如在图11中的块1114处所示、使用诸如在图15中所示的一个排序处理过程结果和诸如在图16中所示的一个对象数据结构,执行垃圾收集的方法。处理过程从块1700开始。例如,如上所述,该处理过程可以开始于一个根节点或者根指针。然后在块1702处获得由当前指针(例如,根指针)指向的对象。然后在块1704处确定获得的对象的类。例如,如图16所示,一个对象的头部可以指向该类。因此,通过跟随从该对象头部到相关类的指针可以确定该对象的类。接下来,在块1706处确定该类/对象是否具有任何(或者进一步)字段要被遍历。
如果该对象不具有任何或者更多的字段要遍历,则在块1708处复制该对象。否则,在块1710处确定在类字段次序信息中标识的下一个字段。例如,在该类的描述中,一般包含与那个类的字段相关联的一个偏移列表。可以从这个描述处获得用于下一个标识字段的偏移以便定位获得的对象的字段。
接下来在块1712处确定该对象的标识字段是否指向一个第二对象。如果是这样的话,在块1714处获得第二对象(例如,通过一个递归过程)。如果该对象的标识字段不指向一个第二对象,则在块1706处、为与那个对象相关联的任何进一步字段继续该处理过程。当该处理过程被递归执行时,在块1708处将最终复制在被遍历的数据结构中的每一个对象。
本发明可以用来在存储器中存储对象以最大化那些具有彼此非常接近访问的字段的对象将也被紧密接近地存储的可能性。图18是框图说明了本发明的使用,以实现在存储器中对象的一个最佳布局。如同所示,一个主存储器1802在一数据块1804内存储对象。例如,每个数据块都可以是32个字节。通过本发明的使用,第一对象1806、A,和第二对象1808、B,可以存储在主存储器1802内的单个数据块1804内。当一个CPU1808复制这个数据块1804到一个高速缓存1810中时,对象1806和1808然后可以保存在同一条高速缓存线1812中(或者在一组高速缓存线中)。因此,通过本发明的使用,通过当从主存储器1802中检索单个数据块时,允许具有彼此非常接近访问的字段的对象被同时存储在一个高速缓存内,可以实现这些对象的高效率访问。
而不是收集每个对象的位置信息,本发明收集每个类的位置信息而且因此在对象类型和字段之间进行区分。换句话说,它利用了一个给定类的实例很可能具有类似的加载相关性的观察结果。依据一个实施例,这通过路径简档和一种用于在复制收集期间动态改变一个给定类的字段被访问的次序的机制来完成。
本发明可以在任何适当的计算机系统上实现。图19说明了一个适于实现本发明的典型、通用计算机系统。该计算机系统可以使用任何适当的形式。例如,该计算机系统可以与一个数字电视接收器或者机顶盒集成。
计算机系统1930或者,更具体地说CPU1932,可以被布置以支持一个虚拟机,如将由那些在该领域的技术人员所理解的那样。计算机系统1902包含任意数量的处理器1904(同时被称为中央处理单元,或者CPU),其可以与存储设备相连,该存储设备包含主存储设备1906(一般一个只读存储器,或者ROM)和主存储设备1908(一般一个随机存取存储器,或者RAM)。如在该技术领域众所周知的那样,ROM起一个单向传送数据和指令到CPU1904的作用,而RAM一般被用来以一种双向方式传送数据和指令。主存储设备1906、1908都可以包含任何适当的计算机可读介质。CPU1904通常可以包含任意数量的处理器。
一般是一个大容量存储器设备的一个辅助存储介质1910,也可以双向连接到CPU1904并且提供附加的数据存储容量。大容量存储设备1910是一种可以用来存储包含计算机代码、数据、等等程序的计算机可读介质。一般地,该大容量存储设备1910是一个诸如一个硬盘、通常比主存储设备1906、1908要慢的存储介质。
CPU1904同时可以与一个或多个输入/输出设备1912相连,这些输入/输出设备1912可以包含,但不局限于,诸如视频监视器、跟踪球、鼠标、键盘、麦克风、触敏显示器、转换器读卡器、磁或者纸带读取器、图形输入卡、唱针、语音或者笔迹识别器的设备,或者其它众所周知的输入设备,诸如当然是其它的计算机。最后,CPU1904可选地可以使用如同在1914处通常所示的一个网络连接,连接到一个计算机或者电信网络,例如,一个国际互连网络或者一个内部网络。利用这样一个网络连接,可以考虑到:在执行上述方法步骤的过程中CPU1904可以从网络中接收信息,或者可以输出信息到该网络。这样的信息,其通常被表示为使用CPU1904执行的一个指令序列,可以例如以包含在一个载波中的计算机数据信号形式从该网络中接收以及输出到该网络。
虽然在这里显示并且描述了这个发明的说明性实施例和应用,但是有可能仍然是在本发明的概念、范围、和精神之内有许多的变化和修改,而且这些变化对于那些在细读了这个应用之后的本领域普通技术人员来说是清晰的。例如,本发明被描述为在一个数字电视接收器的环境内实现。然而,本发明可以用于其它环境。此外,虽然本发明被描述为在一个Java平台上实现,它也可以在各种平台上实现。此外,上述处理过程块仅仅是说明性的。因此,本发明的实现可以使用替换的处理过程块以及替换的数据结构执行。因此,给出的实施例将被认为是说明性的而不是限制性的,而且发明不被限制在这里给出的细节中,但是可以在附加权利要求的范围和等效内进行修改。
Claims (30)
1.一种创建一个用于在存储器中重新排列多个对象的机制的方法,该方法包含:
在一个计算机应用程序执行期间,确定在存储器中、由与该多个对象相关联的一个或多个字段引用的数据彼此之间相对的访问频率;以及
产生一种用于根据确定的、由与多个对象相关联的一个或多个字段引用的数据彼此之间相对在存储器中的访问频率,在存储器中重新排列多个对象的机制。
2.如权利要求1所述的方法,其特征在于:产生一种包含产生垃圾收集代码的机制,用于在垃圾收集期间重新排列多个对象。
3.一种创建这样一种机制的方法,该机制用于在垃圾收集期间修改对象的字段被访问的次序,该对象与一个或多个类相关联,该方法包含:
为该一个或多个类中的一个的所有实例获得字段引用信息,该字段引用信息指示该一个或多个类中的一个的字段引用彼此之间相对的频率和接近性;以及
从相关的字段引用信息中为该一个或多个类中的一个确定一个类字段次序,该类字段次序标识在垃圾收集期间该相关类的字段要被遍历的一个次序。
4.如权利要求3所述的方法,进一步包含:
将类字段次序与该一个或多个类中的一个相关联。
5.如权利要求3所述的方法,进一步包含:
为一个或多个类中的每一个重复获取和确定步骤。
6.一种创建这样一种机制的方法,该机制用于在存储器中重新排列多个对象,该多个对象与一个或多个类相关联,该方法包含:
相对于由与该一个或多个类中的选定一个相关联的剩余字段引用的数据,确定由与该一个或多个类中的选定一个相关联的字段引用的数据在存储器中的访问次数;
从相关的访问次数中确定与该一个或多个类中的选定一个相关联的一个类字段次序,该类字段次序标识在垃圾收集期间该一个或多个类中的选定一个的字段要被遍历的一个次序;以及
为该一个或多个类中的每一个重复确定和确定步骤。
7.如权利要求6所述的方法,进一步包含:
根据相关的类字段次序排序与每一个类相关联的字段。
8.如权利要求6所述的方法,其特征在于:访问次数指示由该字段引用的数据在存储器中的访问频率和接近性。
9.如在权利要求6所述的方法,其特征在于:访问次数指定所选类的每一个字段在该所选类内的另一个字段之后立即被引用的次数。
10.如在权利要求6所述的方法,其特征在于:访问次数指定所选类的每一个字段紧挨着该所选类内的另一个字段之前被引用的次数。
11.如权利要求6所述的方法,其特征在于:访问次数指定所选类的每一个字段在该所选类内的另一个字段之后被引用的次数。
12.如权利要求6所述的方法,其特征在于:访问次数指定所选类的每一个字段在该所选类内的另一个字段之前被引用的次数。
13.如权利要求6所述的方法,其特征在于:确定与所选类相关联的字段在存储器中的访问次数包含:
相对于所选类的每一个其他字段之一,计算该所选类的一个字段被引用的次数,以便为这个字段产生一个或多个计数;
为与该所选类相关联的每一个字段重复该计算步骤;以及
从与每个字段相关联的一个或多个计数中产生该类字段次序。
14.如权利要求6所述的方法,进一步包含:
在一个计算机应用程序执行期间,产生与该一个或多个类相关联的字段在存储器中的一个访问记录。
15.如权利要求14所述的方法,其特征在于:在执行计算机应用程序期间产生与一个或多个类相关联的字段在存储器中的一个访问记录包含在存储器中产生访问的一个记录。
16.如权利要求14所述的方法,其特征在于:产生与一个或多个类相关联的字段在存储器中的一个访问记录包含执行路径简档。
17.如权利要求14所述的方法,进一步包含:
在计算机应用程序中插入计算机代码,允许计算指示在执行计算机应用程序期间、每一个路径被使用的一个总次数的计数;
相对于在同一个类内的其它字段,为每一个所述路径确定每一个字段的引用次数;
使用插入的计算机代码来计算在执行计算机应用程序期间每一个所述路径被使用的计数;以及
组合确定的、相对于在同一个类内的其它字段用于每一个所述路径的每一个字段引用次数,和在执行计算机应用程序期间使用的每一个所述路径的计算的计数,来确定用于该相关类的类字段次序。
18.如权利要求6所述的方法,进一步包含:
根据与一个或多个类相关联的类字段次序,在存储器中重新排列多个对象。
19.如权利要求18所述的方法,其特征在于:在一个垃圾收集处理过程期间执行重新排列。
20.如权利要求19所述的方法,其特征在于:该垃圾收集处理过程是一个复制垃圾收集处理过程。
21.如权利要求6所述的方法,进一步包含:
产生垃圾收集代码,该代码依据相关类的类字段次序遍历在存储器中的对象字段。
22.如权利要求21中叙述的方法,其特征在于:该产生的垃圾收集代码确定一个对象的类并且根据该对象的类的类字段次序在复制收集期间访问该对象的字段。
23.一种在一组保存在存储器中的对象上执行垃圾收集的方法,包含:
标识在存储器中的对象组中的一个;
确定该对象的类;
确定与该对象的类相关联的一个类字段次序,该类字段次序标识在垃圾收集期间该对象的类的字段将被遍历的一个次序;以及
根据与该对象的类相关联的类字段次序,在垃圾收集期间访问该对象的字段。
24.如权利要求23所述的方法,进一步包含:
复制链接到访问的字段的对象。
25.如权利要求24所述的方法,其特征在于:复制对象包含复制每一个由该访问的字段直接或者间接指向的对象。
26.一种用于创建这样一种机制的计算机可读介质,该机制用于在存储器中重新排列多个对象,该多个对象与一个或多个类相关联,该计算机可读介质包含:
用于相对于与该一个或多个类选定的一个相关联的剩余字段,确定与该一个或多个类选定的一个相关联的字段在存储器中的访问频率的计算机指令;
用于从该字段在储存器中的相关访问频率中确定与该一个或多个类中的选定一个相关联的一个类字段次序的计算机指令,该类字段次序标识在垃圾收集期间该一个或多个类中的选定一个的字段要被遍历的一个次序;以及
用于为该一个或多个类中的每一个重复确定和确定步骤的计算机指令。
27.如权利要求26所述的计算机可读介质,进一步包含:
用于产生垃圾收集代码的计算机指令,该代码依据相关类的类字段次序遍历在存储器中的对象字段。
28.一种用于创建这样一种机制的系统,该机制用于在存储器中重新排列多个对象,该多个对象与一个或多个类相关联,该计算机可读介质包含:
一个处理器;以及
一个存储器,其中存储有:
用于相对于与该一个或多个类选定的一个相关联的剩余字段,确定与该一个或多个类选定的一个相关联的字段在存储器中的访问频率的计算机指令;
用于从该字段在储存器中的相关访问频率中确定与该一个或多个类中的选定一个相关联的一个类字段次序的计算机指令,该类字段次序标识在垃圾收集期间该一个或多个类中的选定一个的字段要被遍历的一个次序;以及
用于为该一个或多个类中的每一个重复确定和确定步骤的计算机指令。
29.如在权利要求28中所述的系统,其特征在于 该存储器进一步包含:
用于产生垃圾收集代码的计算机指令,该代码依据相关类的类字段次序遍历在存储器中的对象字段。
30.如在权利要求28中所述的系统,其特征在于:该系统在一个Java平台上实现。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17474400P | 2000-01-05 | 2000-01-05 | |
US60/174,744 | 2000-01-05 | ||
US09/618,981 | 2000-07-19 | ||
US09/618,981 US6594678B1 (en) | 2000-01-05 | 2000-07-19 | Methods and apparatus for improving locality of reference through memory management |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1411576A true CN1411576A (zh) | 2003-04-16 |
CN1214325C CN1214325C (zh) | 2005-08-10 |
Family
ID=26870506
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB018060749A Expired - Fee Related CN1214325C (zh) | 2000-01-05 | 2001-01-02 | 用于通过存储器管理提高引用局部性的方法和装置 |
Country Status (8)
Country | Link |
---|---|
US (1) | US6594678B1 (zh) |
EP (1) | EP1244969A2 (zh) |
JP (1) | JP4812997B2 (zh) |
KR (1) | KR20020067595A (zh) |
CN (1) | CN1214325C (zh) |
AU (1) | AU2754001A (zh) |
CA (1) | CA2396768A1 (zh) |
WO (1) | WO2001050270A2 (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6862729B1 (en) * | 2000-04-04 | 2005-03-01 | Microsoft Corporation | Profile-driven data layout optimization |
US6879991B2 (en) * | 2000-12-11 | 2005-04-12 | International Business Machines Corporation | Synchronous collection of cyclic garbage in reference counting systems |
US7062756B2 (en) * | 2001-11-30 | 2006-06-13 | Sun Microsystems, Inc. | Dynamic object usage pattern learning and efficient caching |
US7398531B2 (en) * | 2002-05-07 | 2008-07-08 | Oracle International Corporation | Providing common memory management code to objects that are instances of different classes |
US7310799B2 (en) * | 2002-12-31 | 2007-12-18 | International Business Machines Corporation | Reducing load instructions via global data reordering |
US7020746B2 (en) * | 2003-01-28 | 2006-03-28 | Microsoft Corporation | Method and system for an atomically updated, central cache memory |
GB2399897B (en) * | 2003-03-26 | 2006-02-01 | Advanced Risc Mach Ltd | Memory recycling in computer systems |
US7424498B1 (en) | 2003-06-30 | 2008-09-09 | Data Domain, Inc. | Probabilistic summary data structure based encoding for garbage collection |
US7451168B1 (en) * | 2003-06-30 | 2008-11-11 | Data Domain, Inc. | Incremental garbage collection of data in a secondary storage |
US7263532B2 (en) * | 2003-09-23 | 2007-08-28 | Microsoft Corporation | Region-based memory management for object-oriented programs |
US9092558B2 (en) * | 2004-04-05 | 2015-07-28 | International Business Machines Corporation | Grouping frequently referenced data items to co-locate for cache utilization |
US7769974B2 (en) * | 2004-09-10 | 2010-08-03 | Microsoft Corporation | Increasing data locality of recently accessed resources |
JP4719859B2 (ja) * | 2004-09-14 | 2011-07-06 | 国立大学法人京都大学 | データ処理方法、データ処理装置及びコンピュータプログラム |
US20070162508A1 (en) * | 2004-11-08 | 2007-07-12 | Mazzagatti Jane C | Updating information in an interlocking trees datastore |
CN100367241C (zh) * | 2005-03-05 | 2008-02-06 | 腾讯科技(深圳)有限公司 | 一种数据存储的方法、系统及设备 |
GB0608406D0 (en) * | 2006-04-28 | 2006-06-07 | Ibm | Creating references in a scoped memory system |
US8171054B1 (en) | 2007-12-21 | 2012-05-01 | Emc Corporation | Optimized fetching for customization object attributes |
US8171006B1 (en) | 2007-12-21 | 2012-05-01 | Emc Corporation | Retrieval of searchable and non-searchable attributes |
US8255426B1 (en) | 2007-12-21 | 2012-08-28 | Emc Corporation | Efficient storage of non-searchable attributes |
US8150887B1 (en) | 2007-12-21 | 2012-04-03 | Emc Corporation | Identifiers for non-searchable attributes |
US8452755B1 (en) | 2009-05-12 | 2013-05-28 | Microstrategy Incorporated | Database query analysis technology |
US8577902B1 (en) * | 2009-05-12 | 2013-11-05 | Microstrategy Incorporated | Data organization and indexing related technology |
US8479055B2 (en) | 2010-05-16 | 2013-07-02 | International Business Machines Corporation | Detecting and optimizing false sharing |
US9052824B2 (en) * | 2012-01-26 | 2015-06-09 | Upthere, Inc. | Content addressable stores based on sibling groups |
US9697102B2 (en) * | 2012-11-21 | 2017-07-04 | Sap Se | Compare concurrent threads executions |
US9430153B2 (en) | 2014-10-22 | 2016-08-30 | International Business Machines Corporation | Garbage collection and other management of memory heaps |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6209066B1 (en) * | 1998-06-30 | 2001-03-27 | Sun Microsystems, Inc. | Method and apparatus for memory allocation in a multi-threaded virtual machine |
US6330556B1 (en) * | 1999-03-15 | 2001-12-11 | Trishul M. Chilimbi | Data structure partitioning to optimize cache utilization |
US6321240B1 (en) * | 1999-03-15 | 2001-11-20 | Trishul M. Chilimbi | Data structure partitioning with garbage collection to optimize cache utilization |
US6480862B1 (en) * | 1999-04-23 | 2002-11-12 | International Business Machines Corporation | Relation-based ordering of objects in an object heap |
-
2000
- 2000-07-19 US US09/618,981 patent/US6594678B1/en not_active Expired - Lifetime
-
2001
- 2001-01-02 CA CA002396768A patent/CA2396768A1/en not_active Abandoned
- 2001-01-02 WO PCT/US2001/000055 patent/WO2001050270A2/en active Application Filing
- 2001-01-02 AU AU27540/01A patent/AU2754001A/en not_active Abandoned
- 2001-01-02 KR KR1020027008667A patent/KR20020067595A/ko not_active Application Discontinuation
- 2001-01-02 CN CNB018060749A patent/CN1214325C/zh not_active Expired - Fee Related
- 2001-01-02 EP EP01901661A patent/EP1244969A2/en not_active Withdrawn
- 2001-01-02 JP JP2001550562A patent/JP4812997B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP1244969A2 (en) | 2002-10-02 |
JP2003519834A (ja) | 2003-06-24 |
WO2001050270A3 (en) | 2002-03-07 |
JP4812997B2 (ja) | 2011-11-09 |
AU2754001A (en) | 2001-07-16 |
CN1214325C (zh) | 2005-08-10 |
US6594678B1 (en) | 2003-07-15 |
CA2396768A1 (en) | 2001-07-12 |
WO2001050270A2 (en) | 2001-07-12 |
KR20020067595A (ko) | 2002-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1214325C (zh) | 用于通过存储器管理提高引用局部性的方法和装置 | |
CN100343821C (zh) | 用于计算机存储器的世代动态管理的方法和装置 | |
CN1304941C (zh) | 用于自主硬件辅助的线程栈跟踪的装置与方法 | |
US7853930B2 (en) | Annotating graphs to allow quick loading and analysis of very large graphs | |
CN101727355B (zh) | 用于内存访问事件的处理方法和系统 | |
CN1153142C (zh) | 通过事务对多个文件实现原子更新的事务文件系统 | |
US7266548B2 (en) | Automated taxonomy generation | |
Crauser et al. | A theoretical and experimental study on the construction of suffix arrays in external memory | |
Stojanovic et al. | OntoManager–a system for the usage-based ontology management | |
KR20010025112A (ko) | 메모리 재사용 방법 | |
JP2002519750A (ja) | ガ−べジコレクタ用の記憶済みデータオブジェクトのマーク付け方法 | |
US6912553B1 (en) | Virtual machine memory management | |
US20090327373A1 (en) | Method for performing memory leak analysis inside a virtual machine | |
CN1786947A (zh) | 基于网页页面布局提取网页核心内容的系统、方法和程序 | |
CN107180053A (zh) | 一种数据仓库优化方法和装置 | |
CN106339496A (zh) | 用于对照片进行清理的方法和装置 | |
CN113821480B (zh) | 链接mix文件筛选方法、装置、网盘及存储介质 | |
Arge et al. | Cache-oblivious data structures | |
KR100722709B1 (ko) | 메모리 회수 방법 및 장치 | |
US8176286B2 (en) | Memory recycling in computer systems | |
JP2002519768A (ja) | インクリメンタルガーベジコレクタでの後始末 | |
CN112363986B (zh) | 一种针对文件缓存的时间优化方法 | |
Chiang | Experiments on the practical I/O efficiency of geometric algorithms: Distribution sweep versus plane sweep | |
US7650350B1 (en) | Method and apparatus for concurrently processing remembered sets in a space-incremental garbage collector | |
CN1838090A (zh) | 改善最近被访问资源的数据局部性 |
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 | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |