专利名称:在区域性存储器系统中创建引用的制作方法
技术领域:
本发明涉及在区域性存储器系统(scoped memory system)中创建引 用。具体地说,本发明涉及在创建引用期间降低处理开销。
背景技术:
区域性存储器区是适于分配和解除分配对象而没有垃圾回收堆的某些 缺点的区域。软件线程可以进入区域性存储器区,然后所述线程做出的所 有对象分配都将在所述区域性存储器区内。所述线程还可以以嵌套的方式 进入多个区域性存储器区。例如,所述线程可以进入成为默认分配区的第 二区域性存储器区。区域性存储器区通过作用域图(scope graph )来组织, 其中每个区域性存储器区都具有父存储器区,所述父存储器区是先前ii^ 的区域性存储器区。第 一 区域性存储器区具有原始区域性存储器区作为其 父存储器区。将针对每个在其中包含多个活动线程的区域性存储器区维护线程计 数。与作用域图相联系的线程计数指示何时可以丢弃区域性存储器区以及 其中分配的任何对象。例如,当关联的线程计数从l递减到O并且区域性 存储器区不是任何其他区域性存储器区的父存储器区时,可以丢弃该区域 性存储器区。通过这种方式,区域性存储器区为否则是垃圾回收的面向对 象的环境(例如,Java, Java是Sun Microsystems的注册商标)中的对象 提供替代的分配空间。使用此类区域性存储器区可以解决由垃圾回收算法 导致的应用执行中的延迟问题,因为可以根据存储器区的线程使用和作用 域图的组织定义的时间来同时丢弃区域性存储器区内的所有对象。第 一 区域性存储器区中的第 一对象可以引用第二区域性存储器区中的于单个区域性存储器区可能变得完全可丢弃,因此有 必要针对不同区域性存储器区中的对象之间的有效和无效引用来实施严格 的规则。对于确保父区域性存储器区的生命周期至少与其子区域性存储器 区的生命周期相同,以便后代存储器区中的对象能够可靠地引用父辈存储 器区中的对象而言,这些规则非常必要。通过这种方式,可以避免虚引用(dangling reference )。 "Efficient Memory-Reference Checks for Real-time Java"("用于实时Java的有效存储器引用检查",Corsaro与Cytron 著,ACM SIGPLAN第38巻,第7期,2003年7月)对此进行了介绍。一个此类规则是区域性存储器区最多具有一个父存储器区。此规则称 为"单父规则,,。单父规则规定不同线程进入区域性存储器区的顺序始终 是相同的,因为线程进入区域性存储器区的顺序定义了作用域图中的区域 性存储器区的结构。进而,在源区域性存储器区中分配的源对象只能引用 同一区域性存储器区或父辈区域性存储器区中的目标对象。父辈区域性存 储器区是线程进入源区域性存储器区之前所进入的存储器区。源区域性存 储器区被称为是相对于目标对象的作用域具有内部作用域。此准则可确保 源对象始终在目标对象之前被解除分配。根据Java实时规范(Bollella等 著,Addison-Wesley, 2000年),创建不满足此准则的引用的尝试必定会 失败。因此,必须在创建对目标对象的新引用时,使用有效的方式来检查 此准则。一种在创建对象间的引用时判定是否满足此准则的方法是遍历作用域 图中的各区域性存储器区。遍历从源区域性存储器区开始,然后通过每个 父区域性存储器区以查找目标区域性存储器区。如果在遍历过程中,在作 用域图内遇到目标区域性存储器区,则可以认为满足此准则,因为目标区 域是源区域的父辈区域。如果遍历到达原始区域性存储器区(作用域图的"根,,),则可以i/w为不满足此准则,因为目标区域性存储器区不是源区域性存储器区的父辈区域。一种替代方法是确定目标对象的区域性存储器区和原始区域性存储器区之间的距离的指数(index)。此距离可以被视为目标区域性存储器区的"深度"。此外,源对象的区域性存储器区和原始区域性存储器区之间的 距离的指数可被视为源区域性存储器区的"深度"。此处的术语深度用于 表明区域性存储器区位于距原始区域性存储器区某一距离的级别处。较深 的区域性存储器区位于作用域图中距原始区域性存储器区更远的级别处。 通过比较这些深度的指数可以判定目标区域性存储器区是否为源区域性存 储器区的父辈区域,因为后代区域始终比父辈区域更深(距原始区域性存 储器区更远)。因此,如果源区域性存储器区比目标区域性存储器区更深, 则满足准则并且可以创建引用。虽然这些方法在应用创建新引用的准则方面4艮有效,但是它们在创建 引用时涉A^时的作用域图遍历。在整个作用域图中扫描目标区域性存储 器区或确定深度指数时,必须执行这些遍历。因此,在没有遍历作用域图所引起的不需要的高处理开销的情况下, 判定是否满足在源区域性存储器区中分配的源对象只能引用父辈区域性存 储器区中的目标对象的规则将是有利的。发明内容相应地,本发明在第一方面提供了一种在区域性存储器系统中创建引 用的方法,所述区域性存储器系统包括区域性存储器区的作用域图,其中 每个区域性存储器区适于在其中分配由软件线程访问的对象并且具有关联 的线程计数来指示是否可丢弃所述区域性存储器区,所述方法包括以下步骤在目标区域性存储器区中分配目标对象;存储与所述目标对象关联的 所述作用域图中的目标区域性存储器区的深度的指数;在源区域性存储器 区中分配源对象;存储与所述源对象关联的所述作用域图中的源区域性存 储器区的深度的指数;响应于通过将与所述源对象关联的指数和与所述目 标对象关联的指数相比较而判定所述源区域性存储器区的深度等于或深于 所述目标区域性存储器区的深度,创建从所述目标对象到所述源对象的引 用。因此,在创建对象时存储与区域性存储器区中分配的对象关联的区域性存储器区的深度的指数,不需要在创建引用时确定区域性存储器区的深 度。通过这种方式,避免了在创建区域性存储器区之间的引用时执行现有 技术中的繁瑣遍历来检查区域性存储器系统是否满足准则。通过这种方式, 降低了创建引用期间的处理开销。优选地,所述创建从所述目标对象到所述源对象的引用的步骤进一步 响应于判定所述目标区域性存储器区和所述源区域性存储器区位于所述作 用域图的公共分支内。相应地,本发明在第二方面提供了一种在区域性存储器系统中创建引 用的装置,所迷区域性存储器系统包括区域性存储器区的作用域图,其中 每个区域性存储器区适于在其中分配由软件线程访问的对象并且具有关联的线程计数来指示是否可丢弃所述区域性存储器区,所述装置包括用于在目标区域性存储器区中分配目标对象的装置;用于存储与所述目标对象关联的所述作用域图中的目标区域性存储器区的深度的指数的装置;用于在源区域性存储器区中分配源对象的装置;用于存储与所述源对象关联的所述作用域图中的源区域性存储器区的深度的指数的装置;用于响应于通 过将与所述源对象关联的指数和与所述目标对象关联的指数相比较而判定所述源区域性存储器区的深度等于或深于所述目标区域性存储器区的深 度,创建从所述目标对象到所述源对象的引用的装置。相应地,本发明在第三方面提供了一种装置,所述装置包括中央处 理单元;存储子系统;输入/输出子系统;将所述中央处理单元、所述存储 子系统、所述输^/输出子系统互连的总线子系统;以及上述装置。相应地,本发明在第四方面提供了一种包括计算机程序代码的计算机 程序元素,当载入计算机系统并在其上执行时,所述计算机程序代码将导 致所述计算机执行上述方法的步骤。
现在仅通过实例的方式参考附图描述本发明的优选实施例,这些附图是图l是适于执行本发明的实施例的操作的计算机系统的方块图;图2是根据本发明的优选实施例的示例性区域性存储器系统的方块图;图3a是根据本发明的优选实施例的区域性存储器区的示例性作用域 图的方块图;图3b是根据本发明的优选实施例的示例性源和目标区域性存储器区 的方块图;图4a是才艮据本发明的优选实施例的分配图3b的目标对象的方法的流 程图;图4b是根据本发明的优选实施例的分配图3b的源对象的方法的流程 图;以及图5是根据本发明的优选实施例的创建从图3b的源对象到目标对象的 引用的方法的流程图。
具体实施方式
图l是适于执行本发明的实施例的操作的计算机系统的方块图。中央 处理单元(CPU) 102通过数据总线108与存储单元104和输入/输出(I/O) 接口 106可通信地连接。存储单元104可以是诸如随才;L^取存储器(RAM) 或非易失性存储设备之类的任何读/写存储设备。非易失性存储设备的实例 包括盘或磁带存^"i殳备。1/0接口 106是到用于输入和/或输出数据的设备 的接口。可与1/0接口 106相连的1/0设备的实例包括键盘、鼠标、显示 器(如监^L器)和网络连接。图2是根据本发明的优选实施例的示例性区域性存储器系统200的方 块图。所述区域性存储器系统是计算机系统的一部分存储单元104的一种 布置,如Java实时规范(BollelIa等著,Addison-Wesley, 2000年)中所 述的区域性存储器系统。在使用中,区域性存储器系统200包括作用域图 202,作用域图202是具有零个或多个诸如区域性存储器区206之类的区域 性存储器区的凝:据结构布置。作用域图202在本领域中通常称为"作用域堆栈",尽管作用域图202的数据结构并不一定是堆栈数据结构。作用域 图202可以实现为有向图数据结构、堆栈数据结构、树形数据结构、链接 列表或任何适于存储零个或多个区域性存储器区的数据结构。区域性存储器区206是存储单元104中的适于分配和引用软件对象(此 后称为对象)的定义存储器区。可以由在区域性存储器区206的上下文中 执行的软件线程在区域性存储器区的已分配对象212部分中分配和访问对 象。区域性存储器区206还包括线程计数210作为在区域性存储器区206 的上下文中执行的软件线程数的计数。线程通过显式进入区域性存储器区 (例如,通过调用应用编程接口功能),在区域性存储器区206的上下文 中执行。 一旦线程进入区域性存储器区206,便会在区域性存储器区206 内进行对象分配,除非线程明确地在其他位置(例如在常规堆或另一区域 性存储器区中)进行分配。区域性存储器区206还包括包含对父区域性存储器区的引用的父字段 208。如上所述,区域性存储器区最多具有一个父存储器区。通过其间的父 级关系定义的区域性存储器区的布置定义了作用域图202。初始没有特定 父存储器区的区域性存储器区将通过占位符引用原始区域性存储器区204 作为其父存储器区。图3a是根据本发明的优选实施例的区域性存储器区300的示例性作用 域图350的方块图。作用域图350示出了在区域性存储器系统中执行的软 件线程的行为所导致的可能区域性存储器区布置。软件线程初始进入区域 性存储器区A 302并且区域性存储器区A 302使原始区域性存储器区300 作为其父存储器区。接着,软件线程进入区域性存储器区B 304并且区域 性存储器区B 304使区域性存储器区A 302作为其父存储器区。然后,软 件线程进入区域性存储器区C 306并且区域性存储器区C 306使区域性存 储器区B 304作为其父存储器区。软件线程还进入第二区域性存储器区D 308并且区域性存储器区D 308也使区域性存储器区B 304作为其父存储 器区。例如,由于多个线程在区域性存储器系统中执行,因此作用域图350 中可能出现此分支。进而, 一个或多个线程进入区域性存储器区E 310和F312,这两个区域都使区域性存储器区C306作为它们的父存储器区。因此,图3a仅通过实例的方式示出了在执行期间i^v区域性存储器区 的软件线程的行为所导致的可能作用域图350布置。应指出的是,每个区 域性存储器区都可以被视为在通过作用域图350距原始区域性存储器区 300特定距离处对齐。例如,区域性存储器区A 302位于与原始区域性存 储器区最接近的级别320。区域性存储器区B304位于级别322。区域性存 储器区C 306和D 308均位于级别324,并且区域性存储器区E 310和F 312 均位于级别326。这些级别320到326可祐^L为在作用域图350中的"深 度"并代表区域性存储器区距原始区域性存储器区300的距离。级别320 (以及区域性存储器区A 302)是作用域图中深度最小的级别,因为它最 接近原始区域性存储器区300,而级别326 (以及区域性存储器区E 310和 F312)是最深的级别。对于上述区域性存储器系统的操作,可以根据区域性存储器区在作用 域图350中的深度,来说明在源区域性存储器区中分配的源对象只能引用 在同一或父辈区域性存储器区中的目标对象的准则。在这些方面,准则是 当包含源对象的源区域性存储器区的深度等于或深于包含目标对象的目标 区域性存储器区的深度时,源对象才能引用目标对象。图3b是根据本发明的优选实施例的示例性源356和目标370区域性存 储器区的方块图。源区域性存储器区356包括具有对象数据366和深度指 数368的源对象364。对象数据366是存储在面向对象的系统中的实例化 对象内的数据,并且可以包括变量和软件方法。深度指数368是源区域性 存储器区356在作用域图中的深度的指数。图3b还示出了与源区域性存储 器区356在同一作用域图中的目标区域性存储器区370。目标区域性存储 器区370包括具有对象数据388和深度指数382的目标对象378。可以在分配对象364和378时分别确定深度指数368和382。可以进 行这种早期确定,因为区域性存储器系统的单父规则要求区域性存储器区 被丢弃之前在作用域图中保持同一位置,所以在该区域中分配的对象的寿 命期间,区域性存储器区的深度不能改变。例如,源区域性存储器区356的深度在源对象364的寿命期间不能改变。因此,通过这种方式,可以作 为对象364和376的对象分配过程的一部分,确定源区域性存储器区356 和目标区域性存储器区370的深度。因此,不必在后期阶段(例如在创建 引用时)进行此类繁瑣的确定。图4a是根据本发明的优选实施例的分配图3b的目标对象378的方法 的流程图。初始地,在步骤402,在目标区域性存储器区370中分配目标 对象378。接着,在步骤404,确定目标区域性存储器区370的深度。 一种 确定的方式是通过从目标区域性存储器区370开始分析作用域图,遍历各 个父区域性存储器区,直到到达原始区域性存储器区354。在每个区域性 存储器区,可以递增目标区域性存储器区370的深度382的指数。因此, 通过这种方式,较大的深度指数382值可以对应于较深的区域性存储器区。 还可以使用表示区域性存储器区深度的替代布置,例如使较小的深度指数 382值代表较深的区域性存储器区。接着,在步骤406,将目标区域性存储 器区370的深度存储为与目标对象378关联的深度指数382。深度指数382 可以存储在目标对象378内,也可以替代地存储在目标对象378之外,但 是与目标对象378关联。图4b是根据本发明的优选实施例的分配图3b的源对象364的方法的 流程图。图4b中针对源对象364的步骤大部分与图4a中针对目标对象378 的上述步骤对应。图5是根据本发明的优选实施例的创建从图3b的源对象364到目标对 象378的引用的方法的流程图。如本领域7>知的,这对应于将对目标对象 378的引用存储在源对象364内。初始地,在步骤502,所述方法判定目标 对象378的深度指数382是否与源对象364的深度指数368相同。如果深 度相同,则所述方法继续到步骤506,否则,所述方法检查深度指数368 和382是否指示源区域性存储器区356深于目标区域性存储器区370。如 果源区域性存储器区比目标区域性存储器区更深,则所述方法继续到步骤 506。在步骤506,所述方法允许创建从源对象364到目标对象378的引用。 备选地,如果步骤504判定源区域性存储器区不深于目标区域性存储器区,则所述方法继续到步骤508,其中将阻止创建引用。步骤506备选地可以包括其他步骤,例如,在允许创建引用之前判定 目标区域性存储器区370是源区域性存储器区356的父辈(起源)的步骤。 当源区域性存储器区和目标区域性存储器区位于作用域图的公共分支内 (其中作用域图具有分支)时,可以确定源区域性存储器区和目标区域性存储器区之间的这种父辈关系。例如,参考图3a,区域性存储器区F312 和C 306位于作用域图350的7>共分支内,因为它们之间具有父辈关系(区 域性存储器区C 306是区域性存储器区F 312的父辈)。但是,区域性存 储器区F 312和区域性存储器区D 308不在公共分支内,因为区域性存储 器区D308不是区域性存储器区F312的父辈,反之亦然。通过在创建对象时存储与区域性存储器区中分配的对象关联的区域性 存储器区的深度的指数,不必在创建引用时确定区域性存储器区的深度。 通过这种方式,避免了在创建区域性存储器区之间的引用时执行现有技术 中的繁瑣遍历来检查区域性存储器系统是否满足准则。只要可以使用软件控制的可编程处理设备(如微处理器、数字信号处 理器或其他处理i殳备、数据处理装置或系统)至少部分地实现所述的本发 明的实施例,^t可理解能够将配置可编程i殳备、装置或系统以实现上述方 法的计算积i程序构想为本发明的一部分。例如,所述计算才几程序可以实现为源代码,可以经过编译以便在处理设备、装置或系统上实现,或被实现 为目标代码。适当地,所述计算机程序能够以机器或设备可读的形式存储在承载介 质上,例如存储在固态存储器、诸如磁盘和磁带之类的磁存储器、诸如光 盘或数字多功能盘之类的光或磁光可读存储器上,并且处理设备使用程序 或程序的一部分进行配置来执行操作。可以从远程源提供计算机程序,所 述计算机程序包含在诸如电子信号、射频载波或光载波之类的通信介质中。此类承载介质也可以被视为为本发明的各方面。本领域的技术人员将理解,尽管根据正在使用的实例实施例描述了本 发明,但是本发明并不限于此,可以存在许多落入本发明的范围之内的可能变型和修改。本发明的范围包括此处所公开的任何新颖特征或特征的组合。申请人 在此指出,在申请提出期间或从其提交的任何此类进一步申请期间,可以 构想包括此类特征或特征组合的新权利要求。具体地说,参考所附权利要 求,从属权利要求的特征可以与独立权利要求的特征相组合,并且各个独 立权利要求的特征可以按照任何适当的方式组合,并不仅限于权利要求中 列出的特定组合。为了避免疑义,此处在说明书和权利要求中使用的术语"包括"不应 被解释为"仅由...组成"。
权利要求
1.一种在区域性存储器系统中创建引用的方法,所述区域性存储器系统包括区域性存储器区的作用域图,其中每个区域性存储器区适于在其中分配由软件线程访问的对象并且具有关联的线程计数来指示是否可丢弃所述区域性存储器区,所述方法包括以下步骤在目标区域性存储器区中分配目标对象;存储与所述目标对象关联的所述作用域图中的目标区域性存储器区的深度的指数;在源区域性存储器区中分配源对象;存储与所述源对象关联的所述作用域图中的源区域性存储器区的深度的指数;响应于通过将与所述源对象关联的指数和与所述目标对象关联的指数相比较而判定所述源区域性存储器区的深度等于或深于所述目标区域性存储器区的深度,创建从所述目标对象到所述源对象的引用。
2. 根据权利要求l的方法,其中所述创建从所述目标对象到所述源对 象的引用的步骤进一步响应于判定所述目标区域性存储器区和所述源区域 性存储器区位于所述作用域图的公共分支内。
3. —种在区域性存储器系统中创建引用的装置,所述区域性存储器系统包括区域性存储器区的作用域图,其中每个区域性存储器区适于在其中分配由软件线程访问的对象并且具有关联的线程计数来指示是否可丢弃所述区域性存储器区,所述装置包括用于在目标区域性存储器区中分配目标对象的装置; 用于存储与所述目标对象关联的所述作用域图中的目标区域性存储器区的深度的指数的装置;用于在源区域性存储器区中分配源对象的装置;用于存储与所述源对象关联的所述作用域图中的源区域性存储器区的 深度的指数的装置;用于响应于通过将与所述源对象关联的指数和与所述目标对象关联的 指数相比较而判定所述源区域性存储器区的深度等于或深于所述目标区域 性存储器区的深度,创建从所述目标对象到所述源对象的引用的装置。
4. 根据权利要求3的装置,其中创建从所述目标对象到所述源对象的 引用的装置进一步响应于用于判定所述目标区域性存储器区和所述源区域 性存储器区位于所述作用域图的公共分支内的装置。
5. —种装置,所述装置包括中央处理单元;存储子系统;输入/输出 子系统;将所述中央处理单元、所述存储子系统、所述输^v/输出子系统互 连的总线子系统,以及如权利要求3或4中的任一权利要求所述的装置。
6. —种包括计算才;^呈序代码的计算;t/i4呈序元素,当载入计算机系统并在其上执行时,所述计算机程序代码将导致所述计算机执行如权利要求1 或2中的任一权利要求所述的方法的步骤。
全文摘要
一种在区域性存储器系统中创建引用的方法,所述区域性存储器系统包括区域性存储器区的作用域图,其中每个区域性存储器区适于在其中分配由软件线程访问的对象并且具有关联的线程计数来指示是否可丢弃所述区域性存储器区,所述方法包括以下步骤在目标区域性存储器区中分配目标对象;存储与所述目标对象关联的所述作用域图中的目标区域性存储器区的深度的指数;在源区域性存储器区中分配源对象;存储与所述源对象关联的所述作用域图中的源区域性存储器区的深度的指数;响应于通过将与所述源对象关联的指数和与所述目标对象关联的指数相比较而判定所述源区域性存储器区的深度等于或深于所述目标区域性存储器区的深度,创建从所述目标对象到所述源对象的引用。
文档编号G06F12/02GK101405703SQ200780010037
公开日2009年4月8日 申请日期2007年4月24日 优先权日2006年4月28日
发明者A·约翰逊 申请人:国际商业机器公司