CN1205549C - 用于多-线程虚拟机的存储器分配的方法和装置 - Google Patents
用于多-线程虚拟机的存储器分配的方法和装置 Download PDFInfo
- Publication number
- CN1205549C CN1205549C CNB991116534A CN99111653A CN1205549C CN 1205549 C CN1205549 C CN 1205549C CN B991116534 A CNB991116534 A CN B991116534A CN 99111653 A CN99111653 A CN 99111653A CN 1205549 C CN1205549 C CN 1205549C
- Authority
- CN
- China
- Prior art keywords
- thread
- piece
- assigned
- distribution
- shared
- 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 - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
-
- 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
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- 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
-
- 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
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
- G06F9/4856—Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
- G06F9/4862—Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration the task being a mobile agent, i.e. specifically designed to migrate
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Image Input (AREA)
Abstract
公开一种在多线程计算机系统高效分配共享存储器的方法和装置。根据本发明的一个实施例,一种计算机实现的分配由多线程计算机系统的多线程共享的存储器的方法包括将共享存储器划分为多个块,并将多个线程至少分组为第一组和第二组。将一个选择块分配给试图在选择块分配一个对象的一个选择的线程。将一个选择块分配给一个选择的线程基本上部分根据所选择的线程是第一组还是第二组的一部分。在一个实施例,将多个线程分组为第一组和第二组包括识别一个特定线程并确定该特定线程是否为一个快分配线程。在这样的实施例,当特定线程为一个快分配线程时,将其分组到第一组。
Description
本发明一般涉及计算机系统的存储器分配。本发明具体涉及多-线程、基于对象的计算机系统中的高效、低开销的存储器分配。
随着计算机技术中虚拟机使用的增加,提高虚拟机的整体效率变得愈为重要。一般限定与包括一个虚拟机的计算机系统有关的存储器的数量。因此,通常必须保存并重新使用存储器。很多计算机编程语言使软件开发者能够在计算机系统内动态分配存储器,而其他的编程语言则要求对以前分配的存储器进行明确的手工释放,这种释放复杂并易于出错。需要明确的手工存储器管理的语言包括C和C++编程语言。其它的编程语言利用自动存储-回收以回收存储器,从回收系统分配存储器的计算机程序不在需要必须保证正确分配存储器。这种自动存储-回收系统不需要来自在前正使用存储器的计算机程序的明确指令或调用就能够回收该存储器。
在面向对象或基于对象的系统,典型的存储器分配单元通常被称为一个对象或一个存储器对象,如本领域的技术人员所熟知的。一般将使用的对象称为“有用”对象,而对于计算机程序的正确执行不再必要的对象一般称为“无用”对象。回收无用对象的行为通常被称为无用对象收集,而常常将自动存储-回收系统称为无用对象收集器。以诸如JavaTM编程语言(由Sun Microsystem,Inc.开发)和Smalltalk编程语言之类语言编写的计算机程序使用无用对象收集自动进行存储器管理。
使用压缩的无用对象收集器一般允许相对较快地分配对象。即,使用压缩的无用对象收集器的一个优点是快速对象分配。可以将对象分配在连续的存储区,例如,分配区,以便可以通过将分配指针增加要求的存储量来执行对象的分配。当已到达分配区的结尾时,可以执行无用对象收集。
一种无用对象收集的方法是世代无用对象收集方法。世代无用对象收集方法是这样一种方法,即,根据从创建对象的时间开始测量的对象的使用寿命分开对象。将“较年轻的”对象认为是比“较年老的”对象更可能成为无用对象。因此,可以使用世代无用对象收集来提高存储器回收的整体效率。
在使用世代无用单元收集的系统中,指定专用的存储器区用于新对象的分配。由于在该存储器区内分配新对象,所以通常将这样的存储器区认为是一个“苗圃(nursery)”。如本领域的技术人员所公知的,常常将该存储器区称为“Eden”。
图1a是一个单线程(single thread)和专用于该单线程的存储器分配区的示意图。这样的存储器分配区适用于在使用世代无用单元收集的单线程系统内实现。如图所示,通过分配指针104索引将其称为“Eden”的存储器分配区102。通常,Eden102是一个其中可以创建新对象的存储器块。当与Eden102有关的线程106试图分配一个新对象时,一般将分配指针104增量该新对象的尺寸,并检查确定分配指针104是否已到达Eden102的结尾。当确定已到达Eden102的结尾时,可以执行世代无用单元收集来高效清空Eden102,由此允许通过线程106在Eden102内创建新对象。
尽管参照图1a所述的存储器,以及新对象的分配在单线程系统内极为有效,但是这种存储器和对象的分配通常不用于具有多中央处理单元(CPU)的多线程系统。例如,当两个线程试图同时请求一个单独的Eden内的空间时,可能会出现并发问题。因此,在多线程系统,当Eden为共享资源时,为防止在任何给定时间多于一个的线程在Eden内进行分配一般必须同步对Eden的访问。同步对Eden的访问包括将分配锁与一个Eden结合在一起,其中当一个线程希望创建新对象时由该线程得到该Eden,并且当已创建新对象后由该线程释放该Eden。
图1b是在一个整体多线程系统中的两个线程和由这两个线程共享的存储器分配区的示意图。Eden112具有一个用于指示Eden112的未使用部分115的开始的相关分配指针114。当共享Eden112的线程116和118希望在Eden112分配一个新对象时,线程116和118一般必须得到与Eden112有关的分配锁(未示出)。具体地说,如果线程116希望访问未使用部分115,线程116必须得到Eden112的分配锁。一旦线程116得到该分配锁,并确定还未到达Eden112的结尾,就可以增加分配指针114,并由线程116分配一个新对象。如果已到达Eden112的结尾,即,当未使用部分115为空时,可以执行无用单元收集以高效清空Eden112,由此允许线程116和118创建新对象。
当对Eden的访问被同步时,由于与关于Eden的分配锁的得到和释放有关的系统开销,Eden内的新对象的分配一般相当慢。每次一个线程希望在Eden内创建新对象时,该线程必须得到对Eden的独占权,例如必须得到分配锁。一般地,当与分配有关的开销相比,由硬件、例如比较和交换基元直接实现的所谓的“快”锁定基元仍然相对较慢。例如,在一个多处理器系统,如本领域技术人员所公知的,锁定基元可能导致远程的高速缓存故障。在这样的系统,加入同步特征常常显著地加大了分配的开销,例如,增加二或三倍。因此,在分配期间增加同步大大影响整个系统的性能。
为了通过避免同步来提高与访问多线程系统中的Eden有关的性能,多线程系统中的每个线程可以指定其本身的Eden。即,当每个线程具有其本身的Eden时,可以避免当多于一个的线程试图访问一个共享的Eden时可能会出现的并发问题。图2a是两个线程与其本身相关的Eden,或存储器区分配区的示意图。在多线程系统200内,由分配指针204引用的第一Eden202与第一线程206有关。多线程系统200也包括由分配指针204引用的,并与第二线程216有关的第二Eden212。
当第一线程206希望分配一个新对象时,第一线程206访问第一Eden202。类似地,当第二线程216希望分配一个新对象时,第二线程216访问第二Eden212。因为每个线程206、216分别具有其专用的Eden,即Eden202和211,不需要分配锁定来防止在任何给定时间两个线程为创建新对象而试图访问同一个单独的Eden。
尽管在多线程系统中将分开的Eden分配给每个线程可以消除对分配锁的需要,但是分配分开的Eden常常需要相当大的存储器量。例如,某些应用可能包含数百甚至数千个线程。另外,某些线程可能以比其他线程快的速度分配对象,因此,这些线程一般将需要更多的存储器。需要较多的存储器将导致在全部存储器执行的快速无用单元收集,例如,对全部Eden执行的可能需要某种形式的同步的全部无用单元收集。因此,由于某些Eden可能仍然相对较空而其他Eden容量为满,所以与执行多个Eden的无用单元收集有关的全部开销增加并且对整个系统的性能具有不利影响。
与将一个分开的Eden分配给多线程系统中的每个线程有关的相当大的存储器使用量,以及关于无用单元收集的整个开销可能是无效和昂贵的。减少存储器使用量,以及无用单元收集的频率可以提高效率并一般降低与多线程系统有关的费用。将一个Eden分为组块、或块一般可允许一个Eden被共享而不需要分配锁。图2b是两个线程和由这两个线程共享的存储器分配区的示意图,其中该存储器区被分为组块。多线程系统230包括被分为具有恒定尺寸的组块233的Eden232。换言之,全部组块233具有大约相同的尺寸。共享Eden232的每个线程236、238被分配初始组块。例如,线程236最初被分配组块233a,而线程238最初分配组块233b。
当一个线程,例如,线程236填充其组块233a时,线程236被分配另一个组块233c。线程继续被分配组块233直到没有组块233可用为止,此时可以执行无用单元收集。应该明白尽管同步对组块233的请求,但该同步一般不会象前面所描述的分配同步那样频繁地发生。
将组块233分配到线程236、238常常导致大量的碎片,这是因为一般必须规定每个组块233的尺寸以便能够保存一个较大的对象。因此,当一个组块被部分占满时,由一个线程创建的较大对象不适合该部分占满的组块,一个新组块将分配给该线程以便容纳该较大对象。部分占满的组块的剩余空间被完全浪费。另外,当为慢分配的线程实际占有空组块时组块的空间分配效率较低,由此保留了从来不会被使用的存储器空间。
因此,需要一种高效分配诸如多线程虚拟机之类的多线程系统中的存储器的方法和装置。具体地说,需要一种允许线程在存储器分配区,例如,Eden创建新对象,同时最小化存储器空间,最小化分配开销,并提高无用单元收集效率的方法和装置。
本发明涉及多线程计算机系统中的共享存储器的高效分配。根据本发明的一个实施例,一种计算机实现的用于在多线程计算机系统分配由多线程共享的存储器的方法包括将共享存储器划分为多个块,并将多线程至少分组为第一组和第二组。将一个选择的块分配给所选择的试图在该选择的块创建对象的线程。至少部分根据所选择的线程是否是第一组或第二组的一部分来将选择的块分配给选择的线程。在一个实施例中,将多线程分组为第一组和第二组包括识别一个特定的线程并确定该特定的线程为一个快分配线程。
根据本发明的另一个方面,一种计算机实现的用于分配至少包括第一线程和第二线程的多线程计算机系统中的共享存储器的方法包括将共享存储器划分为多个块,并指定第一块,第一块不但由第一线程访问而且由第二线程访问以便创建新对象。在系统允许运行之后,快速确定第一块是否已溢出。如果确定第一块已溢出,该方法包括确定是否是由第一线程试图在第一块分配第一对象引起第一块溢出。如果是这种情况,将第二块指定给第一线程。将第二块指定给第一线程用于使第一线程快速放弃在第一块分配对象的能力。
根据本发明的再一个方面,一种计算机实现的用于分配多线程计算机系统中的存储器的方法包括将存储器划分为包括第一块和远大于第一块的第二块的多个块。指定第一块由设计为试图在第一块分配第一对象的第一线程访问,而且指定第二块由试图在第一块分配第二对象的第二线程访问。
通过阅读下面的详细描述并研究附图的各种特征将更好地理解本发明。
参照下面结合附图所作的描述可以进一步理解本发明,其中:
图1a是一个线程和一个存储器分配区的示意图。
图1b是两个线程和由两个线程共享的存储器分配区的示意图。
图2a是两个线程及其相关存储器分配区的示意图。
图2b是两个线程和由两个线程共享的存储器分配区的示意图,其中该存储器分配区被分为组块。
图3是根据本发明第一实施例的多线程和由该多线程共享的存储器分配区的示意图。
图4是描述与根据本发明第一实施例的第一分配存储器过程有关的步骤的过程流程图。
图5a是描述与根据本发明第一实施例的第二分配存储器过程有关的步骤的过程流程图。
图5b是描述与根据本发明第一实施例,确定认为是快分配线程的线程的步骤,即,图5a的步骤458有关的步骤的过程流程图。
图6是描述与根据本发明第一实施例的第三分配存储器过程有关的步骤的过程流程图。
图7是描述与根据本发明第一实施例的第四分配存储器过程有关的步骤的过程流程图。
图8是根据本发明第二实施例的多线程和由该多线程共享的存储器分配区的示意图。
图9是描述与根据本发明第二实施例的第一分配存储器过程有关的步骤的过程流程图。
图10a是描述与根据本发明第二实施例的第二分配存储器过程有关的步骤的过程流程图。
图10b是描述与根据本发明第二实施例,确定认为是快分配线程的线程的步骤,即,图10a的步骤918有关的步骤的过程流程图。
图11是描述与根据本发明第二实施例的第三分配存储器过程有关的步骤的过程流程图。
图12示出一个适于实现本发明的典型的通用计算机系统。
图13是由图12的计算机系统1030支持的,并适用于实现本发明的虚拟机的示意图。
在多线程系统中与分配共享存储器、例如“Eden”有关的开销常常很大。在多线程系统将分开的Eden分配给每个线程用于消除对于与同步有关的分配锁的需求。然而,分配分开的Edens常常需要充分的存储器量,并可能导致更频繁的无用单元收集,由此对整个系统的性能具有潜在的不利影响。
由多线程共享的Eden可以分为相等的组块、或块,以便每个线程具有其本身的块。通过允许每个线程具有其本身的块,不需要分配锁定就可以共享一个Eden。然而,将Eden分为相等的组块并允许每个线程具有其本身的块常常导致大量的存储碎片。例如,当一个组块部分占满并且由一个线程创建的一个较大对象不适合该部分占满的组块时,将一个新的组块分配给该线程以容纳该较大对象。那么该部分占满的组块剩余的空间就被完全浪费了。另外,当很少分配对象的线程拥有事实上为空组块时则该组块的空间分配效率较低,这样可能保留一些从来不用的存储器空间。当线程保留一些从来不用的存储器空间时,就从可能需要这些存储器空间的线程完全取走了该空间。此外,为节省存储器用于需要附加存储器空间的线程有可能进行包括大量开销的更频繁的无用单元收集。
通过允许很少分配对象的多线程共享一个共享存储器分配区的组块或块,同时向频繁分配对象的线程提供“专用的”、或未共享的块,实际上仅向需要更多存储器的线程高效提供更多的存储器空间。因此,在执行无用单元收集之前可能填满了较多的存储器空间。另外,也可以降低无用单元收集的频率。尽管当慢分配线程,例如,很少分配对象的线程访问共享块时使用同步,同步花费可能相对较低,因为慢分配线程一般不经常需要在共享块内访问和分配,因此,可以认为与同步有关的开销相对较小。
为消除共享存储器区内的新对象分配中的同步,在共享存储器区可以创建不同尺寸的块以便全部的线程被指定专用块。具体地说,潜在地慢分配线程可以被指定较小的专用块,同时将较大的未共享块指定给潜在地快分配线程。通过将较小的块指定给慢分配线程以及将较大的块指定给快分配线程,在不存在与共享存储器中的新对象的分配有关的同步开销的情况下,与提供给可能需要很少存储器的线程的存储器空间相比,可以向可能需要较多存储器的线程提供增加的存储器空间。
下面参照图3-7将描述将共享存储器区分为所描述的大致相同尺寸的块,以及可用于分配相同尺寸块的方法。如上所述,在本发明的一个实施例中,多线程可以共享一个存储器块,同时其他线程可以被指定专用存储器块。图3是根据本发明的第一实施例的多线程和由多线程共享的存储器分配区的示意图。整个系统300包括共享存储器分配区302。在一个实施例,存储器分配区302可以是Eden。然而,应该明白,存储器分配区302通常是其中可以分配新对象的任何共享存储器区。
存储器分配区302被划分为块304,或组块,这些块或组块全部具有大约相同的尺寸。块304的尺寸根据系统300的要求可以有很大变化。举例来说,如果系统300具有一个相关的JavaTM虚拟机(由Sun Microsystems公司开发),块304的尺寸一般被定为使每个块304的尺寸在大约2千字节(kB)和大约32kB之间。在这样的系统,尽管应该明白,存储器分配区302的整体尺寸可以有很大变化,但存储器分配区302的尺寸处于大约128kB和大约512kB之间的范围。
在系统300内,所有可能潜在为快分配,或者是可能在存储器分配区302分配大量对象的线程306最终被指定它们的指定块304。在所述实施例,将线程306a、306d认为是快分配的可能的候选者,结果是,线程306a、306d每个都与专用块有关。正如下面参照图4,5a,6和7所描述的,认为可能是快分配的线程306是使共享存储器溢出,例如,用完存储器空间的线程306。通常,当线程306a、306d使它们的指定、例如专用块304溢出时,只要附加块304可用,线程306a、306d被指定附加块304。如图所示,线程306a已被指定块304b、304d、和304f,其中块304b、304d已满。线程306d已被指定块304e、304f,并且如图所示,块304e已满,而块304f部分满。由于线程306a具有其本身的专用块304b、304d、和304f,当线程306a试图在其本身的专用块中的一块分配一个新对象时,不需要同步。类似地,当线程306d试图在其本身的专用块中的一块分配一个新对象时,也不需要一个分配锁或类似设备。
认为不是快分配的线程306、例如线程306b和306c,被指定一个共享块,例如,块304c。线程306b和306c被指定一个共享块304c,以便线程306b和306c都可以在块304c内分配新对象。尽管一般使用同步以防止当线程306b和306c试图几乎同时访问块304c时出现的并发问题,由于线程306b和306c被认为是慢分配,与同步有关的开销一般不大。即,认为线程306b和306c很少试图在块304c内分配新对象。
尽管用于分配被分为可能被共享的块的共享存储器的方法会有所变化,下面参照图4,5a,5b,6,和7将描述几个适宜的方法。参照图4,根据本发明的第一实施例将描述与用于分配由多线程共享的存储器的第一方法有关的步骤。即,图4涉及一种在上面参照图3所述的共享存储器系统分配存储器的方法。在该方法,无论何时一个共享存储器块溢出,使该共享存储器块溢出的线程被分配其本身的存储器块,这是由于该线程一般统计地为一个快分配线程。
分配存储器的第一方法在步骤402开始,其中通过在共享存储器分配区内分配多个存储器块构成一个共享存储器分配区,例如,Eden。在所述实施例,被分配、划分、或相反被创建的多个存储器块具有完全相同的尺寸。尽管根据特定系统的要求该尺寸可以有很大变化,但该尺寸一般处于大约2kB到大约32kB的范围。
在分配分配区的存储器之后,在步骤404,指定分配区中的第一块为试图在分配区分配新对象的全部线程的共享块。通过指定全部线程的共享块,每次其中一个线程分配一个新对象时,就试图在共享块分配该新对象。应该明白,当线程共享一个块时,在对象分配期间常常将分配锁定,或类似设备用于同步目的。
一旦指定共享块,整个系统运行到步骤406。换言之,与这些线程有关的计算系统允许运行。通常允许整个系统运行直到其中一个线程发现分配区内的一个块,例如,共享块已溢出。因此,在步骤408就一块是否已溢出进行判定。
在步骤408判定诸如共享块之类的块已溢出之前,允许系统继续运行在步骤406。当确定一块已溢出时,处理流程进入步骤410,在这里试图从分配区得到下一个可用块。在步骤412,就一块是否可用进行判定。即,就在分配区是否存在可用的“空闲”存储器块进行判定。当一个新块可用时,在步骤414将该新块指定给在系统运行期间使块溢出的线程。应该明白,开始,即,在将一个专用块指定给一个线程之前,新块指定给使共享块溢出的线程。然而,一旦一个专用块已被指定给一个线程,新块可以指定给具有专用块的线程或共享一个块的线程,因为专用块或者共享块可能已溢出。
线程根据其是否具有一个专用或共享分配块,一般使用两种分配程序中的一种。具有专用块的线程可以使用无锁定、快分配程序以减少锁定开销,而具有共享块的线程一般使用如本领域的技术人员公知的锁定、慢分配程序。这样,当一个线程被指定一个专用块时,其分配程序一般设定为无锁定分配程序。反之,当一个线程被指定一个共享块时,其分配程序一般设定为锁定程序。
一般地,希望使共享块溢出的线程为具有频繁分配对象倾向的线程。因此,通过将专用块指定给这样的线程,很有可能减少与获得和释放共享块上的分配锁定有关的开销。因为经常分配新对象的线程一般被指定专用块,专用块不使用分配锁定,所以一般能够降低开销。由于保持共享一个共享块的线程常常是很少分配新对象的线程,所以与获得和释放与共享块有关的分配锁有关的开销一般相对较低。
在步骤414将一个新块指定给使一块溢出的线程之后,在步骤417就溢出块是否为共享块进行判定。通常,在线程拥有专用块之后,在步骤408判定为溢出的块或者为专用块或者为共享块。然而,在任何专用块指定之前,溢出的块为共享块。
当确定溢出的块不是共享块时,就指示溢出的块为专用块。如果溢出的块为专用块,处理流程从步骤417进入步骤406,在步骤406允许整个系统运行直到一个线程发现一块已溢出为止。作为一种替换,如果步骤417的判定为溢出的块为共享块,在步骤418就分配区内另一个新块是否可用进行判定。
如果步骤418的判定为分配区内另一个新块可用,在步骤420填满的共享块被该新块替换。一旦填满的共享块被替换,在步骤406允许整个系统运行。然而,如果判定为实际上分配区无可用块,处理流程进入步骤406,在这里允许系统运行。应该明白,具有一个填满或几乎填满的共享存储块的系统一般可以运行,直到一个块,例如,或者共享块或者专用块溢出为止。
回到步骤412,当确定新块不可用时,在步骤416执行无用单元收集。尽管实际上可以使用任何无用单元收集算法,在一个实施例,使用世代无用单元收集算法。世代无用单元收集算法,即,世代无用单元收集器一般用于复制存储在分配区的块内的有用对象,由此使至少某些块为空以用于新的分配。在在步骤416执行无用单元收集之后,处理流程回到步骤404,在这里将分配区内的第一块指定为全部线程的共享块。
图5a是表示根据本发明的第一实施例,与分配存储器的第二过程有关的步骤的过程流程图,该第二过程允许判定特定的线程是否为快分配线程。分配存储器的第二方法在步骤432开始,其中通过分配共享存储器分配区内的多个存储器块构成一个共享存储器分配区,例如,Eden。一旦分配区的存储器基本上被划分为块,在步骤434将分配区内的第一块指定为试图在分配区分配新对象的全部线程的共享块。通过指定全部线程的共享块,每次一个线程分配一个新对象,就试图在共享块内分配该新对象。
在指定共享块之后,整个系统运行在步骤436。一般允许整个系统运行直到一个线程发现分配区内的一块已溢出为止。实际上,这样的发现确定一块已溢出。这样,在步骤438,就一块是否溢出进行判定。
如果步聚438的判定为诸如共享块之类的一块还未溢出,允许系统继续运行在步骤436。作为一种替换,如果确定一块已溢出,处理流程就进入步骤440,在这里试图从分配区得到下一个可用块。一旦得到一个新的可用块,在步骤442,就一块是否可用进行判定。即,就分配区是否实际存在可用的未用存储器块进行判定。
当确定一个新块不可用时,在步骤456执行无用单元收集。在一个实施例,无用单元收集可以包含参照图4所述的世代无用单元收集算法,世代无用单元收集算法一般用于将存储在分配区的块内的有用对象复制到其他存储器区,由此使至少某些分配区的块为空以用于新的分配。
在步骤456执行无用单元收集之后,在步骤458确定哪些线程为快分配。确定哪些线程为快分配一般为确定哪些线程分配较多的新对象。下面参照图5b将描述一种确定哪些线程为快分配的方法。
一旦识别快分配线程,在步骤460将一个新块指定给认为是快分配的每个线程,即,每个快分配线程被指定一个专用块。通过仅向快分配线程指定新块,即,新的专用块,防止在前具有专用块但不再被认为是快分配线程的线程保留其很可能不使用的存储器空间。另外,快分配线程继续使用快速,不同步分配。
在步骤462,在新块指定到快分配线程之后,将共享块指定给全部其他线程,即,将共享块指定给全部认为不是快分配的线程。在认为不是快分配的线程,或,换言之,认为是慢分配的线程,被指定一个共享块之后,处理流程返回允许整个系统运行的步骤436。
回到步骤442,当一个新块可用时,在步骤444将该新块指定给在系统运行期间使块溢出的线程。应该明白,在专用块已被指定给一个线程之前,将新块指定给使共享块溢出的线程。如果已有线程被指定一个专用块,或者共享一个块的线程,则由于专用块或者共享块可能已溢出,新块一般被指定给具有专用块的线程。
一旦将新块指定给使块溢出的线程,在步骤447就溢出块是否为一个共享块进行判定。一般地,在至少一个线程拥有一个专用块之后,在步骤438确定为溢出的块可以为专用块或共享块。然而,在任何专用块分配之前,由于共享块仅是被指定给任何线程的唯一块,所以溢出的块为共享块。
当确定溢出的块不是共享块时,则溢出的块为专用块。如果溢出块为专用块,则处理流程从步骤447返回步骤436,在这里允许整个系统运行直到另一个块溢出为止。作为一种替换,如果步骤447确定溢出块为共享块,在步骤448就要共享的另一个新块在分配区是否可用进行判定。
如果步骤448的判定为分配区内另一个块可用,在步骤450填满的共享块被该新块替换。一旦填满的共享块被替换,在步骤436允许整个系统运行。然而,如果判定为实际上分配区无可用块,处理流程直接进入步骤436,在这里允许系统运行。应该明白,具有一个填满或几乎填满的共享存储器块的系统一般可以运行,直到一个线程试图创建一个新对象并发现由于试图创建一个新对象,一个相关块,例如,或者共享块或者专用块已溢出或将溢出为止。最终,在步骤442处理流程再次进行新块是否可用的判定。如果新块不可用,如前所述,一般执行无用单元收集。
参照图5b,根据本发明的第一实施例将讨论一种确定哪些线程认为是快分配线程的方法,即,图5a的步骤458。确定哪些线程为快分配线程的方法在步骤504开始,为识别一个线程是否为快分配线程,该方法实际上是判定是否存在一个“被测试”的线程。当不存在一个被测试的线程时,完成线程是快分配还是慢分配的判定处理。作为一种替换,当存在一个被测试的线程时,在步骤506,就该线程是否使用共享库,或共享块进行判定。换言之,在步骤506判定该线程是否正是与共享块相关的线程。
如果该判定为线程使用共享库,就指示该线程为慢分配线程。因此,处理流程从步骤506进入步骤512,在这里将线程的分配例行程序设定为锁定。即,设定线程的分配例行程序,以便当线程试图创建一个新对象时,该线程获得与共享块有关的锁定。如前所述,使用锁定可防止在一个线程正在一个共享块内分配时另一个线程在该共享块内分配。在步骤512将线程的分配例行程序设定为锁定之后,处理流程返回步骤504并就是否存在另一个要处理的线程进行判定。
作为一种替换,如果步骤506判定为线程不使用共享块,就指示该线程具有至少一个专用块,因而其为快分配线程。当该线程为快分配线程时,处理流程从步骤506进入步骤508,在这里就在最后无用单元收集间隔内由该线程分配的存储器是否超过阈值进行判定。换言之,确定自从最新的无用单元收集后由该线程分配的存储器量是否超过阈值量。通常,根据整个系统的要求,阈值量可以有很大变化。举例来说,阈值量可处于大约两存储器块到大约5存储器的范围。
如果步骤508确定在最后无用单元收集间隔内由线程分配的存储器量超过阈值,就将该线程认为是快分配线程。因此,在步骤510,将线程的分配例行程序设定为无锁定以指示在任何时间该线程实际上可以不需要锁定就在其相关块,即,其专用块内分配,这是由于其他的线程不可以访问该块。一旦该线程的分配例行程序设定为无锁定,处理流程就返回步骤504并就是否处理任何其他线程进行判定。
如果步骤508的判定为在最后无用单元收集间隔内由线程分配的存储器量未超过阈值,就指示该线程不是快分配线程。因此,该线程不必保留专用块,在步骤512,将该线程的分配例行程序设定为锁定。在该线程的分配例行程序设定为锁定之后,处理流程返回步骤504,在这里判定是否存在要处理的另一个块。
在允许快分配线程具有专用块同时保留用于慢分配线程的共享块的情况下,尽管将专用块指定给使共享块溢出的线程一般为有效,但仍存在慢分配线程被分配一个专用块的可能性。举例来说,如果一个很少分配对象的线程正好分配一个使共享块溢出的对象,则该线程被分配一个专用块,该专用块可能从来不会被填满。因此,某些分配存储器块的方法可以包含线程是快分配还是慢分配的“明确”判定。
在某些实施例,从分配区向溢出共享块的线程分配专用块不是自动发生的。举例来说,可以使用“统计指示器“来指示一个线程使共享块溢出的次数,并且,进一步指示一个线程被分配一个专用块的时间。图6是表示与分配存储器过程有关的步骤的过程流程图,该分配存储器过程使得专用块的指定包含根据本发明的第一实施例将描述的统计数据。该分配存储器方法在步骤602开始,其中通过分配共享存储器分配区内的多个存储器块构成一个共享存储器分配区。一旦分配区内的存储器被分为块,在步骤604指定分配区内的第一块为试图在分配区分配一个新对象的所有线程的共享块。指定一个所有线程的共享块允许每个线程在共享块分配新对象。
在指定共享块之后,整个系统运行在步骤606。一般地,在运行整个系统的过程中的某些点,试图创建新对象的线程可以使分配区溢出。如上所述,该发现,即,一个线程发现一块已溢出实际上确定一块已溢出。因此,在步骤608就一块是否溢出进行判定。
当步骤608判定为诸如共享块之类的块还未溢出时,允许系统继续运行在步骤606。作为一种替换,当确定一块已溢出时,处理流程进入步骤610,在这里试图从分配区获得下一个可用块。一旦获得下一个可用块,在步骤612,就该块是否可用进行判定。换言之,在分配区就是否实际存在可用的未使用的存储器块进行判定。
当判定存在可用的新块时,在步骤618,将与使块溢出的线程,即,“溢出线程”有关的溢出计数器加1。溢出计数器用于提供其相关线程使一块溢出的指示,例如,统计指示。在一个线程还未被分配一个专用块之前,其溢出计数器实际指示该线程已使共享块溢出的次数。然而,一旦一个线程已被分配一个专用块,其溢出计数器可以提供该线程已使共享块或者专用块溢出的次数的指示。
在步骤618溢出线程的溢出计数器加1之后,在步骤620就该溢出计数器是否超过一个阈值进行判定。换言之,判定由该线程引起的块溢出数是否已超过一个特定的限定。应该明白,根据整个系统的要求该限定,或阈值可以有很大变化。如果在步骤620判定为该溢出计数器还未超过一个阈值,则处理流程就进入步骤622,在这里填满块被一个新的共享块替换。一旦已经适当地指定一个新块,处理流程返回步骤606,在这里允许整个系统运行。
当步骤620判定为该溢出计数器超过一个阈值时,在步骤624,将一个新块指定给在步骤608使块溢出的线程。然后,在步骤626就溢出块是否是共享块进行判定。如果判定溢出块不是共享块,则整个系统允许运行在步骤606。然而,如果判定溢出块是共享块,则需要一个新的共享块。因此,在步骤627就是否有另一个新块可用来指定为一个共享块进行判定。
当没有新块可用时,处理流程就返回步骤606,在这里允许系统运行。在没有新的共享块的情况下,实际上任何后续的一个线程在共享块分配一个新对象的企图可能导致无用单元收集,无用单元收集可以有效释放使用的块,下面将对其进行描述。作为一种替换,在步骤627当另一个新块可用时,在步骤622填满的共享块被一个新的共享块替换。
回到步骤612,当确定一个新块不可用时,在步骤616执行无用单元收集。在一个实施例,无用单元收集包含世代无用单元收集算法,如前所述,该算法用于将存储在分配区块内的有用对象复制到其他存储器区,由此使分配区的至少某些块为空以用于新分配。一旦被释放,这些块一般表现为可用并被指定到一个特定的线程或线程组。
在步骤616执行无用单元收集之后,在步骤617将与整个系统有关的基本上所有线程的溢出计数器复位。一般地,溢出计数器被复位到表示线程还未使任何块溢出的初始值。从步骤617,处理流程返回步骤604,在这里将一个共享块指定给整个系统中的所有线程。
通常,如参照图6所示,可以使用统计指示器以确定一个线程被指定专用块的时间。然而,使用统计指示器的方法通常有很大变化。参照图7将描述诸如存储器分配中的溢出计数器之类的统计指示器的另一个使用实例,该实例一般讨论使用溢出计数器以便在无用单元收集处理之后允许某些线程保留专用块。
图7是表示与根据本发明第一实施例的包含统计指示器的另一个分配存储器过程有关的步骤的过程流程图。该分配存储器方法在步骤702开始,在这里通过分配共享存储器分配区内的多个存储器块构成一个共享存储器区。一旦分配区内的存储器被分为块,在步骤704指定分配区的第一块为试图在分配区分配一个新对象的所有线程的共享块。
在指定共享块之后,整个系统运行在步骤706。即,允许线程试图分配新对象。在运行整个系统的过程中的某些点,试图创建新对象的线程可以使分配区溢出。由于该发现,即,一个线程发现一块已溢出实际上确定一块已溢出。因此,在步骤708就一块是否已溢出进行判定。
实际上,在步骤708判定一块,例如,共享块已溢出之前,允许系统继续运行在步骤706。当确定一块已溢出时,处理流程从步骤708进入步骤710,在这里试图从分配区获得下一个可用块。一旦获得下一个可用块,在步骤712,就该块是否可用进行判定。
当判定存在一个可用的新块时,在步骤713,将与使块溢出的线程,即,溢出线程有关的溢出计数器加1。如参照图6所述,溢出计数器一般用于识别其相关线程已使一块溢出的次数。
在步骤713溢出线程的溢出计数器加1之后,在步骤714就该溢出计数器是否大于一个预定阈值进行判定。该预定阈值一般用于确定一个线程是否被指定一个专用块。当判定为该溢出计数器小于一个阈值,则处理流程就进入步骤720,在这里填满块被一个新块,即,一个新的共享块替换。一旦填满共享块被替换,则允许整个系统继续运行在步骤706。
如果步骤714判定为该溢出计数器超过一个阈值时,在步骤715,将一个新块指定给在步骤708确定的使块溢出的线程。一旦新块被指定给该线程或,确切地说,该溢出线程以便其具有一个专用块,则在步骤717就溢出块是否是共享块进行判定。如果判定溢出块不是共享块,则处理流程返回步骤706,在这里允许整个系统运行。应该明白,在专用块被指定之后整个系统被允许运行之前,溢出块一般为共享块。在已指定共享块之后,溢出块或者是共享块或者是专用块。
作为一种替换,如果步骤717判定溢出块是共享块,如果有必要,则指示该溢出共享块最好被替换。因此,在步骤718就一个附加新块是否可用进行判定。如果确定一个附加新块可用时,在步骤720该溢出共享块被该附加新块替换。然后,处理流程进入步骤706,在这里允许系统运行。另一方面,当步骤718确定没有附加新块可用时,处理流程就直接返回步骤706,在这里允许系统运行。
回到步骤712,在一块已溢出之后,当确定一个新块不可用时,在步骤726执行无用单元收集。在步骤726执行无用单元收集之后,在步骤728确定认为是快分配的线程。在一个实施例,确定认为是快分配的线程包括比较线程的溢出计数器以识别其溢出计数器超过一特定限定的线程。作为一种替换,在另一个实施例,认为是快分配的线程可以是所有线程中具有最高溢出计数器的预定数目的线程。
在步骤728识别认为是快分配的线程之后,在步骤729复位慢分配线程,即,认为不是快分配的线程的溢出计数器。复位慢分配线程的溢出计数器用于防止专用块到可能不需要专用块的线程的任何后续分配。通常,将溢出指示器复位到表示线程还未使任何块溢出的初始值。在步骤730,将一个新块指定给每个快分配线程。即,将一个专用块指定到每个快分配线程。一旦一个新块被指定给每个快分配线程,在步骤732就将一个共享块指定给所有其他线程,即,慢分配线程。当全部线程被指定或者一个专用块或者一个共享块时,处理流程返回步骤706,在这里允许整个系统运行。
允许存储器块由多个慢分配线程共享,同时允许快分配线程访问专用存储器块,一般用于减少无用单元收集时被浪费,或被保留但未填满的存储器量。存储器块的共享也用于降低执行无用单元收集的频率,这是因为在执行无用单元收集之前较多的存储器很可能被填满。另一种分配存储器块的方法包括创建不同尺寸的存储器块,并根据线程的要求向线程分配存储器块,该方法一般能够减少浪费的存储器量,以及无用单元收集的频率。使用这样的方法,可以有效消除与试图在共享块分配新对象有关的同步费用。
下面参照图8,9,10a,10b,和11将讨论被分为不同尺寸的存储器块的共享存储器区和几种用于向不同线程分配块的方法。图8是表示根据本发明的第二实施例的多线程和由多线程共享并分为不同尺寸的块的存储器分配区的示意图。多线程计算环境750包括共享存储器分配区752和多线程756。存储器分配区752分段为不同尺寸的块754、755。在所述实施例,块754基本上全部为同一尺寸,而块755基本上全部为另一个尺寸,块755尺寸大于块754尺寸。然而,应该明白,存储器分配区752一般包括具有不同尺寸的多于两组的块。
存储器分配区752的尺寸根据各种因素变化,这些因素包括环境750的要求,但不限于此。例如,如果环境750具有一个相关的JavaTM虚拟机,存储分配区752可以具有从大约128kB到大约512kB变化的尺寸。类似地,块754、755的尺寸也可以变化很大。在一个实施例,块754可以明显地小于块755,例如,每块754的尺寸可以处于大约1kB到4kB的范围,而每块755的尺寸可以处于大约16kB到大约32kB的范围。如上所述,在环境750,全部的块754具有大约相同的尺寸,而全部的块755具有大约相同的尺寸,因此,存储器分配区752实际上包括两种不同尺寸的块。
在环境750内,快分配线程756,例如,线程756a和756d,每个最终被分配专用块755,这是由于块755大于块754。另一方面,慢分配线程756b、756c,每个最终被分配专用块754。通常,通过将较小的块754指定给慢分配线程756b、756c,浪费较小的存储器空间,这是由于在无用单元收集时块754更可能被填满。另外,通过将较大的块755指定给快分配线程756a、756d,或分配相对较大量字节的线程,允许快分配线程756a、756d具有较多的存储器访问空间,因此潜在地降低无用单元收集的频率。
将较小块754指定给慢或低分配线程756b,756c也可以减少与诸如环境750之类的环境,即,多线程、多处理器环境出现的伪共享有关的问题。如本领域技术人员所熟知的,通常,在一个单独的高速缓存线路分配两个对象,并且每个都由一个单独的线程频繁写入,即,一个线程写入一个对象而另一个线程写入另一个对象时发生伪共享。这种情况可能导致相对较大的远程高速缓存故障。如果每个线程756具有其本身的块754、755,只要分配一个对象的线程是一个特定对象的最频繁的写入器,就可以减少伪共享。
在一个实施例,在潜在地快分配线程被指定一个大专用块之前,首先识别潜在地快分配线程。图9是表示根据本发明的第二实施例与分配存储器的第一过程有关的步骤的过程流程图。该过程在步骤802开始,在这里通过分配较大和较小的存储器块来实际构成一个分配区。较小块的数量和较大块的数量根据各种因素可以变化很大,这些因素包括整个系统的预期要求,但不限于此。通常,使较小块的数量是使存在至少一个较小块用于与整个系统有关的每个线程。
如上面参照图8所示,尽管存储器块的尺寸可以变化很大,在一个实施例,较大存储器块的尺寸一般为较小存储器块的尺寸的10倍。举例来说,较小存储器块尺寸为大约2kB,而较大存储器块尺寸为大约32kB。通常,使较小存储器块尺寸为小于较大存储器块尺寸的2的乘方,以便较大存储器块可以很容易地分为较小存储器块,如果需要的话。
在步骤802分配较小和较大存储器块之后,在步骤804将较小存储器块指定,或分配给每个线程。即,较小存储器块被指定为每个线程的专用块。一旦较小存储器块被指定给每个线程,允许整个系统运行在步骤806。在整个系统运行时,线程试图将新对象分配给其相关的专用块。一般地,在系统运行过程期间,试图分配新对象的线程将使其专用块溢出。
一般地,发现一个其专用块已溢出的线程能够有效确定一块已溢出。因此,在步骤808确定一块已溢出之前,整个系统继续运行在步骤806。当步骤808确定一块已溢出时,表示使该块溢出的线程潜在地为一个快分配线程。因此,在步骤810试图从分配区获得下一个可用块。
在步骤812就一个新的较大块是否在步骤810被成功得到,即,可用进行判定。如果确定一个新的较大块可用,在步骤814就将新的较大块指定给使其块溢出的线程。一旦指定该新的较大块,处理流程返回步骤806,在这里允许整个系统运行。
作为一种替换,当在步骤812确定一个新的较大块不可用时,在所述实施例,在步骤816执行无用单元收集。如上所述,执行无用单元收集,例如,世代无用单元收集以释放存储器块。无用单元收集一般消除线程和专用块之间的关联。换言之,当完成无用单元收集时,整个系统中的线程不再具有指定给它们的块。因此,在执行无用单元收集之后,处理流程进入步骤804,在这里将一个较小块分配给每个线程。
尽管在无用单元收集处理之后将一个较小块分配给每个线程可能是有效的,也可以使用其他处理来确定在无用单元收集处理之后指定给每个线程的块尺寸。例如,在无用单元收集处理之后将一个较小块指定给每个线程的过程中,可以根据每个线程可能的要求指定块。通过保持在无用单元收集处理之前一个线程是否已具有为一个较大块的专用块的记录,如果确定该线程为一个快分配线程并可能需要一个较大块,就将一个新的较大块指定给该线程。将较大的专用块指定给一个预期分配相对较大的专用块的线程可以降低整个系统中块溢出的次数,由此提高系统的效率。
图10a是表示根据本发明的第二实施例与包括基于线程分配速度将块指定给线程的分配存储器过程有关的步骤的过程流程图。该过程在步骤902开始,在这里通过分配较大尺寸的存储器块和较小尺寸的存储器块构成一个分配区。较小尺寸的存储器块的数量和较大尺寸的存储器块的数量根据各种因素可以变化很大,这些因素包括整个系统的预期要求,但不限于此。通常,较小块的数量为使存在至少一个较小块用于与整个系统相关的每个线程。
在分配区分配较小和较大存储器块之后,在步骤904将较小存储器块指定,或分配给每个线程。一旦每个线程已被指定一个专用较小存储器块,在步骤906允许整个系统运行。在整个系统运行过程中,线程试图在其相关的专用块分配新对象。在整个系统运行过程中的某些点,一个试图分配新对象的线程可能使其专用块溢出。
发现一个其专用块已溢出的线程能够有效确定一块已溢出。因此在步骤908确定一块已溢出之前,整个系统继续运行在步骤906。当在步骤908确定一块已溢出时,在步骤910试图从分配区获得下一个可用的较大块。
在试图从分配区获得下一个可用的较大块之后,在步骤912就一个新的较大块是否可用进行判定,如果确定一个新的较大块可用,在步骤914将该新的较大块指定给使其块溢出的线程,处理流程返回步骤906,在这里允许系统运行。
作为一种替换,如果在步骤912确定一个新的较大块不可用,在所述实施例,在步骤916执行无用单元收集。执行无用单元收集以释放存储器块并一般消除线程和专用块之间的关联,无用单元收集可以是世代无用单元收集。在所述实施例,在无用单元收集期间,保留关于一个特定的线程是否与一个较大块或较小块相关的信息。
一旦执行无用单元收集,在步骤918识别认为是快分配线程的线程。与识别快分配线程有关的步骤根据各种因素可以变化很大,这些因素可以包括特定系统的要求,但不限于此。下面参照图10b将描述一种确定认为是快分配线程的线程的方法。
在步骤920每个识别出的快分配线程被指定一个新的较大块。换言之,每个快分配线程被分配一个专用的较大块。接着,在步骤922,一个较小块被指定给每个剩余线程,即,慢分配线程。在每个线程已被指定一个专用块之后,处理流程返回步骤906,在这里允许系统运行。
再参照图10b,将描述一种识别认为是快分配线程的线程的方法。图10b是表示根据本发明的第二实施例,与确定认为是快分配线程的线程,即,图10a的步骤918有关的步骤的过程流程图。确定认为是快分配线程的线程的过程在步骤934开始,该过程有效地确定是否存在“被测试”的线程以识别是否可以将该线程认为是快分配线程。如果不存在一个被测试线程,就完成确定线程是快分配线程还是慢分配线程的过程。作为一种替换,如果存在一个被测试线程,在步骤936就该线程是否被指定一个较小的专用块进行判定。
如果确定该线程被指定一个较小的专用块,就表示该线程为慢分配线程,这是由于该线程在前不需要一个较大专用块。当指示该线程被认为是慢分配线程时,在步骤942将该线程标记为慢分配线程。在该线程被识别为慢分配线程之后,处理流程返回步骤934并确定是否存在另一个要处理的线程。
作为一种替换,如果在步骤936确定该线程未被指定一个较小专用块,则表示该线程被指定一个较大专用块,因此,该线程可以是一个快分配线程。当该线程是一个快分配线程时,在步骤938就在最后无用单元收集间隔该线程所分配的存储器量是否超过一阈值量进行判定。在一个实施例,无用单元收集间隔为在最新无用单元收集和该最新无用单元收集之前的无用单元收集之间所经历的时间。如果有必要,在整个系统存储器一般累积并存储与无用单元收集间隔有关的信息。因此,步骤938基本包括确定自从最新无用单元收集以后该线程所分配的存储器量是否超过一阈值量,该阈值量根据整个系统的要求可以变化很大。
如果步骤938确定在最后无用单元收集间隔内该线程所分配的存储器量超过一阈值量,则该线程被认为是一个快分配线程。当该线程被认为是一个快分配线程时,在步骤940将该线程标记为快分配线程。一旦该线程被标记,或者被识别为快分配线程,处理流程就返回步骤904并确定是否要处理任何其他的线程。
另一方面,如果步骤938确定在最后无用单元收集间隔内该线程所分配的存储器量小于一阈值量,就表示该线程不是一个快分配线程。结果是,在步骤942将该线程标记为慢分配线程。在该线程被标记为慢分配线程之后,处理流程就返回步骤934,在这里确定是否存在要处理的另一个线程。
取代诸如在给定时间间隔一线程所分配的存储器量之类的诊断以确定使其块溢出的线程应被分配一个较大存储器块还是一个较小存储器块,确定应分配给该线程的块的尺寸可以基于其他因素。举例来说,这样的确定可以基于该线程使专用块溢出的次数。下面参照图11,根据本发明的第二实施例将描述与使用溢出计数器的分配存储器的第三处理有关的步骤。该处理在步骤952开始,其中通过分配不同尺寸的存储器块,例如,一个较小尺寸和一个较大尺寸来基本构成一个存储器分配区。一旦分配较小和较大的存储器块,在步骤954将一个较小块指定给整个系统的每个线程。即,系统中的每个线程被指定一个专用较小块。
在每个线程已被指定一个专用较小块之后,在步骤956允许整个系统运行。在整个系统运行过程中,线程试图在其相关的专用块分配新对象。在系统运行期间,一个试图在其专用块分配新对象的线程可能会使其专用块溢出。通常,发现一个其专用块已经溢出的线程基本等效于确定整个系统中的一块已溢出。因此,在步骤958确定一块已溢出之前,整个系统继续运行在步骤956。当在步骤958确定一块已溢出时,在步骤959将使该块溢出的线程的溢出计数器加1。
在所述实施例,线程的溢出计数器用于表示该线程已使一个相关专用块溢出的次数。一旦溢出线程的溢出计数器被加1,在步骤960进行比较以确定溢出线程的溢出计数器是否超过一阈值,即,一个规定的限定值。应该明白,该阈值根据整个系统的要求可以变化很大。然而,通常,设定该阈值以便具有超过该阈值的溢出计数器的线程倾向于分配较多的对象。
当步骤960确定溢出线程的溢出计数器未超过一阈值时,就表示该溢出线程可能不是一个快分配线程,因此,该线程可能不会要求一个较大块。这样,在步骤962试图从分配区获得一个新的较小块。在步骤964就是否从分配区成功获得一个新的较小块进行判定。如果成功获得一个新的较小块,在步骤966就将该新的较小块指定给使其块溢出的线程。接着,处理流程返回步骤956,在这里允许整个系统继续运行。
作为一种替换,如果步骤964确定没有一个新的较小块可用,在步骤968就执行诸如世代无用单元收集之类的无用单元收集。在执行无用单元收集以释放与较小和较大块相关的存储器之后,在步骤970将所有线程的溢出计数器复位到初始值。通常,该初始值用于表示该线程还未使块溢出。一旦溢出计数器被复位,处理流程返回步骤954,在这里将一个专用较小块分配给每个线程。
回到步骤960,当确定溢出线程的溢出计数器超过一阈值时,就表示该溢出线程可能是一个快分配线程。因此,在步骤972试图从存储器分配区获得下一个可用的较大块。一旦试图获得一个新的较大块,在步骤974就该新的较大块是否可用进行判定。如果确定新的较大块可用,在步骤976就将该新的较大块指定给溢出线程,并允许整个系统运行在步骤956。作为一种替换,如果在步骤974确定没有较大块可用,则处理流程进入步骤968,在这里执行无用单元收集以释放存储器。
本发明一般可以在任何适宜的计算机系统实现。图12表示一个适于实现本发明的典型的,通用计算机系统。该计算机系统1030包括被连接到存储器设备的任何数目的处理器1032(也称为中央处理单元,或CPU),存储器设备包括主存储设备1034(一般为只读存储器,或ROM)和主存储设备1036(一般为随机存取存储器,或RAM)。
如本领域技术人员所熟知的,计算机系统1030或,具体地说,CPU1032用于支持一个虚拟机。下面参照图13将描述计算机系统1030支持的一个虚拟机的实例。如本领域所熟知的,ROM用于将数据和指令单向传送到CPU1032,而RAM一般用于以双向方式传送数据和指令。CPU1032一般包括任何数目的处理器。主存储设备1034,1036都可以包括任何适宜的计算机可读的介质。通常为大容量存储器设备的次级存储介质1038也双向连接到CPU1032并提供附加的数据存储容量。大容量存储器1038是一个可用于存储包括计算机代码,数据,和类似信息的程序的计算机可读介质。一般地,大容量存储器1038是一个通常比主存储设备1034,1036慢的诸如硬盘或磁带之类的存储介质。大容量存储器1038可以采用磁或纸带读取器的形式或其他公知的设备。应该明白,在适当的情况下,保留在大容量存储器设备的信息可以以标准形式存入象虚拟存储器那样的RAM1036部分。诸如CD-ROM之类的特定主存储设备1034也可以使数据单向通过CPU1032。
CPU1032也连接到一个或多个输入/输出设备1040,输入/输出设备1040包括诸如视频监视器,跟踪球,鼠标,键盘,麦克风,触摸感应显示,转换器卡读取器,磁或纸带读取器,输入板,输入笔,声音和笔迹识别器,或其他公知输入设备之类的设备,但不限于此,自然,这些输入设备也包括其他计算机。最后,CPU1032可以有选择地连接到一个计算机或使用一般如1012所示的网络连接耦合到一个电信网络,例如,因特网或企业内部互连网。通过这样的网络连接,希望CPU1032在执行上述方法步骤过程中能够接收来自网络的信息,或将信息输出到网络。这种通常表示为使用CPU1032执行的指令序列的信息可以例如以载波形式体现的计算机数据信号的形式从网络接收或输出到网络。计算机硬件和软件领域的技术人员熟知上述设备和材料。
如上所述,可以在计算机系统1030执行一个虚拟机。图13是由图12的计算机系统1030支持、并适于实现本发明的虚拟机的示意图。当执行一个计算机程序,例如,以JavaTM编程语言(由Sun Microsystem,Inc.开发)编写的一个计算机程序时,在编译时环境1105将源码1110提供给编译器1120。编译器1120将源码1110翻译为字节码1130。通常,在软件开发者创建源码1110时将其转换为字节码1130。
字节码1130一般可以重放,下载,或通过一个网络,例如,图12的网络1012分发,或存储在诸如图12的主存储设备1034之类的存储设备。在所述实施例,字节码1130与平台无关。即,基本上可以在运行适当的虚拟机1140的任何计算机系统执行字节码1130。
将字节码1130提供给包括虚拟机1140的运行时环境1135。一般可以使用诸如图12的CPU1032之类的处理器执行运行时环境1135。虚拟机1140包括编译器1142,解释器1144,和运行时系统1146。可以将字节码1130提供给编译器1142或者解释器1144。
当将字节码1130提供给编译器1142时,将字节码1130所包含的方法转换为机器指令。在一个实施例,编译器1142为一个准时制编译器,该编译器在正执行字节码1130所包含的方法时编译该方法。当将字节码1130提供给解释器1144时,一次一个字节码地将将字节码1130读入解释器1144。然后在每个字节码被读入解释器1144时解释器1144执行由每个字节码定义的操作。即,如本领域技术人员熟知的,解释器1144“解释”字节码1130。通常,解释器1144处理字节码1130并在其后连续执行与字节码1130有关的操作。
当由另一个方法,或从运行时环境1135调用一个方法时,如果解释该方法,运行时系统1146可以从运行时环境1135获得字节码1130序列形式的方法,该方法可以由解释器1144直接执行。另一方面,如果调用的方法是一个还未被编译的编译方法,运行时系统1146也可以从运行时环境1135获得字节码1130序列形式的方法,然后启动编译器1142。接着编译器1142从字节码1130产生机器指令,所产生的机器语言指令可由CPU1032直接执行。通常,当虚拟机1140终止时废除机器语言指令。
尽管已描述本发明的几个实施例,应该明白,在不脱离本发明的精神和范围的情况下,本发明可以以其他特定形式体现。举例来说,在存储器空间被分为基本相同的块的系统和在存储器空间被分为不同尺寸的块的系统中,可以记录分配存储器空间所包含的步骤。也可以根据需要改变、删除、或增加步骤。
尽管在包括较小和较大专用块的系统判定一个线程被指定一个较小专用块还是一个较大专用块,基本上基于该线程所分配的字节数,应该明白,这种确定可以基于其他因素的变化。举例来说,当一个线程用于以相对较低的频率分配一个单独的较大对象时,该线程可以不被指定一个专用块,这是由于在共享块与较大对象的低频分配有关的同步开销较小。作为一种替换,由一个线程执行的对象分配数也可以用于确定被指定专用块的线程。
根据将一个新块指定给每个快分配线程已描述了在无用单元收集之后将专用存储器块指定给认为是快分配的线程。然而,应该明白,将专用块指定给快分配的线程不必是“全局性”。换言之,不是认为是快分配的全部线程都被指定专用块。举例来说,在不存在足够的存储器块以用于与其本身块有关的每个快分配线程的情况下,在不脱离本发明的精神和范围的情况下,可以将专用块指定给快分配线程中的“最快者”。
根据初始指定给与多线程系统有关的全部线程的共享块已一般性地描述共享块的使用。然而,在一个实施例,可以不将一个单独共享块初始指定给所有线程,而是将一个特定的共享块指定给一个线程组。即,在一个特定系统可以存在多于一个的共享块。确定要使用的共享块的数目可以基于各种因素,这些因素包括与无用单元收集的相关花费相比的同步的相关花费,但不限于此。
尽管根据其中所有块具有基本相同的尺寸的存储器分配区已描述了共享块的使用,即,由多线程共享的块,应该明白,在不脱离本发明的精神和范围的情况下,在其中块具有不同尺寸的系统也可以使用共享块。例如,当存储器区被分为较小块和较大块时,共享块可以是较小块或者较大块。确定共享块应该是较小块还是较大块基于包括特定计算机系统的预期要求这样的因素,但不限于此。在某些实施例,当共享块溢出时,溢出线程可以初始被指定一个专用较小块。接着,如果确定该溢出线程最终为一个快分配线程,则该溢出线程被指定一个专用较大块。
如参照图9,10a,和11所示,当一个存储器分配区被分为一个较小尺寸和一个较大尺寸时,未成功获得一个较大块可以导致无用单元收集。然而,在一个实施例,当一个较大块不可用时,试图得到一个较小块。如果一个较小块可用,该较小块被指定一个溢出线程。然而,如果一个较小块不可用,就执行无用单元收集。在执行无用单元收集之前首先试图得到较小块,可以降低无用单元收集的频率,由比潜在地增加系统效率。
类似地,当在具有较小和较大尺寸的存储器块的系统未能得到一个较小块时,在执行无用单元收集之前首先试图得到一个较大块。当一个较大块可用时,该较大块可以被指定给一个溢出线程。在较小块不可用时通过将一个较大块指定给一个溢出线程,可以延迟无用单元收集直到没有块可用为止。作为一种替换,当较小块不可用时,可以分割一个较大块以创建一个接着被指定的新的较小块。由于无用单元收集一般具有相对较高的开销,延迟无用单元收集可以导致需要较少的无用单元收集。因此,可以提高整个系统的效率。
尽管根据将一个单独的溢出计数器与一个单独的阈值进行比较已描述了在包括较小块和较大块的系统使用溢出计数器以确定指定给一个线程的块的尺寸,一个线程一般可以包括任何数目的溢出计数器。举例来说,一个线程可以包括一个标识该线程已使较小块溢出的次数的溢出计数器,以及一个标识该线程已使较大块溢出的次数的溢出计数器。对于具有两个溢出计数器的线程,可以使用不同的阈值以确定被指定给该线程的任何新块的尺寸。
根据分配一个较小尺寸的块和一个较大尺寸的块已一般性地描述了分配区内不同尺寸的块的分配。具体地说,根据包括两种不同尺寸的块的分配区已描述了不同尺寸的块的分配。然而,应该明白,在某些实施例,在不脱离本发明的精神和范围的情况下,在分配区可以分配多于两个不同尺寸的块。例如,一个分配区可以包括根据每个线程的要求被指定给不同线程的较小,较大,和中间尺寸的存储器块。
根据诸如JavaTM虚拟机之类的多进程虚拟机的一部分已描述了本发明。然而,本发明通常可以用于基本上任何适宜的虚拟机。因此,本实施例认为是示意性的,不是限定性的,并且本发明不限于给出的描述,在附属权利要求的范围内可以对其进行修改。
Claims (28)
1.一种在多线程计算系统中分配由多线程共享的存储器的方法,该方法包括:
将该共享存储器划分为多个块;
将该多线程分组为至少一个第一线程组和一个第二线程组;和
将从多个块选择的第一块分配给从多个线程选择的一个线程,所选择的线程设置为用于在所选择的第一块分配一个对象,其中所选择的第一块到所选择的线程的分配至少部分基于所选择的线程是第一组还是第二组的一部分。
2.如权利要求1所述的分配由多线程共享的存储器的方法,其特征在于,将多线程分组为第一组和第二组包括:
识别从多线程选择的一个特定线程;和
确定该特定线程是否为一个快分配线程,其中当确定该特定线程为一个快分配线程时,将该特定线程分组到第一组。
3.如权利要求2所述的分配由多线程共享的存储器的方法,其特征在于,当确定该特定线程为一个快分配线程时,该特定线程用于相对经常地分配对象,以及其中当确定该特定线程不是一个快分配线程时,该特定线程不用于相对经常地分配对象并被分组到第二组。
4.如权利要求2所述的分配由多线程共享的存储器的方法,其特征在于,当确定该特定线程为一个快分配线程时,该特定线程在一个预定的时间间隔分配多于预定数目的字节,以及其中当确定该特定线程不是一个快分配线程时,该特定线程在一个预定的时间间隔分配小于预定数目的字节并被分组到第二组。
5.如权利要求2-4中的任何一个所述的分配由多线程共享的存储器的方法,其特征在于,确定该特定线程是否为一个快分配线程包括确定该特定线程已使包括在多个块中的选择块溢出的次数。
6.如权利要求1-4中的任何一个所述的分配由多线程共享的存储器的方法,其特征在于,将共享存储器划分为多个块包括将共享存储器划分为至少两种不同尺寸的多个块。
7.一种在多线程计算系统分配共享存储器的方法,该多线程计算机系统包括至少一个第一线程和一个第二线程,该方法包括:
将该共享存储器划分为多个块;
将从多个块选择的第一块作为一个可由该第一线程和第二线程两者访问的块,其中该第一线程设置为用于在该第一块分配第一对象,并且该第二线程设置为用于在该第一块分配第二对象;
确定该第一块已溢出的时间;
当确定该第一块已溢出时确定是否是由该第一线程在第一块分配第一对象使该第一块溢出;和
当确定该第一线程在第一块分配该第一对象使该第一块溢出时将从多个块选择的一个第二块指定给该第一线程,其中将该第二块指定给第一线程设置为使该第一线程不再用于在该第一块分配对象。
8.如权利要求7所述的方法,其特征在于,该第二线程不设置为用于在第二块分配对象。
9.如权利要求7或8所述的方法,其特征在于,进一步包括:
确定该第一块和第二块中的一个已溢出的时间;
当确定该第二块溢出时将从多个块选择的一个第三块指定给该第一线程,和
当确定该第一块溢出时将该第三块指定给该第二线程。
10.如权利要求9所述的方法,其特征在于,当确定该第一块溢出时,该方法进一步包括指定从多个块选择的一个第四块来替换该第一块。
11.如权利要求10所述的方法,其特征在于,进一步包括确定多个块是否包括该第四块。
12.如权利要求7或8所述的方法,其特征在于,指定第二块的步骤进一步包括确定多个块是否包括该第二块。
13.如权利要求12所述的方法,其特征在于,进一步包括将从多个块选择的一个新的第一块指定给该第二线程访问。
14.如权利要求12所述的方法,其特征在于,确定该第一线程为一个快分配线程的时间包括:
确定该第一线程是否设置为用于在第一块分配对象;
当确定该第一线程设置为用于在第一块分配对象时将该第一线程的分配例行程序设定为锁定;
当确定该第一线程不设置为用于在第一块分配对象时确定由该第一线程分配的存储器是否超过一阈值;和
当确定该第一线程设置为用于在第一块分配对象时将该第一线程的分配例行程序设定为无锁定。
15.如权利要求7或8所述的方法,其特征在于,进一步包括当确定该第一块溢出时指定从多个块选择的一个第三块替换该第一块。
16.如权利要求7或8所述的方法,其特征在于,进一步包括当确定该第一线程使第一块溢出时将与该第一线程有关的计数器加1,该计数器设置为表示将该第二块指定给该第一线程的时间。
17.如权利要求16所述方法,其特征在于,进一步包括确定该计数器超过一阈值的时间,其中直到该计数器超过该阈值才将该第二块指定给该第一线程。
18.如权利要求7或8所述的方法,其特征在于,多个块中的块具有基本相同的尺寸。
19.如权利要求18所述的方法,其特征在于,多个块中的块的尺寸处于大约2kB到大约32kB的范围。
20.一种在多线程计算系统分配共享存储器的方法,该多线程计算系统至少包括第一线程和第二线程,该方法包括:
将该共享存储器划分为多个块,多个块包括多个第一尺寸的块和至少一个第二尺寸的块;
将从多个第一尺寸的块选择的一个第一块指定给该第一线程,其中该第一线程设置为用于在第一块分配第一对象;
将从多个第一尺寸的块选择的一个第二块指定给该第二线程,其中该第二线程设置为用于在第二块分配第二对象;
确定该第一块和第二块中的一个已溢出的时间
确定第二尺寸的一个第三块是否可用;
当确定该第三块可用并确定该第一块已溢出时将该第三块指定给该第一线程;和
当确定该第三块可用并确定该第二块已溢出时将该第三块指定给该第二线程。
21.如权利要求20所述的方法,其特征在于,该第一线程不设置为用于在该第二块分配对象,并且该第二线程不设置为用于在该第一块分配对象,以及其中当该第三块被指定给该第一线程时该第二线程不设置为用于在该第三块分配对象,并且当该第三块被指定给该第二线程时该第一线程不设置为用于在该第三块分配对象。
22.如权利要求20或21所述的方法,其特征在于,多个第一尺寸的块具有大于至少第二尺寸的一个块的尺寸。
23.如权利要求20或21所述的方法,其特征在于,进一步包括当确定该第三块不可用时执行无用单元收集以清零多个块。
24.一种多线程计算机系统,包括存储器、一个第一线程和一个第二线程,该存储器是可由该第一线程和第二线程两者访问的,该计算机系统设置为分配该存储器,该计算机系统包括:
第一处理器,该第一处理器与该第一线程相关;
第二处理器,该第二处理器与该第二线程相关;
存储器划分器,设置为将该存储器划分为多个块;
块指定器,设置为将从该多个块选择的第一块指定为一个可由该第一线程和第二线程两者访问的块,其中该第一线程设置为用于在第一块分配第一对象,并且该第二线程设置为用于在第一块分配第二对象;
第一判定机构,设置为确定第一块已溢出的时间;
第二判定机构,设置为在确定第一块已溢出时确定是否由第一线程在第一块分配第一对象使第一块溢出;和
第二块指定器,设置为当确定由第一线程在第一块分配第一对象使第一块溢出时将从多个块选择的第二块指定给第一线程,其中将第二块指定给第一线程设置为使第一线程不再在第一块分配对象。
25.如权利要求24所述的多线程计算机系统,其特征在于,进一步包括:
第三判定机构,设置为确定第一块和第二块中的一个已溢出的时间;和
第三块指定器,设置为当确定第二块溢出时将从多个块选择的第三块指定给第一线程,其中第三块指定器还设置为当确定第一块溢出时将第三块指定给第二线程。
26.一种多线程计算机系统,用于分配与多线程计算机系统有关的共享存储器,该多线程计算机系统包括至少一个第一线程和一个第二线程,该多线程计算机系统包括:
第一处理器,该第一处理器与该第一线程相关;
第二处理器,该第二处理器与该第二线程相关;
存储器分配器,设置为将该共享存储器划分为多个块,多个块包括多个第一尺寸的块和至少一个第二尺寸的块;
第一指定机构,设置为将从多个第一尺寸的块选择的一个第一块指定给该第一线程,其中该第一线程设置为用于在第一块分配第一对象;
第二指定机构,设置为将从多个第一尺寸的块选择的一个第二块指定给该第二线程,其中该第二线程设置为用于在第二块分配第二对象;
第一判定机构,设置为确定该第一块和第二块中的一个已溢出的时间;
第二判定机构,设置为确定第二尺寸的一个第三块是否可用;和
第三指定机构,设置为当确定该第三块可用并确定该第一块已溢出时将该第三块指定给该第一线程,该第三指定机构还设置为当确定该第三块可用并确定该第二块已溢出时将该第三块指定给该第二线程。
27.如权利要求26所述的多线程计算机系统,其特征在于,该多个第一尺寸的块具有大于至少一个第二尺寸的块的尺寸。
28.一种用于分配多线程计算机系统中的存储器的计算机实现的方法,该多线程计算机系统包括至少一个第一线程和一个第二线程,该方法包括:
将存储器划分为多个块,该多个块包括一个第一块和一个第二块,该第一块的尺寸小于该第二块;
将该第一块指定为该第一线程可访问的,其中该第一线程设置为用于在该第一块分配第一对象;
将该第二块指定为该第二线程可访问的,其中该第二线程设置为用于在该第二块分配第二对象,其中该第一线程不设置为用于在该第二块内分配第一对象,并且该第二线程不设置为用于在该第一块内分配第二对象。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/108,047 US6209066B1 (en) | 1998-06-30 | 1998-06-30 | Method and apparatus for memory allocation in a multi-threaded virtual machine |
US09/108047 | 1998-06-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1248742A CN1248742A (zh) | 2000-03-29 |
CN1205549C true CN1205549C (zh) | 2005-06-08 |
Family
ID=22319971
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB991116534A Expired - Lifetime CN1205549C (zh) | 1998-06-30 | 1999-06-30 | 用于多-线程虚拟机的存储器分配的方法和装置 |
Country Status (5)
Country | Link |
---|---|
US (2) | US6209066B1 (zh) |
EP (1) | EP0969379A3 (zh) |
JP (1) | JP4511653B2 (zh) |
KR (1) | KR100686418B1 (zh) |
CN (1) | CN1205549C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103440203A (zh) * | 2013-08-26 | 2013-12-11 | 上海斐讯数据通信技术有限公司 | 一种共享内存分配方法 |
Families Citing this family (74)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7146479B2 (en) * | 2001-07-18 | 2006-12-05 | City U Research Limited | Method and apparatus of storage allocation/de-allocation in object-oriented programming environment |
GB9825102D0 (en) | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6173442B1 (en) * | 1999-02-05 | 2001-01-09 | Sun Microsystems, Inc. | Busy-wait-free synchronization |
GB9921719D0 (en) * | 1999-09-14 | 1999-11-17 | Tao Group Ltd | Thread locking |
JP3608993B2 (ja) * | 1999-11-10 | 2005-01-12 | 富士通株式会社 | コンパイラ装置及びコンパイラプログラムを記録した記録媒体 |
US6681306B1 (en) * | 1999-11-29 | 2004-01-20 | Sun Microsystems, Inc. | Method and apparatus for increasing scavenging garbage collection effectiveness |
US6594678B1 (en) * | 2000-01-05 | 2003-07-15 | Sun Microsystems, Inc. | Methods and apparatus for improving locality of reference through memory management |
US6807620B1 (en) * | 2000-02-11 | 2004-10-19 | Sony Computer Entertainment Inc. | Game system with graphics processor |
JP3611295B2 (ja) * | 2000-03-09 | 2005-01-19 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータシステム、メモリ管理方法及び記憶媒体 |
US6427195B1 (en) * | 2000-06-13 | 2002-07-30 | Hewlett-Packard Company | Thread local cache memory allocator in a multitasking operating system |
US6832378B1 (en) * | 2000-06-20 | 2004-12-14 | International Business Machines Corporation | Parallel software processing system |
US6507903B1 (en) * | 2000-06-20 | 2003-01-14 | International Business Machines Corporation | High performance non-blocking parallel storage manager for parallel software executing on coordinates |
US6505275B1 (en) * | 2000-07-24 | 2003-01-07 | Sun Microsystems, Inc. | Method for scalable memory efficient thread-local object allocation |
CA2421591C (en) | 2000-09-13 | 2011-08-23 | Geodesic Systems, Incorporated | Conservative garbage collectors that can be used with general memory allocators |
US6824064B2 (en) * | 2000-12-06 | 2004-11-30 | Mobile-Mind, Inc. | Concurrent communication with multiple applications on a smart card |
US7233998B2 (en) | 2001-03-22 | 2007-06-19 | Sony Computer Entertainment Inc. | Computer architecture and software cells for broadband networks |
US7093104B2 (en) * | 2001-03-22 | 2006-08-15 | Sony Computer Entertainment Inc. | Processing modules for computer architecture for broadband networks |
US7516334B2 (en) * | 2001-03-22 | 2009-04-07 | Sony Computer Entertainment Inc. | Power management for processing modules |
US6526491B2 (en) * | 2001-03-22 | 2003-02-25 | Sony Corporation Entertainment Inc. | Memory protection system and method for computer architecture for broadband networks |
US7231500B2 (en) * | 2001-03-22 | 2007-06-12 | Sony Computer Entertainment Inc. | External data interface in a computer architecture for broadband networks |
US7350200B2 (en) * | 2001-03-29 | 2008-03-25 | Intel Corporation | Method and system of controlling dynamically compiled native code size |
US7228366B2 (en) * | 2001-06-29 | 2007-06-05 | Intel Corporation | Method and apparatus for deterministic removal and reclamation of work items from an expansion bus schedule |
US7334228B2 (en) | 2001-07-27 | 2008-02-19 | International Business Machines Corporation | Runtime-resource management |
US7487505B2 (en) * | 2001-08-27 | 2009-02-03 | Intel Corporation | Multithreaded microprocessor with register allocation based on number of active threads |
US7243229B2 (en) * | 2001-10-02 | 2007-07-10 | Hitachi, Ltd. | Exclusive access control apparatus and method |
EP1456750A1 (en) | 2001-12-12 | 2004-09-15 | Telefonaktiebolaget LM Ericsson (publ) | Collision handling apparatus and method |
US7143413B2 (en) * | 2002-05-15 | 2006-11-28 | Hewlett-Packard Development Company, L.P. | Method and system for allocating system resources among applications using weights |
US7322034B2 (en) | 2002-06-14 | 2008-01-22 | Hewlett-Packard Development Company, L.P. | Method and system for dynamically allocating computer system resources |
US6883081B2 (en) * | 2002-07-30 | 2005-04-19 | Veritas Operating Corporation | Storage management software bridges |
US6904511B2 (en) * | 2002-10-11 | 2005-06-07 | Sandbridge Technologies, Inc. | Method and apparatus for register file port reduction in a multithreaded processor |
US7363626B2 (en) * | 2003-03-24 | 2008-04-22 | Sun Microsystems, Inc. | Thread level application partitioning |
US7444547B2 (en) | 2003-06-19 | 2008-10-28 | International Business Machines Corproation | Method, system, and product for programming in a simultaneous multi-threaded processor environment |
US6912482B2 (en) * | 2003-09-11 | 2005-06-28 | Veritas Operating Corporation | Data storage analysis mechanism |
US7325118B2 (en) * | 2003-09-30 | 2008-01-29 | Samsung Electronics, Co., Ltd. | Method and apparatus for executing dynamic memory management with object-oriented program |
WO2005081647A2 (en) * | 2004-03-02 | 2005-09-09 | Hismartech Co., Ltd. | Method, system and a computer-readable recording medium for controlling storage of data in memory and system therefor |
US8224639B2 (en) | 2004-03-29 | 2012-07-17 | Sony Computer Entertainment Inc. | Methods and apparatus for achieving thermal management using processing task scheduling |
US7257811B2 (en) | 2004-05-11 | 2007-08-14 | International Business Machines Corporation | System, method and program to migrate a virtual machine |
US7546588B2 (en) * | 2004-09-09 | 2009-06-09 | International Business Machines Corporation | Self-optimizable code with code path selection and efficient memory allocation |
JP4144609B2 (ja) * | 2004-09-29 | 2008-09-03 | ソニー株式会社 | 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム |
US7350047B2 (en) * | 2004-10-07 | 2008-03-25 | International Business Machines Corporation | Memory overflow management |
JP4641176B2 (ja) * | 2004-11-08 | 2011-03-02 | 三菱電機株式会社 | アプリケーション処理装置及びアプリケーション処理プログラム |
US7743233B2 (en) * | 2005-04-05 | 2010-06-22 | Intel Corporation | Sequencer address management |
US10026140B2 (en) | 2005-06-10 | 2018-07-17 | Nvidia Corporation | Using a scalable graphics system to enable a general-purpose multi-user computer system |
US20070033240A1 (en) * | 2005-08-04 | 2007-02-08 | International Business Machines Corporation | Scheduling garbage collection |
US8144149B2 (en) | 2005-10-14 | 2012-03-27 | Via Technologies, Inc. | System and method for dynamically load balancing multiple shader stages in a shared pool of processing units |
US20070091088A1 (en) * | 2005-10-14 | 2007-04-26 | Via Technologies, Inc. | System and method for managing the computation of graphics shading operations |
US20070271560A1 (en) * | 2006-05-18 | 2007-11-22 | Microsoft Corporation | Deploying virtual machine to host based on workload characterizations |
US8117403B2 (en) * | 2007-05-14 | 2012-02-14 | International Business Machines Corporation | Transactional memory system which employs thread assists using address history tables |
US8095750B2 (en) * | 2007-05-14 | 2012-01-10 | International Business Machines Corporation | Transactional memory system with fast processing of common conflicts |
US9009452B2 (en) | 2007-05-14 | 2015-04-14 | International Business Machines Corporation | Computing system with transactional memory using millicode assists |
US8688920B2 (en) | 2007-05-14 | 2014-04-01 | International Business Machines Corporation | Computing system with guest code support of transactional memory |
US8321637B2 (en) * | 2007-05-14 | 2012-11-27 | International Business Machines Corporation | Computing system with optimized support for transactional memory |
US8095741B2 (en) * | 2007-05-14 | 2012-01-10 | International Business Machines Corporation | Transactional memory computing system with support for chained transactions |
JP4935626B2 (ja) * | 2007-10-30 | 2012-05-23 | 富士通株式会社 | 制御プログラム及び方法並びにコンピュータ |
US20090189896A1 (en) * | 2008-01-25 | 2009-07-30 | Via Technologies, Inc. | Graphics Processor having Unified Shader Unit |
US20090217280A1 (en) * | 2008-02-21 | 2009-08-27 | Honeywell International Inc. | Shared-Resource Time Partitioning in a Multi-Core System |
US20090228537A1 (en) * | 2008-03-07 | 2009-09-10 | Branda Steven J | Object Allocation System and Method |
US8566524B2 (en) | 2009-08-31 | 2013-10-22 | International Business Machines Corporation | Transactional memory system with efficient cache support |
KR101109009B1 (ko) * | 2009-11-17 | 2012-01-31 | 선문대학교 산학협력단 | 비정규 리덕션의 병렬화 방법 |
EP3009941B1 (en) * | 2009-12-14 | 2017-07-26 | Citrix Systems Inc. | Methods and systems for communicating between trusted and non-trusted virtual machines |
KR101748441B1 (ko) * | 2010-10-08 | 2017-06-19 | 삼성전자주식회사 | 거짓 공유 검출 장치 및 방법 |
US8601193B2 (en) | 2010-10-08 | 2013-12-03 | International Business Machines Corporation | Performance monitor design for instruction profiling using shared counters |
US8589922B2 (en) | 2010-10-08 | 2013-11-19 | International Business Machines Corporation | Performance monitor design for counting events generated by thread groups |
US8489787B2 (en) | 2010-10-12 | 2013-07-16 | International Business Machines Corporation | Sharing sampled instruction address registers for efficient instruction sampling in massively multithreaded processors |
US9329988B2 (en) * | 2011-08-19 | 2016-05-03 | Nvidia Corporation | Parallel dynamic memory allocation using a nested hierarchical heap |
JP2013191202A (ja) * | 2012-02-14 | 2013-09-26 | Ricoh Co Ltd | マルチコアプロセッサ |
US9223699B2 (en) * | 2013-03-15 | 2015-12-29 | Intel Corporation | Cache management in managed runtime environments |
US10747440B2 (en) * | 2014-09-24 | 2020-08-18 | Hitachi, Ltd. | Storage system and storage system management method |
US9720819B2 (en) * | 2015-06-12 | 2017-08-01 | Intel Corporation | Concurrent, moving, garbage collector |
ES2747962T3 (es) * | 2015-06-29 | 2020-03-12 | Aicas Gmbh | Gestión de memoria automática que usa una unidad de gestión de memoria |
US10353747B2 (en) * | 2015-07-13 | 2019-07-16 | Futurewei Technologies, Inc. | Shared memory controller and method of using same |
CN107239406B (zh) * | 2016-03-29 | 2021-03-09 | 斑马智行网络(香港)有限公司 | 用于垃圾回收的并行标记处理方法及装置 |
US10838656B2 (en) * | 2016-12-20 | 2020-11-17 | Mediatek Inc. | Parallel memory access to on-chip memory containing regions of different addressing schemes by threads executed on parallel processing units |
US11436033B2 (en) * | 2019-10-11 | 2022-09-06 | International Business Machines Corporation | Scalable virtual memory metadata management |
Family Cites Families (11)
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 |
US5247634A (en) * | 1990-03-20 | 1993-09-21 | Hewlett-Packard Company | Method of managing memory allocation by association of memory blocks with a tree structure |
JP3309425B2 (ja) * | 1992-05-22 | 2002-07-29 | 松下電器産業株式会社 | キャッシュ制御装置 |
JPH0635747A (ja) * | 1992-07-17 | 1994-02-10 | Mitsubishi Electric Corp | デバッグ支援装置 |
JPH07200390A (ja) * | 1993-12-28 | 1995-08-04 | Toshiba Corp | データアクセス方法 |
KR970006412B1 (ko) * | 1993-12-30 | 1997-04-28 | 엘지전자 주식회사 | 멀티 프로세서 시스템의 메모리 공유 액세스 제어 장치 |
US5940869A (en) * | 1995-06-07 | 1999-08-17 | International Business Machines Corporation | System and method for providing shared memory using shared virtual segment identification in a computer system |
KR100429699B1 (ko) * | 1995-07-18 | 2005-08-31 | 시바 스페셜티 케미칼스 홀딩 인크. | 염료혼합물,이의제조방법및이를사용한염색또는날염방법 |
US5727178A (en) * | 1995-08-23 | 1998-03-10 | Microsoft Corporation | System and method for reducing stack physical memory requirements in a multitasking operating system |
US5706515A (en) * | 1996-03-25 | 1998-01-06 | Sun Microsystems, Inc. | System and method for implementing an atomic wait for notification operation |
US5893159A (en) * | 1997-10-22 | 1999-04-06 | International Business Machines Corporation | Methods and apparatus for managing scratchpad memory in a multiprocessor data processing system |
-
1998
- 1998-06-30 US US09/108,047 patent/US6209066B1/en not_active Expired - Lifetime
-
1999
- 1999-06-30 KR KR1019990025605A patent/KR100686418B1/ko not_active IP Right Cessation
- 1999-06-30 EP EP99305160A patent/EP0969379A3/en not_active Withdrawn
- 1999-06-30 JP JP18601599A patent/JP4511653B2/ja not_active Expired - Lifetime
- 1999-06-30 CN CNB991116534A patent/CN1205549C/zh not_active Expired - Lifetime
-
2000
- 2000-11-28 US US09/724,737 patent/US6510498B1/en not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103440203A (zh) * | 2013-08-26 | 2013-12-11 | 上海斐讯数据通信技术有限公司 | 一种共享内存分配方法 |
CN103440203B (zh) * | 2013-08-26 | 2017-07-25 | 上海斐讯数据通信技术有限公司 | 一种共享内存分配方法 |
Also Published As
Publication number | Publication date |
---|---|
EP0969379A2 (en) | 2000-01-05 |
JP2000222281A (ja) | 2000-08-11 |
EP0969379A3 (en) | 2005-08-03 |
US6209066B1 (en) | 2001-03-27 |
KR20000006565A (ko) | 2000-01-25 |
JP4511653B2 (ja) | 2010-07-28 |
KR100686418B1 (ko) | 2007-02-23 |
CN1248742A (zh) | 2000-03-29 |
US6510498B1 (en) | 2003-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1205549C (zh) | 用于多-线程虚拟机的存储器分配的方法和装置 | |
US7143124B2 (en) | Detection of dead regions during incremental collection | |
CN1154928C (zh) | 用于多任务设施信息处理系统的资源管理方法和设备 | |
US7165255B2 (en) | Method and apparatus for managing surplus memory in multitasking system | |
US6434577B1 (en) | Scalable-remembered-set garbage collection | |
CN1096642C (zh) | 高效利用空间的对象加锁的系统和方法 | |
US6185581B1 (en) | Train-algorithm-based garbage collector employing fixed-size remembered sets | |
JP4756231B2 (ja) | 掃除用のガーベッジコレクションの効果を高めるための方法、コンピュータ読み取り可能媒体、コンピュータシステム、及び、メモリ | |
US6868488B2 (en) | Binned remembered sets | |
US6424977B1 (en) | Train-algorithm-based garbage collector employing reduced oversized-object threshold | |
US6415302B1 (en) | Train-algorithm-based garbage collector employing farthest-forward-car indicator | |
CN101075209A (zh) | 在异构多处理器系统中收集垃圾的系统和方法 | |
JPH11212808A (ja) | プログラム制御装置とメモリ割当装置および方法 | |
WO2001013239A1 (en) | Reduced-cost remembered-set processing in a train-algorithm-based garbage collector | |
US20060074988A1 (en) | Garbage collection system | |
CN1687904A (zh) | 智能卡存储环境的控制方法 | |
CN1836210A (zh) | 用于在程序代码转换中划分代码的方法和装置 | |
US6999979B2 (en) | Efficient encoding of references into a collection set | |
US7870171B2 (en) | Method and system for garbage collection in a multitasking environment | |
US20040186863A1 (en) | Elision of write barriers for stores whose values are in close proximity | |
US7062518B2 (en) | Efficiently supporting the existence of long trains in a generation managed by the train algorithm | |
CN114051610A (zh) | 基于arena的存储器管理 | |
JP5051961B2 (ja) | モジュール式ガーベッジコレクタを実現するための方法および装置 | |
US7058781B2 (en) | Parallel card table scanning and updating | |
US7096329B2 (en) | Better placement of objects promoted into a generation managed by the train 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 | ||
CX01 | Expiry of patent term |
Granted publication date: 20050608 |
|
CX01 | Expiry of patent term |