管理在异构环境中的对象集合的技术的制作方法

文档序号:6366819阅读:154来源:国知局
专利名称:管理在异构环境中的对象集合的技术的制作方法
技术领域
本申请涉及垃圾收集,特别是管理在异构环境中的对象集合的技木。
背景技术
许多编程语言提供了用于将不再使用的对象或其它软件组件从存储器中自动清除的各种存储器管理技木。这种形式的存储器管理有时被称为“垃圾收集”。有效的垃圾收集对于为软件的操作保留存储器资源且同时又不会对软件的执行产生不利影响来说是重要的。一些垃圾收集解决方案可能是低效的。其它解决方案不能保持线程安全性,而还有的其它方案不是可缩放的。本发明的改进正是针对这些和其他考虑事项而需要的
发明内容

提供本发明内容以便以简化形式介绍将在以下具体实施方式
中进ー步描述的ー些概念。本发明内容并非g在标识所要求保护的主题的关键特征或必要特征,也不g在用于帮助确定所要求保护的主题的范围。各种实施例通常涉及管理在异构环境中的一个或多个对象的集合。ー些实施例尤其涉及以保持线程安全性的有效、可缩放的方式对ー组对象执行被称为垃圾收集的特殊形式的资源管理。在一个实施例中,例如,ー种技术可以包括创建受管代理,所述代理在存储器中创建受管对象和非受管对象。生成并维护节点集合,其中,节点包括弱引用,该弱引用包括受管对象和非受管对象。维护集合中的节点的计数。当该计数超出阈值时,遍历所述集合,并且当节点中的受管对象已经被收集时,对同一节点中的任意非受管对象执行垃圾收集操作。对其他实施例也予以描述并要求保护。通过阅读下面的详细描述并參考相关联的附图,这些及其他特征和优点将变得显而易见。应该理解,前面的概括说明和下面的详细描述只是说明性的,不会对所要求保护的各方面形成限制。


图I示出了一种在异构环境中的垃圾收集的系统的实施例。图2示出了使用中的存储器的实施例。图3示出垃圾收集序列的ー实施例。图4示出了垃圾收集的第一逻辑流程的ー实施例。图5示出第ニ逻辑流程的实施例。图6示出了第三逻辑流程的ー实施例。图7示出计算体系结构的实施例。图8示出通信体系结构的实施例。
具体实施方式
各种实施例涉及用于在异构环境中执行自动化的存储器管理或垃圾收集操作的存储器管理技术,其中,可以用超出一种的编程语言和/或超出一种的运行时环境来编写软件应用。例如,当应用使用由另ー个实体编写的代码或较旧的老代码时,可以用超出ー种的编程语言来编写该应用。从在本质上来说,一些编程语言在某些功能性或效率方面比其它语言更好,并且应用可以通过对ー个应用内的不同功能使用不同的语言来利用一种编程语言的强项。不同的编程语言不同地处理包括垃圾收集操作的存储器管理。垃圾收集操作通常是指当应用不再使用对象时对正用于保存应用对象的存储器进行清空、释放或解除分配的实践。垃圾收集操作可以防止诸如存储器泄露等错误,其中由于没有销毁对象导致增加的存储器的量变得对应用不可用;以及悬空指针,其中,所指向的对象被销毁但指向该对象的一个或多个指针并没有被销毁并且随后被重新使用从而得到非预期結果。一些语言可能不具有自动垃圾收集的能力,并且因此,程序员需要适当地对不再使用的对象解除存储器分配。一些作为手动垃圾收集语言出现的语言,例如C++,现在却提供了垃圾收集实现。这些语言提供了破坏器操作,该操作在销毁对象时自动释放该对象所 使用的存储器资源。具有垃圾收集环境的ー些语言,例如C#和Java可以使用终结器。终结器类似于破坏器那样操作,但是当对象被销毁时并不被显性调用。取而代之的是,当内部垃圾收集系统释放对象时可以调用终结器。程序员根本不能对何时调用终结器或是否调用终结器进行控制。终结器还具有下述限制仅在ー个线程中操作和对垃圾收集之后持久存储的对象不起作用。为了克服终结器的一些缺陷,例如C#的ー些语言可以使用处置模式,它提供了一种释放由对象使用的资源的方法。处置方法通常必须在代码中由使用该对象的客户机在该客户机完成该对象时手动地被调用。还有其它语言使用引用计数,其中毎次由另ー个对象引用对象时递增计数,而当引用其的对象释放它时减少计数。当引用计数达到零时,可以销毁对象。当使用两种或更多的语言或运行时来编写应用时,需要解决垃圾收集技术中的差异。一个实施例可以为在其自身线程中操作的每个应用会话生成对本地对象的弱引用的链表。弱引用是ー种对对象的引用,例如指针,其中所述引用不保护该对象不会被垃圾收集。当已经有指定数目的引用被添加到链表中时,可以遍历链表以找到任何对不再使用的对象的引用。这些未使用的对象可以被销毁,并且,可以从列表中移除弱引用。可以保留对会话仍在使用的对象的引用。在一个实施例中,到达该数目就遍历列表的引用的指定数目可以被调整以适应下述情况当在遍历之后大部分对象还在使用就增加数目,或当大多数对象是短命的时就减少数目。因此,该实施例可以提高软件操作环境中的性能、可缩放性和线程安全性。图I示出了安排为在异构环境中对对象执行垃圾收集操作的系统100的框图。在一个实施例中,例如,系统100可包括具有诸如设备110和服务器140的多个组件的计算机实现的系统。如此处所使用的,术语“系统”和“组件” g在指代与计算机相关的实体,包括硬件、硬件和软件的组合、软件、或执行中的软件。例如,组件可被实现为在处理器上运行的进程、处理器、硬盘驱动器、多个(光和/或磁存储介质的)存储驱动器、对象、可执行代码、执行的线程、程序、和/或计算机。作为说明,在服务器上运行的应用和服务器两者都可以是组件。一个或多个组件可以驻留在进程和/或执行的线程内,且组件可以视给定实现所需而位于一台计算机上和/或分布在两台或更多的计算机之间。各实施例不限于该上下文。在图I中示出的所述实施例中,设备110和服务器140可被实现为电子设备。电子设备的示例可包括但不限于,移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手机、单向寻呼机、双向寻呼机、消息收发设备、计算机、个人计算机(PC)、台式计算机、膝上型计算机、笔记本计算机、手持式计算机、平板计算机、服务器、服务器阵列或服务器场、web服务器、网络服务器、因特网服务器、工作站、小型计算机、大型计算机、超级计算机、网络设备、web设备、分布式计算系统、多处理器系统、基于处理器的系统、消费电子产品、可编程消费电子产品、电视机、数字电视机、机顶盒、无线接入点、基站、用户站、移动用户中心、无线电网络控制器、路由器、集线器、网关、网桥、交換机、机器、或其组合。虽然图I中示 出的系统100具有按照某种拓扑结构的有限数量的元素,但可以理解,系统100可以视给定实现的需要而包括按照替代拓扑结构的更多或更少元素。在各种实施例中,设备110可以包括应用120。应用120可以包括当被编译和执行或解释时,使得设备110上的诸如处理器的逻辑设备(未示出)执行各种功能的指令。应用120可以由至少两个代码部分组成。代码122和代码124。代码122可以以ー种有时在此被称为“A”的编程语言来编写,而代码124可以以有时在此被称为“B”的不同的编程语言来编写。在一个实施例中,代码122可以被认为是主要代码,而代码124可以被认为是次要代码。例如,代码124可以包括代码122调用或激活但在缺少代码122的情况下不能独立操作的子例程、库文件、内核类或功能性的更小组件。代码122可以提供应用120的通用功能性。在一个实施例中,例如,代码122可以以X++来编写,而代码124可以以C++来编写。应用120可以是许多类型的应用中的任何ー种。在一个实施例中,例如,应用120可以是企业资源计划(ERP)应用。在另ー实施例中,应用120可以是货物管理应用。应用120可以是具有为应用的消费者、许可证持有人、所有人或用户定制的功能性的应用。可以通过改变代码122来定制,例如,通过直接重写某些代码,例如代码122,或通过选择改变代码122的功能性的设置。各实施方式不限于这些示例。代码122可以包括包含垃圾收集器的代码。垃圾收集器可以是由编程语言提供的功能,特别是当该编程语言是受管语言吋。垃圾收集器可以在例如当代码122被编译时被包括在代码122中。垃圾收集器可以对由代码122所创建的诸如对象之类的资源执行垃圾收集。然而,垃圾收集器可能不能在由代码124所创建的资源上直接执行垃圾收集。设备110可以包括计算机可读存储器130。在应用120正在操作的同时,可以使用存储器130。存储器130通常可以是快速存取类型的存储器,例如随机存取存储器。在执行期间,应用120可以创建诸如对象132和对象134之类的ー个或多个对象。ー个对象可以例如在面向对象的编程语言中称为类的实例。对象132、134可以是在应用120操作期间放置在存储器中的其它类型的应用资源。在一个实施例中,设备110可以同时执行应用120的多个实例或“会话”。每个会话可以在单独的处理器线程中操作。在每个会话中生成的对象可以都存储在存储器130中。然而,每个会话可以仅在其线程中的对象上执行垃圾收集。在各实施例中,系统100可包括服务器140。服务器140可以是例如在网络上与设备110通信的一个或多个电子设备。服务器140可以包括应用150。在一个实施例中,应用150可以是在服务器140上操作的应用120的另ー个实例。应用150可以执行其自身的代码122和代码124的版本(未示出)。在执行期间,应用150可以实例化对象并将它们存储在存储器160中,同吋,这些对象正在使用。应用150可以与应用120类似地执行垃圾收集。在一个实施例中,服务器140可以为应用120提供支持服务。应用150可以例如在包括设备110的多个客户机设备中提供数据连续性服务。在一个实施例中,设备110可以作为客户机设备操作。在一个实施例中,应用150可以提供应用120的ー些或所有的功能性,而应用120操作作为到应用150的“哑(dumb)”终端类型的接ロ。服务器140可以主存应用150的许多会话。每个会话可以在其自身的处理器线程中操作。不同会话中生成的对象可以被存储在存储器160中,同时与其它会话 的对象逻辑上隔离。可以在每个会话中与在其它会话中发生的垃圾收集相独立地执行实施例的垃圾收集。图2示出了实施例所使用的存储器200的示例。存储器200可以是存储器130和/或存储器160的代表性实施例。图2可以说明了在应用120和/或应用150的操作时的ー个时刻,以及此时刻的存储器200的使用。存储器200可以包括为处理线程保留的存储块210,以及为分开的处理线程保留的存储块220。块210可以包括执行中的应用120或应用150的会话212。会话212可以包括与提供应用120的功能所需的,例如经编译的指令、变量值、计数器、指针和其它与应用相关的资源。会话212可以包括例如来自代码122 (以语言A编写)的对象A 214。会话212还可以包括例如来自代码124(以语言B编写)的对象B 216。在一个实施例中,对象B 216可以包括本地、受管对象,例如C++对象。应用120可以,例如利用代码124中所编写的内核类。当需要来自代码124的对象时,来自代码122的调用可以实例化新的对象A,该对象是受管代理对象。受管代理对象可以进而调用代码124来实例化来自代码B的所需的对象。受管代理对象可以是对对应的对象B的弱引用。在一个实施例中,可以在块210中为会话212维护集合218。集合218可以包括节点,每个节点包括受管代理对象A和非受管代码B对象,所述受管代理对象A引用所述非受管代码B対象。在一个实施例中,集合218可以是链表,该列表是一系列的节点,其中每个节点指向列表中的下ー节点。集合218还可以用其它数据结构来实现,其中可以从集合中的任意位置移除ー个节点以作为ー个集。各实施方式不限于这些示例。在一个实施例中,在会话212中的应用120的操作期间,可以对对象A中的受管对象进行垃圾收集。当收集受管对象时,在集合218中的其节点中,将受管对象改变为空(NULL)引用。然而,由受管对象所创建的非受管对象仍保留在存储器中。当随后遍历集合218并在受管对象中找到空引用时,可以从存储器中“释放”该节点的对应的非受管对象,并且从该集合中移除该节点。存储器200中的块220可以包括应用120或应用150的不同的会话。块220可以例如是为不同的处理线程保留的存储器块。不同的会话可以包括其自身的操作实例、对象A、对象B和集合。每个会话仅可以对其对象执行垃圾收集,并且可以被保护不受其它会话中发生的垃圾收集影响。
图3A、3B和3C示出在三个不同时间段处的集合300。集合300可以是集合218的代表性实施例。图3A示出了在应用120已经开始执行之后的集合300。在图3A中,已经将三个节点加入到集合300中。每个节点包括例如来自代码A的对象的弱引用受管对象,以及例如来自代码B的对象的非受管的对象。在图3A的时间处,应用120使用了所有三个对象对象I、对象2和对象3。在图3示出的实施例中,集合300被实现为链表。然而,各实施例不限于该示例。图3B示出在比图3A更迟的时间处的集合300。在图3B中,由于受管对象2不再使用,因此其跳出了范围并被垃圾收集,导致其指向空。然而,即使此时受管对象2的对应的非受管对象,对象2,并没有被应用120使用,但它还在存储器中。另外,在图3B中,可以加入受管对象4和对象4的第四节点。出于该示例的目的,在垃圾收集了受管对象2之后再添加第四节点。图3C示出在根据本发明的实施例发生了垃圾收集事件之后的集合300。在所示的实施例中,在图3B中的将第四节点加入到集合300触发了垃圾收集事件。通常,非受管对象的垃圾收集可以在当已经将阈值数目的节点加入到集合300中时发生。在垃圾收集事件中,可以遍历集合300。当遇到在受管对象部分具有空指针的节点时,可以从存储器中释放对应的非受管对象,并从集合中移除该节点。因此,在图3C中,当在遍历期间遇到对象2的节点中的空指针时,从存储器中释放对象2,并且从集合300中移除对象2的节点。在ー个实施例中,从存储器中释放对象可以包括使得存储器中由该对象使用的位可用于被写入。在非受管对象是C++对象的实施例中,非受管对象可以计数引用。分开的计数器可以保持对创建对非受管对象的引用的次数以及对销毁引用的时间的跟踪。当所述引用计数器达到零吋,这可以指示已经不再需要非受管对象,并且可以在对象上调用FreeRefO方法。上述实施例的操作可參考ー个或多个逻辑流程来进ー步描述。可以理解,除非另外指明,否则代表性的逻辑流程不一定要按所呈现的次序或者按任何特定次序来执行。此夕卜,关于逻辑流程描述的各种活动可按串行或并行的方式执行。视给定一组设计和性能约束所需,逻辑流程可使用所述实施例的一个或多个硬件元件和/或软件元件或替换元件来实现。例如,逻辑流程可被实现为供逻辑设备(例如,通用或专用计算机)执行的逻辑(例如,计算机程序指令)。图4示出逻辑流程400的一个实施例。逻辑流程400可表示由在此所描述的ー个或多个实施例所执行的操作中的部分或全部。在图4示出的所示实施例中,在框402,逻辑流程400可执行应用120的代码。例如,可以从经编译的指令中执行或解释应用120或应用150。在一个实施例中,应用120或应用150可以在处理线程中的多个会话之一中执行。在框402的执行期间,应用120或应用150可以以语言A执行指令以实例化对象A。逻辑流程400可以通过来自框404的语言A的新的受管代理对象从语言B实例化对象。例如,这可以在当对以语言A实例化对象的调用是对以语言A的受管代理类的调用时发生。对以语言A的受管代理类的调用可以以语言B实例化对象。受管代理类可以是来自语言A的类,当被调用吋,以语言A实例化受管对象。以语言A实例化受管代理对象可以包括对以语言B实例化受管对象的调用。、
在框406,逻辑流程400可以创建具有对受管对象和其对应的非受管对象的引用的节点。例如,节点可以是具有至少两个分量的数据结构诸如到受管代理对象的指针的引用,以及到由受管代理对象所实例化的非受管对象的第二引用。该节点可以附加地包括其它分量,例如到集合中其它节点的引用。在框408,逻辑流程400可以将节点加入到集合。例如,应用120或应用150可以将节点加入到集合218。如果集合218是链表,则将节点加入到集合可以包括将节点加入到列表的末端,并将先前最后的节点链接到新加入的节点。当将节点加入到集合中时,可以将集合中的节点数目的计数增加I。在框410,逻辑流程400可以检查该计数是否大于阈值N。当计数不大于N吋,逻辑流程400返回框402。延迟垃圾收集直到已经有指定数目的节点被加入到集合中可以防止处理资源被不必要地转用于太过频繁的垃圾收集。在一个实施例中,N可以是可调节的以适应仅需要短时间的对象或需要更长时间的对象的实例。调整N可以有效地改变垃圾收 集之间的时间量,并且可以减少垃圾收集对应用120或应用150的执行上的性能的影响。当计数大于N时,在框412,逻辑流程400可以遍历集合并执行垃圾收集。垃圾收集可以涉及通过非受管对象的受管代理对象来检测非受管对象不再使用,并从存储器中移除不需要的非受管对象。參考图5更详细地描述了框412。如果在垃圾收集期间移除了任何非受管对象,则可以移除集合中的对应的节点,并且,可以根据移除的节点来减少计数。在框402中执行代码时,先前创建的受管对象可以不再被需要,例如当在子例程的执行期间被创建而该子程序随后结束时的受管对象。当非受管对象不再被需要时,逻辑流程400可以在框414中销毁其对应的受管代理対象。销毁受管代理对象可以从存储器中移除受管代理对象。然而,对应的非受管对象保留在存储器中,因为它没有遭受自动垃圾收集。
在一个实施例中,非受管对象可以计数引用。分开的计数器可以保持对创建到非受管对象的引用的次数以及对销毁引用的时间的跟踪。当所述引用计数器达到零时,这可以指示已经不再需要非受管对象,并且逻辑流程400可以垃圾收集对应的受管代理对象。逻辑流程400随后可以在框416中定位集合中对应于被销毁的受管代理对象的节点,并且可以将到被销毁的受管代理对象的引用设定为引用空。随后,逻辑流程400返回以执行框402中的代码。在一个实施例中,框402可以表示应用120或应用150的连续执行,它可以与框414-416和/或框404-412并行地操作。在一个实施例中,框414-416和框404-412可以被包括在应用120或应用150的会话的执行中。图5示出逻辑流程500的实施例。逻辑流程500可以是来自图4的框412的遍历集合和在非受管对象上执行垃圾收集的代表性实施例。在框502中,逻辑流程500可以选择集合中的第一节点。例如,如果诸如集合218的集合是链表或其它排序的集合,可以选择该链表中的第一节点。在未排序的集合中,可以按随机、生存期等等来选择节点。逻辑流程500在框504中可以调查所选的节点以确定受管代理对象引用是否为空。当所选的节点中的受管代理对象引用不为空,非受管的对象还可以在使用,并且逻辑流程500可以从框508处理剩余的节点(如果有的话)。当在框504处所选的节点中的受管代理对象引用为空,逻辑流程500可以在框506处销毁或释放该节点的对应的非受管对象,并且可以从集合中移除该节点。当从集合中移除该节点时,集合中的节点计数可以被递减I以更新该计数。如果在框508处集合中还保留了任何未访问的节点,逻辑流程500可以在框510选择下ー节点,并从框504开始重复逻辑流程。当不再存在未访问的节点时,逻辑流程500在框512中结束。图6示出逻辑流程600的一个实施例。逻辑流程600可表示由在此所描述的ー个或多个实施例所执行的操作中的部分或全部。逻辑流程600可以是对来自图4的逻辑流程400的代表性修改,该修改根据创建的非受管对象的生存期调整了垃圾收集事件之间的时间间隔。在图6示出的说明的实施例中,逻辑流程600可以为N设定ー个值,N是集合中的节点的阈值,高于该值时就在框602实行垃圾收集。例如,正整数N可以最初被设定为某个默认值M,例如150。N还可以被设定为某个整数M和当前计数除以另一整数L中的最大值。框602可以在应用120开始操作或在稍后的时间(例如第一次实例化集合吋)发生。 逻辑流程600可以在框604将节点加入到集合并增加集合中的节点的计数。框604可以与来自图4的框408的操作相类似。逻辑流程600可以在框606将经更新的计数与N的值进行比较。当该计数不大于N时,逻辑流程600可以在框618中继续执行代码,类似于框402。当在框606中计数大于N时,逻辑流程600在框608中可以遍历集合并执行垃圾收集,类似于框412。在框608中的垃圾收集的结束处,如果有任何节点被移除,则集合中的节点的计数可以被更新,在此称为“新计数”。逻辑流程600可以在框610中将新计数与N的比率与值J进行比较。J可以是,例如,在0和I之间的浮点数或百分比。如果仅移除了一小部分或百分比的集合,这可以指示大多数的非受管对象还在使用,并且垃圾收集可以较少频率发生。当(新计数)/N> J,那么,可以在框612中増加N的值。例如,如果J = O. 9,那么,当在垃圾收集之后保留了超过90%的集合,则可以増加N。当(新计数)/N小于J吋,逻辑流程600可以行进到框608。在框612,可以通过许多方法来增加N。例如,可以通过给N增加ー个常数,例如50,来增加N。可以给N增加ー个其当前值的百分比,例如N = N*l. 1,来将N增加10%。在一个实施例中,N可以被选择为ー个常数和(新计数)/H中的最大值,其中H是整数。例如,N可以被设定为150和(新计数)/10中的最大值。当(新计数/N)不大于J时,逻辑流程600可以在框608比较(新计数N)对值K的比率。如果在垃圾收集期间移除了大部分或百分比的集合,这可以指示许多对象是短命的且应该被更加频繁地收集。当(新计数)/N < K,那么,可以在框616中減少N的值。在框616,可以通过许多方法来减少N。例如,可以通过从N中减去ー个常数,例如N = N-50,来减少N。可以给N减少ー个其当前值的百分比,例如N = N*0. 8,来将N减少20%。在一个实施例中,N可以被选择为ー个常数和(新计数)/H中的最小值,其中H是整数。例如,N可以被设定为150和(新计数)/10中的最小值。图7示出适用于实现上述各实施例的示例性计算体系结构700的实施例。计算体系结构700包括各种常见计算元件,如一个或多个处理器、协同处理器、存储器単元、芯片组、控制器、外围设备、接ロ、振荡器、定时设备、视频卡、音频卡、多媒体输入/输出(I/O)组件,等等。然而,各实施方式不限于由计算体系结构700来实现。如图7所示,计算体系结构700包括逻辑设备704、系统存储器706以及系统总线708。逻辑设备704可以是可购得的各种处理器中的任ー种。双微处理器和其它多处理器体系结构也可用作逻辑设备704。系统总线708提供了用于包括但不限于系统存储器706的系统组件到逻辑设备704的接ロ。系统总线708可以是若干种总线结构中的任ー种,这些总线结构还可互连到存储器总线(带有或没有存储器控制器)、外围总线、以及使用各类市场上可购买到的总线体系结构中的任ー种的局部总线。系统存储器706可以包括各种类型的存储器単元,诸如只读存储器(ROM)、随机存取存储器(RAM)、动态RAM (DRAM)、双倍数据率DRAM (DDRAM)、同步DRAM (SDRAM)、静态RAM (SRAM)、可编程ROM (PROM)、可擦除可编程ROM (EPROM)、电可擦除可编程ROM (EEPROM)、闪存、诸如铁电聚合物存储器等聚合物存储器、奥氏存储器、相变或铁电存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、磁卡或光卡、或适于存储信息的任何其他类型的介质。在图7示出的所示实施方式中,系统存储器706可包括非易失性存储器710和/或 易失性存储器712。基本输入/输出系统(BIOS)可以存储在非易失性存储器710中。计算机702可包括各种类型的计算机可读存储介质,包括内置硬盘驱动器(HDD) 714、用于读写可移动磁盘718的磁软盘驱动器(FDD) 716、以及用于读写可移动光盘720 (例如,CD-ROM或DVD)的光盘驱动器722。HDD 714、FDD 716、以及光盘驱动器720可分别由HDD接ロ 724、FDD接ロ 726和光盘驱动器接ロ 728连接到系统总线708。用于外置驱动器实现的HDD接ロ 724可包括通用串行总线(USB)和IEEE 1394接ロ技术中的至少ー种或两者。驱动器及相关联的计算机可读介质提供了对数据、数据结构、计算机可执行指令等的易失性和/或非易失性存储。例如,多个程序模块可存储在驱动器和存储器単元710、712中,包括操作系统730、一个或多个应用程序732、其他程序模块734和程序数据736。一个或多个应用程序732、其他程序模块734、以及程序数据736可包括例如应用120。用户可以通过ー个或多个有线/无线输入设备,例如键盘738和诸如鼠标740等定点设备将命令和信息输入到计算机702中。其他输入设备可包括话筒、红外(IR)遥控器、操纵杆、游戏垫、指示笔、触摸屏等等。这些和其它输入设备通常通过耦合到系统总线708的输入设备接ロ 742连接到逻辑设备704,但也可通过诸如并行端ロ、IEEE 1394串行端ロ、游戏端ロ、USB端ロ、IR接ロ等其它接ロ连接。监视器744或其他类型的显示设备也经由诸如视频适配器746等接ロ连接到系统总线708。除了监视器744之外,计算机通常包括诸如扬声器、打印机等其他外围输出设备。计算机702可使用经由有线和/或无线通信至ー个或多个远程计算机,诸如远程计算机748的逻辑连接在网络化环境中操作。远程计算机748可以是工作站、服务器计算机、路由器、个人计算机、便携式计算机、基于微处理器的娱乐设备、对等设备或其他常见的网络节点,并且通常包括相对于计算机702描述的许多或所有元件,但为简明起见仅示出了存储器/存储设备750。所描绘的逻辑连接包括到局域网(LAN) 752和/或例如广域网(WAN) 754等更大网络的有线/无线连接。这种LAN和WAN连网环境常见于办公室和公司,并且方便了诸如内联网等企业范围计算机网络,所有这些都可连接到例如因特网等全球通信网络。
当在LAN连网环境中使用时,计算机702通过有线和/或无线通信网络接ロ或适配器756连接到LAN 752。适配器756可以方便到LAN 752的有线和/或无线通信,并且还可包括其上设置的用于使用适配器756的无线功能进行通信的无线接入点。当在WAN连网环境中使用时,计算机702可包括调制解调器758,或连接到WAN754上的通信服务器,或具有用于诸如通过因特网等通过WAN 754建立通信的其它装置。或为内置或为外置以及有线和/或无线设备的调制解调器758经由输入设备接ロ 742连接到系统总线708。在联网环境中,相对于计算机702所描绘的程序模块或其部分可以存储在远程存储器/存储设备750中。应该理解,所示网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其他手段。计算机702可操作来使用IEEE 802标准系列来与有线和无线设备或实体进行通信,这些实体例如是在操作上安置成与例如打印机、扫描仪、台式和/或便携式计算机、个人数字助理(PDA)、通信卫星、任何一件与无线可检测标签相关联的设备或位置(例如,电话亭、报亭、休息室)以及电话进行无线通信(例如,IEEE802.7空中调制技木)的无线设备。这至少包括Wi-Fi (即无线保真)、WiMax和蓝牙TM无线技木。由此,通信可以如对于常规网络那样是预定义结构,或者仅仅是至少两个设备之间的自组织(ad hoc)通信。Wi-Fi网络使用称为IEEE 802.7x(a、b、g等等)的无线电技术来提供安全、可靠、快速的无线连接。Wi-Fi网络可用于将计算机彼此连接、连接到因特网以及连接到有线网络(使用IEEE802. 3相关的介质和功能)。图8示出适用于实现上述各实施例的示例性通信体系结构800的框图。通信架构800包括各种常见通信元件,如发射机、接收机、收发机、无线电装置、网络接ロ、基带处理器、天线、放大器、滤波器,等等。然而,各实施方式不限于由通信架构800来实现。如图8所示,通信架构800包括一个或多个客户端802和服务器804。客户端802可实现设备110。服务器804可实现服务器140。客户机802和服务器804可操作地连接到可被用来存储相应客户机802和服务器804本地的信息(如cookie和/或相关联的上下文信息)的一个或多个相应客户机数据存储808和服务器数据存储810。客户机802和服务器804可以使用通信框架806在彼此之间传递信息。通信框架806可以实现任何公知通信技术,如适用于与分组交换网络(例如,诸如因特网等公共网络、诸如企业内联网等专有网络,等等)、电路交换网络(例如,公共交換电话网)、或分组交换网络和电路交换网络的组合(使用合适的网关和转换器)一起使用的技木。客户机802和服务器804可以包括被设计成可与通信框架806进行互操作的各种类型的标准通信元件,如ー个或多个通信接ロ、网络接ロ、网络接ロ卡(NIC)、无线电装置、无线发射机/接收机(收发机)、有线和/或无线通信介质、物理连接器等。作为示例而非限制,通信介质包括有线通信介质和无线通信介质。有线通信介质的示例可以包括导线、电缆、金属线、印刷电路板(PCB)、背板、交换光纤、半导体材料、双绞线、同轴电缆、光纤、所传播的信号等。无线通信介质的示例可以包括声学、射频(RF)频谱、红外和其他无线介质。客户机802和服务器804之间的ー种可能的通信可以是以适用于在两个或更多计算机进程之间传输的数据包的形式。例如,数据包可以包括cookie和/或相关联的上下文信息。各实施例可以使用硬件元件、软件元件或两者的组合来实现。硬件元件的示例可以包括设备、组件、处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感、器等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、存储器単元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。软件元件的示例可以包括软件组件、程序、应用软件、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接ロ、应用程序接ロ(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、文字、值、符号、或其任意組合。确定ー实施例是否使用硬件元件和/或软件元件来实现可视给定实现所需根据任何数量的因素而变化,这些因素如所需计算速率、功率级、耐热性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度以及其它设计或性能約束。—些实施方式可包括制品。制品可包括用于存储逻辑的存储介质。存储介质的示例可包括能够存储电子数据的ー种或多种类型的计算机可读存储介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等。逻辑的示例可包括各种软件元件,诸如软件组件、程序、应用软件、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接ロ、应用程序接ロ(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、文字、值、符号、或其任意組合。例如,在一个实施例中,制品可以存储可执行计算机 程序指令,该指令在由计算机执行时使得该计算机执行根据所描述的各实施方式的方法和/或操作。可执行计算机程序指令可包括任何合适类型的代码,诸如源代码、已编译代码、已解释代码、可执行代码、静态代码、动态代码等。可执行计算机程序指令可根据用于指示计算机执行特定功能的预定义的计算机语言、方式或句法来实现。这些指令可使用任何合适的高级、低级、面向对象、可视、已编译和/或已解释编程语言来实现。一些实施例可使用表述“ー个实施例”和“ー实施例”及其派生词来描述。这些术语意味着结合该实施例描述的特定特征、结构、或特性包括在至少ー个实施例中。出现在说明书中各个地方的短语“在一个实施例”摂不必全都指的是同一实施例。一些实施例可使用表述“耦合的”和“连接的”及其派生词来描述。这些术语不必旨在互为同义词。例如,一些实施例可使用术语“连接的”和/或“耦合的”来描述以指示两个或更多元件彼此有直接的物理或电接触。然而,术语“耦合的”还可以意味着两个或更多元件彼此不直接接触,而仍彼此合作或交互。要强调的是,提供了本公开的摘要以符合37C.F.R. 1.72(b)节要求使读者能快速确定本技术公开的特性的摘要。提交摘要的同时要明白,将不用它来解释或限制权利要求的范围或含义。另外,在前面的详细描述中,可以看到,出于将本公开连成一个整体的目的而将各种特征组合在一起放在单个实施方式中。此公开方法将不被解释为反映所要求保护的实施方式要求比每个权利要求中明确陈述的更多特征的意图。相反,如所附权利要求书所反映,发明性的主题存在于比单个已公开实施方式的所有特征少的特征中。从而,据此将所附权利要求结合进详细描述中,其中每个权利要求独立地代表一个单独的实施方式。在所附权利要求书中,术语“包括”和“其中”分别用作术语“包含”和“其特征在干”的易懂的英文等价词。而且,术语“第一”、“第二”、“第三”等等只用作标记,而不g在将数字要求强加于其对象上。尽管用结构特征和/或方法动作专用的语言描述了本主題,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例 形式公开的。
权利要求
1.一种在计算设备(700)上操作的方法,所述方法包括 创建受管代理对象,所述受管代理对象在存储器(130)中创建一个非受管对象;(404)将一个节点加入到集合(218),其中,所述节点包括对所述受管代理对象的引用以及对所述非受管对象的引用;(406、408) 维护所述集合中的节点数目的计数;(410) 当所述计数超出第一指定数目时,遍历所述集合;(412)以及 当与非受管节点相同的节点中的所述受管代理对象已经被收集时,从所述存储器中释放所述非受管对象(416)。
2.如权利要求I所述的方法,其特征在于,包括 使用受管编程语言创建所述受管代理对象;以及 使用非受管编程语言创建所述非受管对象。
3.如权利要求I或2所述的方法,其特征在于,包括 在遍历所述集合之后,确定从所述集合中移除的节点的百分比;(610、614) 当所述百分比小于第一指定百分比时增加所述第一指定数目“612)以及 当所述百分比大于第二指定百分比时减少所述第一指定数目(616)。
4.如权利要求I到3中任一权利要求所述的方法,其特征在于,包括当所述节点中的非受管对象被从所述存储器中释放时,从所述集合中移除所述节点。(506)
5.一种包括包含指令的计算机可读存储介质(714、718、722)的制品,所述指令在被执行时使得一种系统(100)能够实现如权利要求I到4中的任一项所述的方法。
6.一种装置,包括: 逻辑设备(704); 通信上耦合到所述逻辑设备的存储介质(714、718、722),以及在所述逻辑设备上操作的应用(120),所述应用可用于创建受管代理对象,所述受管代理对象在所述存储介质中创建非受管对象(404),将一个节点加入到指定数目的节点的集合中,所述节点包括对所述受管代理对象的弱引用以及对所述非受管对象的引用(406,408),遍历所述集合以标识其中已经收集了所述受管代理对象的节点(412),以及释放由所标识的节点中的所述非受管对象所占据的所述存储介质(416)。
7.如权利要求6所述的装置,其特征在于,所述应用可用于在遍历所述集合之后确定从所述集合中移除的节点的百分比,当所述百分比小于第一指定百分比时增加所述第一指定数目,当所述百分比大于第二指定百分比时减少所述第一指定数目,其中所述第一指定百分比大于所述第二指定百分比。
8.如权利要求6或7所述的装置,其特征在于,所述应用还可用于通过下述方式之一来增加所述第一指定数目将一个常数加到所述第一指定数目、将所述第一指定数目增加一个所述第一指定数目的当前值的百分比、或将所述第一指定数目设定为常数和保留在所述集合中的节点的数目的一部分之间的最大值。
9.如权利要求6或8所述的装置,其特征在于,所述应用还可用于通过下述方式之一来减少所述第一指定数目从所述第一指定数目中减去一个常数、将所述第一指定数目减少一个所述第一指定数目的当前值的百分比、或将所述第一指定数目设定为常数和保留在所述集合中的节点的数目的一部分之间的最小值。
10.如权利要求6到9中任一权利要求所述的装置,其特征在于,所述逻辑设备在分开的线程中操作所述应用的多个会话,其中,每个会话具有其自身的节点集合并对其自身的受管代理对象执行垃圾收集。全文摘要
本申请涉及管理在异构环境中的对象集合的技术。描述了在一个环境中执行垃圾收集的技术,其中该环境中使用了超过一种的软件编程语言。一种技术可以包括以一种语言创建受管代理对象,该受管代理对象在存储器中以不同的语言创建非受管对象。生成和维护一个节点的集合,其中一个节点包括对受管代理对象的引用以及对非受管对象的引用。维护集合中的节点的计数。当该计数超出阈值时,遍历所述集合,并且当一个节点中的受管代理对象已经被收集时,对同一节点中的任意非受管对象执行垃圾收集。对其他实施例也予以描述并要求保护。
文档编号G06F9/44GK102736917SQ20121007935
公开日2012年10月17日 申请日期2012年3月22日 优先权日2011年3月23日
发明者G·普兰卡特 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1