《对无用存储单元收集的GPU支持.pdf》由会员分享,可在线阅读,更多相关《对无用存储单元收集的GPU支持.pdf(25页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102985910 A(43)申请公布日 2013.03.20CN102985910A*CN102985910A*(21)申请号 201180020912.X(22)申请日 2011.02.2212/715,835 2010.03.02 USG06F 12/02(2006.01)(71)申请人超威半导体公司地址美国加利福尼亚州(72)发明人埃里克R卡斯波尔(74)专利代理机构上海胜康律师事务所 31263代理人李献忠(54) 发明名称对无用存储单元收集的GPU支持(57) 摘要本发明公开了一种用于有效无用存储单元收集的系统和方法。通用中央处理单元(CPU)根据分代无用。
2、存储单元收集技术对分配的堆进行分区。代被分成固定大小的卡。所述CPU在应用程序执行期间标记自上一次无用存储单元收集以来的合格脏卡的指示。当所述CPU检测到下一次无用存储单元收集起始条件被满足时,所述CPU向专用处理单元(SPU)发送与一个或多个卡根地址的确定相对应的通知,每个卡根地址对应于所述标记指示之一。所述SPU具有单指令多数据(SIMD)并行架构,并且可为图形处理单元(GPU)。所述SPU可利用其SIMD核心的并行架构来同时计算多个卡根地址。然后,所述SPU将这些地址发送至所述CPU以供无用存储单元收集算法中使用。(30)优先权数据(85)PCT申请进入国家阶段日2012.10.25(8。
3、6)PCT申请的申请数据PCT/US2011/025779 2011.02.22(87)PCT申请的公布数据WO2011/109191 EN 2011.09.09(51)Int.Cl.权利要求书3页 说明书13页 附图8页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书 3 页 说明书 13 页 附图 8 页1/3页21.一种处理节点,其包括:通用中央处理单元(CPU);专用处理单元(SPU);以及存储器;其中所述CPU被配置成:响应于检测到存储于所述存储器的一部分中的数据对象已被修改,存储对应于所述部分的指示;并且响应于检测到无用存储单元收集起始条件被满足,向所述SPU发送。
4、通知;其中响应于从所述CPU接收到所述通知,所述SPU被配置成执行对应于所述部分的无用存储单元收集预处理。2.根据权利要求1所述的处理节点,其中所述CPU还被配置成:将所述存储器分成多个区域,每个区域均包括多个子区域,所述部分对应于所述子区域之一;并且其中所述SPU还被配置成计算多个根地址,每个根地址均对应于所述存储的指示之一。3.根据权利要求2所述的处理节点,其中所述SPU还被配置成将所述计算的根地址发送至所述CPU以供无用存储单元收集算法使用,以识别一个或多个预定可收集区域中的可获得的数据对象。4.根据权利要求3所述的处理节点,其中所述CPU还被配置成响应于检测到存储于所述多个子区域中的子。
5、区域中的数据对象包含指向所述一个或多个预定可收集区域之一的指针值来存储与所述子区域相对应的指示。5.根据权利要求3所述的处理节点,其中所述CPU还被配置成在所述通知中向所述SPU发送所述存储的指示和所述多个区域中的区域的基地址,所述多个区域包括与所述存储的指示相对应的一个或多个子区域。6.根据权利要求5所述的处理节点,其中所述SPU还被配置成:并行读取两个或更多个存储的指示,以定位两个或更多个相应子区域;并且针对所述两个或更多个定位的子区域中的每一个,基于相应基地址并行计算一个根地址。7.根据权利要求6所述的处理节点,其中所述SPU包括单指令多数据(SIMD)并行架构。8.根据权利要求6所述的。
6、处理节点,其中所述SPU在不引起使所述CPU停止执行的暂停的情况下计算所述多个根地址。9.一种用于无用存储单元收集的方法,所述方法包括:通用中央处理单元CPU响应于检测到存储于存储器的一部分中的数据对象已被修改来存储对应于所述部分的指示;响应于检测到无用存储单元收集起始条件被满足,从所述CPU向专用处理单元(SPU)发送通知;并且所述SPU执行对应于所述部分的无用存储单元收集预处理。权 利 要 求 书CN 102985910 A2/3页310.根据权利要求9所述的方法,其还包括:所述CPU将所述存储器分成多个区域,每个区域均包括多个子区域,所述部分对应于所述子区域之一;并且所述SPU计算多个根。
7、地址,每个根地址均对应于所述存储的指示之一。11.根据权利要求10所述的方法,其还包括将所述计算的根地址发送至所述CPU以供无用存储单元收集算法使用,以识别一个或多个预定可收集区域中的可获得的数据对象。12.根据权利要求11所述的方法,其还包括响应于检测到存储于所述多个子区域中的子区域中的数据对象包含指向所述一个或多个预定可收集区域之一的指针值来存储与所述子区域相对应的指示。13.根据权利要求11所述的方法,其还包括在所述通知中向所述SPU发送所述存储的指示和所述多个区域中的区域的基地址,所述多个区域包括与所述存储的指示相对应的一个或多个子区域。14.根据权利要求13所述的方法,其还包括:并行。
8、读取两个或更多个存储的指示,以定位两个或更多个相应子区域;并且针对所述两个或更多个定位的子区域中的每一个,基于相应基地址并行计算一个根地址。15.根据权利要求13所述的方法,其中所述多个区域中的每个区域均对应于相应存储数据对象的龄期,其中所述一个或多个预定可收集区域为所述多个区域中的最新区域。16.根据权利要求15所述的方法,其中所述无用存储单元收集起始条件包括其中最新子区域具有小于预定阈值的空闲空间的条件。17.一种计算系统,其包括:第一处理节点,其包括通用中央处理单元(CPU);存储器,其耦接至所述第一处理节点;以及第二处理节点,其包括专用处理单元(SPU);其中所述CPU被配置成:响应于。
9、检测到存储于所述存储器的一部分中的数据对象已被修改,存储对应于所述部分的指示;并且响应于检测到无用存储单元收集起始条件被满足,向所述SPU发送通知;其中响应于从所述CPU接收到所述通知,所述SPU被配置成执行对应于所述部分的无用存储单元收集预处理。18.根据权利要求17所述的计算系统,其中所述CPU还被配置成:将所述存储器分成多个区域,每个区域均包括多个子区域,所述部分对应于所述子区域之一;并且其中所述SPU还被配置成计算多个根地址,每个根地址均对应于所述存储的指示之一。19.根据权利要求18所述的计算系统,其中所述CPU还被配置成响应于检测到存储于所述多个子区域中的子区域中的数据对象包含指向。
10、一个或多个预定可收集区域之一的指针值来存储与所述子区域相对应的指示。20.根据权利要求18所述的计算系统,其中所述CPU还被配置成在所述通知中向所述权 利 要 求 书CN 102985910 A3/3页4SPU发送所述存储的指示和所述多个区域中的区域的基地址,所述多个区域包括与所述存储的指示相对应的一个或多个子区域。权 利 要 求 书CN 102985910 A1/13页5对无用存储单元收集的 GPU 支持背景技术技术领域0001 本发明涉及计算系统,并且更具体地涉及计算机无用存储单元收集机制。相关领域的描述0002 当软件程序员根据一种算法或方法编写应用程序以执行工作时,程序员通常会利用变量。
11、来引用临时数据和结果数据。可称为数据对象的此数据要求在计算机存储器中分配空间。在一个或多个应用程序的执行期间,可用于数据对象的分配的计算机存储器的未分配或空闲的量可减少至次优水平。空闲空间量的这种减少可使系统性能降低,并且最终可能不存在任何可用空闲空间。可在应用程序执行期间使用自动存储器管理技术,例如无用存储单元收集。无用存储单元收集维持足够的空闲空间,识别并移除内存泄漏,将可获得的数据对象中的一些或全部复制到新存储区中,根据需要更新对数据对象的引用等。0003 无用存储单元收集算法在带来益处的同时也有一些设计代价。例如,无用存储单元收集算法通常包括若干步骤,并且可能比较耗时。因此,当无用存储。
12、单元收集算法执行其任务时,计算系统可能会经历暂停。如果无用存储单元收集程序实时运行或在执行应用程序的同时运行,则无用存储单元收集暂停的时长可能是不可接受的。此外,该算法可能在其执行期间利用高速缓存空间。高速缓存空间的使用又可能导致有用信息被排除,一旦该算法完成就必须重新获取该信息。0004 对存储器的一部分而非整个存储器执行无用存储单元收集算法的步骤可减少与无用存储单元收集相关的暂停时间。此外,研究已表明在许多软件应用程序中大多数数据对象存活时间不长。因此,对于上述无用存储单元收集的问题的一个解决方案包括对具有最新数据对象的存储器的一部分执行无用存储单元收集算法。一种此类技术为分代无用存储单元。
13、收集。0005 在确定运行无用存储单元收集时,执行一些预处理步骤,然后才进行无用存储单元收集。例如,在此时计算指向较新数据对象的较旧数据对象的地址。无用存储单元收集算法随后使用这些地址以将所有可获得的数据对象定位。随着地址的数量和大小的增加,用于地址计算的时间也增加,并且可能减少分代无用存储单元收集技术的有益效果。0006 鉴于以上情况,需要用于进行计算机无用存储单元收集的有效方法和机制。0007 发明概述0008 考虑了用于进行有效无用存储单元收集的系统和方法。0009 在一个实施方案中,处理节点包括通用中央处理单元(CPU)、专用处理单元(SPU)和存储器。在一个实施方案中,SPU具有单指。
14、令多数据(SIMD)并行架构,并且可为图形处理单元(GPU)。CPU进行操作以将存储器内的分配的堆分成多个区域。在各个实施方案中,这些区域可按照龄期来排序或识别,并且可称为“代”。此外,每个区域均可包括多个子区域或“卡”。在一些实施方案中,每个卡均具有固定大小,例如128个字节、4KB虚拟页或其它大小。在应用程序执行期间,CPU响应于检测到对存储于卡中的数据对象的修改有资格作说 明 书CN 102985910 A2/13页6为潜在跨代引用来标记与特定卡相对应的指示。例如,在一个实施方案中,可修改存储于数据对象中的指针值以指向存储于另一代中的数据对象。在另一个实施方案中,当修改指针值以指向存储于。
15、最新代中的数据对象时,对相应指示进行标记。可能存在且可考虑其它资格条件。0010 在各个实施方案中,CPU可检测到无用存储单元收集起始条件被满足,例如最新代具有小于预定阈值的空闲存储空间。响应于确定无用存储单元收集起始条件被满足,CPU将指示SPU将执行预定无用存储单元收集相关任务的通知发送至SPU。在一个实施方案中,SPU可确定一个或多个卡根地址,每个卡根地址均对应于标记的指示之一。SPU可利用SIMD核心的并行架构来同时计算多个卡根地址。当SPU执行无用存储单元收集相关任务时,CPU可继续处理其它任务。因此,可在CPU不引起无用存储单元收集暂停的情况下确定这些卡根地址。另外,这些任务无需C。
16、PU的高速缓存子系统。因此,可提高总体系统性能。在各个实施方案中,第一处理节点的CPU可经由网络连接将上述通知发送至位于第二处理节点中的SPU。然后,如上所述,SPU可确定卡根地址,以便卸载CPU。0011 这些和其它实施方案将通过参考以下描述和附图来进一步理解。0012 附图简述0013 图1为包括具有并行架构的专用处理单元的示例性处理节点的一个实施方案的总体框图。0014 图2为进程地址空间的一个实施方案的总体框图。0015 图3为分区存储器的一个实施方案的总体框图。0016 图4为一种通过具有并行架构的专用处理单元来进行有效无用存储单元收集的方法的一个实施方案的流程图。0017 图5为一。
17、种用于计算卡根地址以供无用存储单元收集算法中使用的方法的一个实施方案的流程图。0018 图6为通用处理器核心的一个实施方案的总体框图。0019 图7为图形处理器核心的一个实施方案的总体框图。0020 图8为示出计算系统的一个实施方案的总体框图。0021 虽然本发明可具有各种修改和替代形式,但是具体实施方案以举例的方式在附图中示出,并且在本文中被详细描述。然而,应当理解,附图及其详细描述并不旨在使本发明受限于所公开的特定形式,而相反地,本发明应涵盖由所附权利要求所限定的本发明的精神和范围内的所有修改、等同形式和替代形式。具体实施方式0022 在以下描述中,阐述了许多具体细节,以提供对本发明的充分。
18、理解。然而,本领域的普通技术人员应意识到,本发明可在无需这些具体细节的情况下实施。在某些情况下,未详细示出所熟知的电路、结构和技术,以避免使本发明难以理解。0023 参照图1,示出了带有具有并行架构的专用处理单元(SPU)的示例性处理节点110的一个实施方案。处理节点110可包括存储器控制器(MC)120;接口逻辑140;一个或多个处理单元115,其可包括一个或多个处理器核心112和相应高速缓冲存储器子系统114;包处理逻辑116;以及共享高速缓冲存储器子系统118。此外,处理节点110可包括一个或多说 明 书CN 102985910 A3/13页7个专用处理单元(SPU)170。SPU 17。
19、0可包括具有并行架构的专用处理器核心172,例如单指令多数据(SIMD)核心。SIMD核心的示例包括图形处理单元(GPU)、数字信号处理(DSP)核心或其它。0024 在一个实施方案中,处理节点110可包括作为图形处理单元(GPU)来实施的SPU 170,以替代或补充到第二通用处理单元115(未示出)。GPU 170可包括一个或多个图形处理器核心172和数据存储缓冲器174。GPU可为用于个人计算机、工作站或视频游戏控制台的专用图形呈现装置。在一个实施方案中,处理节点110的所述功能包括在单个集成电路上。0025 处理器核心112包括用于根据预定义通用指令集来执行指令的电路。例如,可选择x86。
20、指令集架构。或者,可选择Alpha、PowerPC或任何其它通用指令集架构。一般来讲,处理器核心112分别为了数据和指令访问高速缓冲存储器子系统114。如果请求的块在高速缓冲存储器子系统114或共享高速缓冲存储器子系统118中未找到,则可生成读请求,并且将其传送至位于缺失块映射到的节点内的存储器控制器(MC)。0026 现代GPU 170在处理和显示计算机图形方面非常有效,并且对于一系列复杂算法而言,其高度并行的结构使其比通用中央处理单元(CPU)(例如处理单元115)更有效。GPU通常执行图形和视频所需的计算,而CPU执行不止图形的更多系统进程的计算。常规的GPU 170使用非常广泛的单指令。
21、多数据(SIMD)架构,以在图像渲染应用程序中实现高吞吐量。此类应用程序通常需要对大量对象(顶点或像素)执行相同的程序,例如顶点着色器或像素着色器。因为每个对象独立于其它对象被处理,但使用相同的操作序列,所以SIMD架构可提供可观的性能增强。0027 GPU 170中的发展包括对可编程着色器的支持,这些可编程着色器可操纵顶点和纹理、用于减少混叠的过采样和内插技术以及极高精度的色彩空间。这些计算中的很多涉及矩阵和矢量运算。因此,已考虑将GPU 119用于非图形计算中。0028 在一个实施方案中,为了管理存储器,CPU执行分代无用存储单元收集(GC)算法的步骤;见H.Lieberman等,A Re。
22、al-Time Garbage Collector Based on the Lifetime of Objects,Communications of the ACM 26(6),第419-429页。CPU 115在执行分代无用存储单元收集算法之前可利用卡标记技术的预处理步骤,见P.Wilson等,A card-marking scheme for controlling intergenerational references in generation-based GC on stock hardware,SIGPLAN Notices 24(5),第87-92页。为了减少无用存储单元收。
23、集暂停时间,算法可在存储器的一部分而非整个存储器上运行。在一个实施方案中,在存储器中的分配的堆可分成区域。这些区域可称为“代”。在一个实施方案中,每个代对应于其中所包含的数据对象的龄期。在一个实施方案中,无用存储单元收集算法可在仅一个或多个最新代上运行。此技术可减少无用存储单元收集期间的无用存储单元收集暂停时间和高速缓存的利用。0029 位于一个或多个较新代中的第一数据对象可被较旧代中的第二数据对象引用。该较旧代不包括在一个或多个较新代之内。因为仅对这一个或多个较新代执行无用存储单元收集,所以该引用可能丢失。如果发生这样的丢失,则可能错误地确定位于较新代中的第一数据对象为不可获得。经确定为不可。
24、获得的数据对象从存储器中被移除。因此,采取步骤以确定引用较新代中的数据对象的位于较旧代中的任何数据对象的地址。这些步骤作为分说 明 书CN 102985910 A4/13页8代无用存储单元收集技术的一部分来执行,并且随后被进一步描述。0030 在一个实施方案中,每个代被分成子区域。这些子区域可称为“卡”。在一个实施方案中,每个卡对应于其中所包含的数据对象的龄期。在一个实施方案中,无用存储单元收集算法可在位于较新代中的每个卡上运行。无用存储单元收集可仅在较旧代中的标记的卡上运行。在应用程序执行期间,在一个实施方案中,当确定卡包含指向位于一个或多个最新代中的另一个数据对象的数据对象时,可对该卡进行。
25、标记。在另一个实施方案中,当确定卡包含已修改的数据对象时,可对该卡进行标记。可能存在且可考虑其它卡标记条件。在一个实施方案中,在执行无用存储单元收集算法之前执行的预处理步骤可确定标记的卡的地址。随后,在算法中,执行步骤以确定引用较新代中的数据对象的位于较旧代中的任何数据对象的地址。0031 再参照图1,在一个实施方案中,当CPU 115检测到分代GC起始条件时,CPU 115可向GPU 170发送通知。响应于接收到该通知,GPU 170可计算地址。这些地址可对应于较旧代中的卡,这些代可能存储指向较新代中的卡的指针值。这些地址可称为根地址或卡根地址。0032 上述根地址的计算可为可高度并行化的任。
26、务。与CPU相比,GPU 170可更有效地执行可高度并行化的任务。此外,可执行GPU 170所执行的工作,同时CPU 115继续执行一个或多个软件应用程序。因此,执行用于获得根地址的计算步骤不会产生GC暂停。通过消除预处理步骤的GC暂停,可提高总体系统性能。下面将进一步描述用于执行这些预处理步骤的CPU 115与GPU 170之间的协议的更多细节。0033 在一个实施方案中,GPU 170可位于视频卡上。在另一个实施方案中,GPU170可集成于母板上。在又一个实施方案中,处理节点110的所述功能可包括在单个集成电路上。在该实施方案中,CPU 115和GPU 170可为来自不同设计中心的专有核心。
27、。另外,GPU 170现在可能能够经由来自处理节点110的存储器控制器120来直接访问本地存储器114和118以及主存储器,而非经由接口140在芯片外进行存储器访问。该实施方案可减少GPU 170的存储器访问的等待时间,这可转化成更高的性能。0034 继续描述图1中处理节点110的组件,高速缓存子系统114和118可包括被配置成存储数据块的高速缓存存储器。高速缓冲存储器子系统114可集成于相应处理器核心112内。或者,根据需要,高速缓冲存储器子系统114可耦接至后部高速缓存配置或内联配置中的处理器核心114。更进一步地,高速缓冲存储器子系统114可作为高速缓存的一个层次结构来实施。如果需要,更。
28、靠近处理器核心112(在层次结构内)定位的高速缓存可集成于处理器核心112中。在一个实施方案中,高速缓冲存储器子系统114各自均表示L2高速缓存结构,而共享高速缓存子系统118表示L3高速缓存结构。高速缓冲存储器子系统114和共享高速缓冲存储器子系统118均可包括耦接至相应高速缓存控制器的高速缓冲存储器。0035 一般来讲,包处理逻辑116被配置成对在处理节点110耦接到的链路上所接收的控制包作出响应、响应于处理器核心112和/或高速缓冲存储器子系统114来生成控制包、响应于存储器控制器120为服务所选择的事务来生成探测命令和响应包以及通过接口逻辑140将包路由到其它节点(对于这些包,节点11。
29、0为中间节点)。接口逻辑140可包括用以接收包且使这些包与包处理逻辑116所使用的内部时钟同步的逻辑。0036 参照图2,示出了总体进程地址空间200的一个实施方案。现代计算系统使用虚说 明 书CN 102985910 A5/13页9拟存储器,以便在多个进程之间共享较少量的物理存储器。地址空间200可为相连虚拟地址空间,其中虚拟地址和物理地址之间的映射确定了值210-250在物理存储器或磁盘中的位置。多处理器系统上可例如使处理节点110的资源的再现的操作系统可为软件应用程序分配存储器的区域。当编译软件应用程序时,应用程序可包括多个进程。在此实施方案中,每个进程均可在应用程序执行之前拥有其自身的。
30、资源,例如存储器的映像或者指令和数据的实例。另外,每个进程均可包含进程特定信息,例如处理代码、数据且可能处理堆和栈的地址空间;诸如栈指针、通用和浮点寄存器、程序计数器及其它等数据和控制寄存器中的变量;以及诸如stdin、stdout及其它等操作系统描述符,以及诸如处理器所有者和进程权限集合等安全属性。0037 一般而言,对于给定软件应用程序,操作系统的内核为该应用程序设置地址空间200,将该应用程序的代码210加载到存储器中,为该程序设置栈250,分支到应用程序代码210内的给定位置,并且开始应用程序代码210的执行。在一些实施方案中,并非所有代码210和数据220都需在开始执行之前存储于物理。
31、存储器中。软件应用程序如何使用指令集架构(ISA)受编译器与高级别语言的交互的影响。例如,对于软件应用程序的开发,需要知道如何分配变量和为其定址以及需要多少个寄存器来分配变量。在一个实施方案中,静态数据220、栈250和堆230确定数据分配。0038 静态数据220可用于分配静态声明的对象,例如全局变量和常量。大多数这些对象可为阵列。栈250可用于分配标量变量而非阵列,例如当前被调用的函数中的局部变量和参数。栈250可分别在过程调用或返回时增长和收缩。堆230可用于分配通过指针访问的动态对象,并且通常不为标量变量。堆230可用于通过在串/列表操作期间存储临时串或列表的内容来降低复制串和列表内容。
32、的频率。堆不受函数调用的返回的影响。0039 在源代码中示出栈250和堆230的使用的方法的一个简单示例如下:0040 0041 以上示例具有称为Students的类,并且Students类包括两个公共字段:name(名字)和score(分数)。Students类通过Classroom方法来访问。在Classroom方法中,创建了属于类型Students的名为jeff的对象。该对象的名字和分数字段被初始化。在一个说 明 书CN 102985910 A6/13页10实施方案中,在执行该代码示例之后,栈250包含调入例如图2中的条目252j的Classroom方法。对象jeff的条目可包括在图2中。
33、的条目252k中。对象jeff可不指向某个值,而是其可引用堆230中的对象232h。对象232h可存储为一个类或引用类型的Students对象。对象232h的字段234a可存储name字段值,而字段234b可存储score字段值。0042 在Classroom方法已完成执行之后,栈250可使条目252j出栈,因为该条目仅包含关于正在执行或将要执行的代码的信息。因为该示例中未剩下要执行的内容(其可表示整个应用程序的仅一部分),所以栈250可具有被调整为当前指向条目252i而非条目252j的栈指针。另一方面,堆仍然可包含对象232h的字段234a和234b中的数据。0043 随后,可执行无用存储单。
34、元收集算法,以便从堆230中清除未被引用的(未使用)的数据。例如,可从对象232h中移除上述Students类,因为它将不再被使用。在一个实施方案中,无用存储单元收集算法包括以下操作中的一个或多个:扫描系统存储器、标记所有可获得的数据对象(这可能需要递归搜索)、删除经确定为不可用或不可获得的数据对象以及移动数据对象以占用存储器中的相连位置。该最后一个步骤可称为压缩。0044 虽然未在上述示例中使用,但在图2中示出了在堆230中对象232b被对象232g中的指针引用。当执行无用存储单元收集以清除未使用的数据时,通过无用存储单元收集程序算法使有用数据仍保持在存储器中。在一些实施方案中,无用存储单元。
35、收集算法可产生需保留以供以后应用程序使用的数据对象的列表。该列表的产生可从根或根地址开始。根地址可对应于静态数据220中的静态全局指针、栈250中的指针以及由CPU中的存储器地址指向的堆230中的任何数据对象。在GC算法进行递归搜索期间,可确定对象232g为可获得的。在一个示例中,对象232b可由于被对象232g中的指针引用而可为可获得的。可获得的对象可被定义为通过根地址定位的对象或被此前确定为可获得的对象引用的对象。0045 在一个实施方案中,利用了周期性地执行无用存储单元收集的无用存储单元收集算法。一个周期开始于收集程序决定(或被通知)需要回收内存时。例如,当系统内存不足时,可启动无用存储。
36、单元收集。无用存储单元收集算法试图回收无用存储单元或绝不会被应用程序再次访问或改变的对象所使用的内存。可得出语法无用存储单元(程序不可能获得的数据对象)与语义无用存储单元(程序实际上绝不会再次使用的数据对象)之间的一个区别。访问存储器的软件线程可称为存取器(mutator)。已经开发出且可使用许多种不同的无用存储单元收集技术。0046 在一些情况下,无用存储单元收集系统通常经历了各种程度的过多暂停时间的问题。该问题出现在实时执行无用存储单元收集(即与运行于一个或多个处理器上的其它正在执行的程序的执行同时进行)时。例如,假定系统包含多个存取器线程和单个无用存储单元收集线程。如果这些存取器正被用于。
37、多媒体应用程序,则这些线程可能需要以某个速率来提供该应用程序,例如电影。不能承受可观的GC暂停时间的代价的一些关键应用程序的示例包括网上股票交易、电子商务应用程序以及多媒体应用程序(例如电影和视频游戏)。0047 现转向图3,示出了分区的存储器300的一个实施方案。分代无用存储单元收集(GC)可利用存储器中可分成代360a、360b、360c等的分配的堆230。在各个实施方案中,操作系统或其它软件可执行分区,并且确定代360a、360b和360c的大小。此外,代360a、360b和360c中的每个均可分成子区域。这些子区域可称为卡。例如,代360a可分成卡350a、350b、350f等。在一个实施方案中,卡350a、350b和350f中的每个均具有相同的固定大小,说 明 书CN 102985910 A10。