用于有效资源回收的延迟损毁的制作方法_2

文档序号:9564495阅读:来源:国知局
种子系统的计算机系统1200包括至少一个微处理器子系统(也被称为处理器或中央处理单元(CPU)) 1202。例如,处理器1202可以由单芯片处理器或由多个处理器实现。在一些实施例中,处理器1202是控制计算机系统1200的操作的通用数字处理器。使用从内存1210检索的指令,处理器1202控制输入数据的接收和操纵,以及输出设备(例如,显示器1218)上的数据的输出和显示。在一些实施例中,处理器1202和内存1210被用于提供内存回收功能。
[0034]处理器1202与内存1210双向耦合,所述内存1210可以包括第一主存储器,通常为随机存取存储器(RAM)以及第二主存储区域,通常为只读存储器(ROM)。如本领域中公知的那样,主存储器可以被用作通用存储区域并且用作高速暂存存储器,并且也可以被用于存储输入数据和已处理的数据。除了用于在处理器1202上操作的过程的其他数据和指令外,主存储器还可以以数据对象和文本对象的形式存储编程指令和数据。同样如本领域中公知的,主存储器通常包括基本操作指令、程序代码、数据、以及被处理器1202用来执行其功能的对象(例如,已编程指令)。例如,内存1210可以包括任何合适的计算机可读存储介质(在下文描述),这取决于例如数据访问是否需要是双向的还是单向的。例如,处理器1202还可以在高速缓存存储器(未示出)中直接并且非常迅速地检索和存储频繁需要的数据。
[0035]可移除大容量存储设备1212为计算机系统1200提供额外的数据存储能力,并要么双向(读/写)要么单向(只读)耦合至处理器1202。例如,存储器1212还可以包括计算机可读介质,诸如磁带、闪存、PC卡、便携式大容量存储设备、全息存储设备和其他存储设备。固定大容量存储器1220还可以例如提供额外的数据存储能力。大容量存储器1220的最常见的示例是硬盘驱动器。大容量存储器1212、1220通常存储通常不处于由处理器1202的有效使用的额外的编程指令、数据等等。将理解的是,大容量存储器1212和1220内保持的信息可以以标准方式作为内存1210(例如,RAM)的部分而合并为虚拟内存,如果需要的话。
[0036]除了向处理器1202提供对存储子系统的访问外,总线1214还可以被用于提供对其他子系统和设备的访问。如所示出的,这些可以包括显示监视器1218、网络接口 1216、键盘1204、以及定点设备1206,以及辅助输入/输出设备接口、声卡、扬声器以及根据需要的其他子系统。例如,定点设备1206可以为鼠标、触控笔、轨迹球、或触控板,并且对于与图形用户接口进行交互而言是有用的。
[0037]网络接口 1216允许处理器1202使用如示出的网络连接而耦合至另一计算机、计算机网络、或通讯网络。例如,通过网络接口 1216,处理器1202可以在执行方法/过程步骤的过程中从另一网络接收信息(例如,数据对象或程序指令)或者向另一网络输出信息。通常表示为要在处理器上执行的一系列指令的信息可以从另一网络接收或输出至另一网络。接口卡或相似设备以及由处理器1202实现的(例如,在其上执行/运行的)适当软件可以用于将计算机系统1200连接至外部网络并根据标准协议传输数据。例如,本文公开的多种过程实施例可以在处理器1202上被执行,或者可以连同共享该处理的一部分的远程处理器一起跨诸如因特网、内部网或者局域网的网络被执行。额外的大容量存储设备(未示出)还可以通过网络接口 1216连接至处理器1202。
[0038]辅助I/O设备接口(未示出)可以连同计算机系统1200 —起使用。辅助I/O设备接口可以包括一般和定制的接口,其允许处理器1202向其他设备发送或更通常地从其他设备接收数据,所述其他设备诸如麦克风、触敏显示器、换能器读卡器、磁带读取器、声音或手写识别器、生物计量读取器、摄像机、便携式大容量存储设备以及其他计算机。
[0039]此外,本文公开的各种实施例进一步涉及具有包括用于执行各种计算机实现的操作的程序代码的计算机可读介质的计算机存储产品。计算机可读介质是可以存储之后可以由计算机系统读取的数据的任何数据存储设备。计算机可读介质的示例包括但不限于所有上文所述的介质:诸如硬盘、软盘以及磁带之类的磁性介质;诸如CD-ROM盘之类的光学介质;诸如光盘之类的磁光介质;以及特定配置的硬盘设备,诸如专用集成电路(ASIC)、可编程逻辑设备(PLC)以及ROM和RAM设备。程序代码的示例包括例如由编译器产生的机器代码或者包含可以使用解释器执行的更高级代码(例如,脚本)的文件两者。
[0040]图12中所示的计算机系统仅为适于与本文中公开的多种实施例一起使用的计算机系统的示例。适于此类使用的其他计算机系统可以包括额外的或更少的子系统。此外,总线1214是用于链接子系统的任何互连方案的说明。也可以利用具有不同配置的子系统的其他计算机架构。
[0041]图3是图示了内存回收过程的实施例的流程图。过程300可以在诸如图12的1200的系统上执行。在302处,具有多个对象的过程进行执行。特别地,可经由多个引用访问这些对象。多个引用中的至少一些为暂时引用,并且多个引用中的至少一些为持久引用。在304处,到达回收点,在该点处不存在暂时引用或仅在已知位置处存在暂时引用。下文更详细地描述了如何到达回收点。例如,当该过程的内存使用超过阈值并且该过程重启时,可以到达回收点。在306处,在回收点处,不具有持久引用和暂时引用的对象被损毁。
[0042]图4是图示了具有持久引用和/或暂时引用的内存中的对象的实施例的数据结构图。如所示的,使用虚线(诸如401)画出的边表示暂时引用,并且使用实线(诸如407)画出的边表示持久引用。在该示例中,对象的引用计数仅对引用该对象的持久引用数进行计数。在示出的示例中,暂时引用处于过程栈上。特别地,暂时引用401和402是分别由过程F和G使用的栈上的变量。当完成过程F和G时,从该栈上移除它们各自的暂时引用。相应地,到达回收点,并且回收过程开始回收内存。在回收点处,具有引用计数0且不具有暂时引用的对象404要被回收。对象403由于不具有持久引用所以具有引用计数0,并且不再具有暂时引用,这是因为过程G已完成并且暂时引用402已被移除。这样,对象403将被回收。具有持久引用(并因此引用计数>0)的对象402不被回收。应注意在一些实施例(未示出)中,在回收点处,可允许暂时引用存在于已知位置处。如果存在此类暂时引用,则它们被视为持久引用并且被此类暂时引用所引用的任何对象都不被回收。在下文更完整描述了回收的细节。
[0043]基于重启的回收
[0044]在一些实施例中,通过利用现有的容错系统所需要的过程重启机制(例如,过程管理器、操作系统等)来实现内存回收。图5A是图示了用于使用基于重启的内存回收来到达回收点的过程的实施例的流程图。
[0045]流程500被用于到达回收点并可以被用于实现304过程300。在该示例中,正在执行并经受内存回收的过程具有过程状态。如本文所使用的,过程状态是指在过程的状态下要做的一切,诸如内存状态、栈状态、过程寄存器等。通常,当过程故障时,栈状态和过程寄存器信息丢失。内存状态是指被保留的内存部分,包括堆上的被持久引用的对象。特别地,过程状态包括关于对象以及它们的引用的信息。此外,容错机制(例如,过程管理器、操作系统等)维持过程状态的备份拷贝以处理过程的故障状况,诸如由于软件或硬件错误造成的故障。如将在下文更详细示出的,在本申请的实施例中,过程状态的备份拷贝包括具有持久引用的对象。
[0046]恢复故障的过程的确切状态通常是不可行的,这是因为将每次内存写入从原始过程传输至该过程状态的备份拷贝以使得此类写入不会因为故障而丢失是昂贵的。此外,考虑到如果该故障由软件缺陷导致则在先前实例故障的精确点重启过程很可能导致重复相同的故障,传输确切状态是不可取的。因此,备份拷贝通常表示过程的较早的状态。在一些实施例中,备份拷贝仅具有与内存堆而非栈关联的状态,并且特别地,仅具有持久引用而不具有暂时引用。
[0047]回到图5A,当内存应当被回收时发起流程500。例如,当原始过程自身、过程管理器或监视运行在系统上的过程的任何其他过程检测到由该过程使用的内存量超过阈值并确定应当进行内存回收时,可以发起流程500。在502处,重启正在执行的原始过程。
[0048]图5B是图示了用于重启原始过程的过程的实施例的流程图。在该示例中,用于重启原始过程的过程550可以用于过程500的实现502。在552处,当确定内存回收应当进行时,做出终止请求。在各实施例中,原始过程自身或过程管理器请求操作系统终止该原始过程。在554处,原始过程被终止。在一些实施例中,操作系统终止原始过程,并回收分配给该原始过程的所有内存及其他资源。在556处,利用初始内存状态重启该过程。在一些实施例中,诸如过程管理器的过程重启机制被通知该终止或发现该终止,并作为响应而利用诸如该过程的默认内存状态之类的初始内存状态重启该过程(诸如,将过程载入内存并开始执行)。
[0049]回到图5A,在504处,从备份拷贝恢复重启过程的状态的至少一部分,其具有与原始过程状态相同的具有持久引用的对象但具有与原始过程状态相比更少的仅具有暂时引用的对象或者完全不具有此类对象。图5C是图示了用于从备份拷贝恢复过程状态的过程的实施例的流程图。过程570可以用于实现504过程500。在572处,针对重启过程而重建来自备份拷贝的由持久引用所引用的对象。在一些实施例中,当重建其内存状态时,重启过程从备份拷贝中拷贝具有持久引用的对象并排除仅具有暂时引用的对象。该效果为回收了与仅具有暂时引用的对象关联的内存量。在574处,重启过程代替原始过程。在一些实施例中,重启过程是原始过程的代替(或新的实例)的该过程或过程管理器配合于系统的剩余部分,根据必要发信号至系统的剩余部分。
[0050]图6是图示了基于重启的回收过程中的过程状态的示例的图。连同图6 —起解释图5A-5C的流程。如图6中所示,原始过程状态602具有处于堆上且由来自变量栈的暂时引用614所引用的对象604以及处于堆上并由持久引用616所引用的对象616。过程状态608的备份拷贝包括具有持久引用的一个或多个对象而不包括仅具有暂时引用的对象。在该情况下,内存状态的备份拷贝包括对象606而并不包括对象604。因此,当该过程重启时,从备份拷贝608恢复的新重启过程的存储器状态610也包括对象606而不包括对
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1