硬件辅助的垃圾收集的制作方法

文档序号:15739331发布日期:2018-10-23 22:01阅读:217来源:国知局
硬件辅助的垃圾收集的制作方法

诸如移动设备和/或桌面设备之类的计算设备通常在一段时间内执行各种应用。这些应用可以基于使用一种或多种编程语言创建的源代码。使用高级语言(如Java或JavaScript)时,自动存储器管理通常是语言和/或运行时环境的一部分。例如,用于执行应用的虚拟机通常提供这样的存储器管理。

在应用执行期间通常出现的一个问题是垃圾收集问题。垃圾收集是确定哪个存储器当前未使用且可安全释放或重新分配以供一个或多个应用使用的过程。随着应用变得越来越大,垃圾收集可能会花费越来越多的处理周期和执行带宽。用于执行垃圾收集的一种当前方法包括遍历或检查先前由应用使用或分配的所有对象。垃圾收集机制可以标记应用或其他对象仍可访问或引用的任何对象。然后,垃圾收集机制可以删除尚未标记的对象,使得与这些未标记对象相关联的存储器空间可以被释放或重新分配用于其他用途。



技术实现要素:

在一个示例中,一种方法包括:由计算设备的至少一个处理器执行的软件模块接收存储器写入信息,所述存储器写入信息指示所述至少一个处理器从先前的时间点起尚未将任何数据写入所述计算设备的存储器的存储区域,其中,所述存储器写入信息与所述存储区域相关联并且基于由所述计算设备的管理单元生成的信息,其中,所述管理单元包括所述至少一个处理器的硬件组件,所述硬件组件被配置为管理从所述存储器检索的数据和写入所述存储器的数据,以及其中,所述存储区域包括存储在所述存储器中的第一对象。在这个示例中,所述方法还包括:由所述软件模块并且基于所述存储器写入信息确定抑制(refrain)对存储在所述存储器中并由所述第一对象引用的第二对象执行垃圾收集。

在另一示例中,一种计算机可读存储设备存储指令,所述指令在被执行时使得计算设备的至少一个处理器执行包括以下操作的操作:接收存储器写入信息,所述存储器写入信息指示所述至少一个处理器自从先前的时间点以来没有将任何数据写入所述计算设备的存储器的存储区域,其中,所述存储器写入信息与所述存储区域相关联并且基于由所述计算设备的管理单元生成的信息,其中,所述管理单元包括所述至少一个处理器的硬件组件,所述硬件组件被配置为管理从所述存储器检索的数据和写入所述存储器的数据,以及其中,所述存储区域包括存储在所述存储器中的第一对象。在这个示例中,所述操作还包括:基于所述存储器写入信息,确定抑制对在所述存储器中存储并且由所述第一对象引用的第二对象执行垃圾收集。

在另一示例中,一种计算设备包括:存储器;以及至少一个处理器,其通信地耦合到所述存储器。所述至少一个处理器包括管理单元,所述管理单元包括硬件组件,所述硬件组件被配置为管理从所述存储器检索的数据和写入所述存储器的数据。所述存储器被配置为存储指令,所述指令当被执行时使得所述至少一个处理器接收存储器写入信息,所述存储器写入信息指示所述至少一个处理器自从先前的时间点以来没有将任何数据写入所述计算设备的存储器的存储区域,其中,所述存储器写入信息与所述存储区域相关联并且基于由所述计算设备的管理单元生成的信息,并且其中,所述存储区域包括存储在所述存储器中的第一对象。在这个示例中,所述指令当被执行时进一步使得所述至少一个处理器基于所述存储器写入信息,确定抑制对存储在所述存储器中并由所述第一对象引用的第二对象执行垃圾收集。

在各种示例中,本文描述的对象可以被提供或包括数据。该数据可以存储在存储器中。

在附图和以下描述中阐述了一个或多个示例的细节。根据说明书和附图以及权利要求,本公开的其他特征、目的和优点将是显而易见的。

附图说明

图1是示出根据本公开的一个或多个方面的示例计算设备的框图,该示例计算设备被配置为至少部分地基于由管理单元生成的信息来确定是否对一个或多个对象执行垃圾收集。

图2是示出根据本公开的一个或多个方面的被配置为确定是否对一个或多个对象执行垃圾收集的计算设备的另一示例的框图。

图3是示出根据本公开的一个或多个方面的诸如图1和/或图2中所示的计算设备的计算设备的示例的框图。

图4是示出根据本公开的一个或多个方面的从内核接收位域(bitfield)信息以确定是否对一个或多个对象执行垃圾收集的虚拟机的示例的框图。

图5是说明根据本公开的一个或多个方面的在位域信息中包括的位与虚拟存储器空间的相应虚拟页之间的示例关联的概念图。

图6是说明根据本公开的一个或多个方面的虚拟存储器空间的虚拟页到物理存储器的相应物理页的示例映射的概念图。

图7是说明根据本公开的一个或多个方面的存储在虚拟存储器空间的虚拟页中的对象的示例布局的概念图。

图8是示出根据本公开的一个或多个方面的计算设备(例如图1、图2和/或图3中所示的计算设备)的示例操作的流程图。

具体实施方式

本公开中描述的示例涉及用于执行硬件辅助的垃圾收集的技术。垃圾收集是确定哪个存储器当前未使用且可安全释放或重新分配以供一个或多个应用使用的过程。目前存在用于执行垃圾收集的某些方法,但是这些方法通常在没有硬件辅助的软件中实现。如上所述,用于执行垃圾收集的一种当前方法包括在执行垃圾收集的时间时遍历或检查先前由应用使用或分配的所有对象。这些对象存储在存储器中。垃圾收集机制标记应用或其他对象可访问或引用的任何对象。垃圾收集机制删除未标记的对象,使得与这些未标记对象相关联的存储器空间可以被释放或重新分配用于其他用途。然而,每次执行垃圾收集时执行该过程可能非常耗时,因为每次执行垃圾收集时(例如,在每个垃圾收集迭代的各种不同时间点),该过程需要完整地发生,并且需要检查所有对象,例如包括父对象和子对象的概念对象树中的对象。

垃圾收集的另一种方法建立在该第一种方法的基础上,但是进一步跟踪自上次执行垃圾收集以来已经写入哪些对象,使得先前对象的遍历以识别哪些对象可到达的部分可以用于当前的垃圾收集过程。例如,如果自上次执行垃圾收集以来尚未写入存储特定对象的存储器空间,使得特定对象未被有效触摸,则可以安全地假设该特定对象仍然引用上次执行垃圾收集时先前引用的任何其他对象。然而,这种垃圾收集方法在处理周期和性能方面产生额外的运行时成本,因为软件应用必须保存与自上次垃圾收集过程以来在存储器中触摸了哪些对象相关联的附加状态信息。

本公开的技术涉及用于执行硬件辅助的垃圾收集的技术。使用这些技术,软件模块可以利用由硬件组件生成并存储在存储器中的某些状态信息,以确定自上次执行垃圾收集以来存储在存储器中哪些对象的已经被触摸。基于该确定,这些软件模块可能能够确定某些对象(例如,父对象的子对象)是否在当前垃圾收集过程中要被垃圾收集。在各种示例中,如本文所述,如果已经写入了存储对象的存储器空间,则触摸存储在存储器中的对象。在各种示例中,如本文中还描述的,垃圾收集指的是下述过程:其中,当前未被应用或存储在存储器中的至少一个其他对象引用的存储器空间被释放并且可用于重新分配。可以在垃圾收集过程期间删除被垃圾收集的对象,并且从而释放存储该对象的存储器空间以供其他使用。

图1是示出根据本公开的一个或多个方面的示例计算设备100的框图,该示例计算设备100被配置为至少部分地基于由管理单元122生成的信息来确定是否对一个或多个对象执行垃圾收集。计算设备100的示例可以包括但不限于移动电话、平板电脑、个人数字助理(PDA)、膝上型计算机、便携式游戏设备、便携式媒体播放器、电子书阅读器、可穿戴计算设备(例如,手表、安装在腕上的计算设备、头戴式计算设备)、电视平台或其他类型的计算设备。如下面将进一步详细描述的,计算设备100可以是或包括一个或多个处理器120。

如图1所示,在一些示例中,计算设备100可以包括显示设备129(例如,存在敏感显示设备)。显示设备129可以具有输入组件和/或输出组件。例如,显示设备102可以包括存在敏感的输入组件,例如电阻式触摸屏、表面声波触摸屏、电容式触摸屏、投射电容式触摸屏、压敏屏幕、声学脉冲识别触摸屏或其他存在敏感技术。显示设备129可以包括显示组件,例如液晶显示器(LCD)、点阵显示器、发光二极管(LED)显示器、阴极射线管(CRT)显示器、有机发光二极管(OLED)显示器、电子墨水、投影仪或能够向计算设备100的用户输出信息的类似的单色或彩色显示器。

作为一个示例,计算设备100的显示设备129可以包括存在敏感显示设备,例如触摸屏。显示设备129可以通过检测来自计算设备100的用户的一个或多个手势(例如,用户用手指或触笔(stylus pen)触摸或指向显示设备129的一个或多个位置)来接收触觉输入的指示。显示设备129可以在图形用户界面中呈现输出,该输出可以与计算设备100提供的功能相关联。例如,显示设备129可以呈现与在计算设备100处执行的一个或多个软件模块116和/或操作系统114相关联的各种图形用户界面。用户可以与相应图形用户界面交互以使计算设备100执行与软件模块116和/或操作系统114的对应功能相关的操作。显示设备129通信地耦合到处理器120和存储器103。

在一些示例中,计算设备100可以包括一个或多个通信单元,其可以向一个或多个其他计算设备发送数据和/或从一个或多个其他计算设备接收数据。在一些示例中,这些通信单元支持无线和/或有线通信,并且可以使用任何各种通信协议发送和/或接收数据。

如图1所示,计算设备120包括一个或多个处理器120和存储器103。如下面将进一步详细描述的,处理器120包括管理单元122。存储器103包括一个或多个存储器存储区域104(例如,一个或多个页,如图2所示)。存储器存储区域104存储一个或多个对象106A-106N(统称为“对象106”)。这些对象可以由一个或多个进程(例如通过软件模块116和/或操作系统114)创建或以其他方式使用。

操作系统114可以包括存储在存储器103中的一个或多个软件模块,并且可以包括由处理器120执行的一个或多个指令和/或程序。一个或多个软件模块116也可以存储在存储器中,并且还可以包括由处理器120执行的一个或多个指令和/或程序。例如,软件模块116可以包括一个或多个软件应用(例如,电子邮件应用、地图或导航应用、日历应用、消息应用、社交媒体应用、旅行应用、游戏应用、股票应用、天气应用,这里仅举几个非限制性示例)。在一些示例中,软件模块116可以包括一个或多个虚拟机。如图1所示,软件模块116可以包括一个或多个垃圾收集器118。

存储器103还包括存储器写入信息102。存储器写入信息102可以指示处理器120自先前时间点以来是否已将任何数据写入存储器存储区域104中的一个或多个。例如,存储器写入信息102可以指示在执行操作系统114和/或软件模块116期间处理器120是否已经自上次存储器存储的垃圾收集(例如,通过垃圾收集器118中的一个或多个)以来将任何数据写入到一个或多个存储器存储区域104中。

在各种示例中,存储器写入信息102基于在操作系统114和/或软件模块116的执行期间由处理器120的管理单元122生成的信息(例如,写入信息112A-112N,统称为“写入信息112”,如下所述)。管理单元122可以包括处理器120的硬件组件,其被配置为管理从存储器103检索的数据和写入存储器103的数据。操作系统114可以例如根据软件模块116的请求向软件模块116提供存储器写入信息102。然后,软件模块116可以基于存储器写入信息102确定软件模块116是否将对于任何对象106执行垃圾收集(例如,使用垃圾收集器118)。

如图1所示,存储器103可以可选地存储表108。表108可以包括一个或多个存储器存储区域表条目110A-110N(统称为“表条目110”)。每个表条目110包括相应写入信息,该相应写入信息可以被包括或以其他方式被存储在存储器写入信息102中。例如,如图所示,存储器存储区域表条目110A可以包括写入信息112A,并且存储器存储区域表条目110N可以包括写入信息112N。

在各种示例中,存储器存储区域表条目110的每个条目可以与存储器存储区域104的存储区域相关联(例如,如图2所示,当表108包括页表时,每个页表条目可以与存储器的一页相关联)。管理单元122可以使用表108来识别一个或多个存储器存储区域104,以便在操作系统114和/或软件模块116的执行期间使用。例如,每个存储器存储区域表条目110可以将虚拟地址映射至存储器存储区域104内的物理地址,如将在图2所示的示例的场境(context)内更详细地描述的。

包括在每个存储器存储区域表条目110内的写入信息指示处理器120是否已经从先前时间点向存储器存储区域104的相应存储区域写入任何数据。管理单元122可以在操作系统114和/或软件模块116的执行期间生成写入信息112。每个对象106可以存储在一个或多个存储器存储区域104中。用于存储器存储区域表条目110的写入信息112可以包括在存储器写入信息102中。例如,在某些示例中,在执行期间的不同点,操作系统114可以在存储器写入信息102内检索并存储写入信息112的至少一部分。操作系统114可以例如根据软件模块116的请求向软件模块116提供存储器写入信息102。

作为一个示例,存储器写入信息102可以指示处理器120(例如,在执行操作系统114和/或软件模块116期间)从先前时间点起没有将任何数据写入存储区域104的特定存储区域,先前时间点例如是先前由一个或多个垃圾收集器118执行垃圾收集的先前时间。特定存储区域可以包括例如对象106A。基于存储器写入信息102的该指示,软件模块116中的一个或多个可以确定(例如,使用垃圾收集器118中的一个或多个)抑制对另一个对象(例如,对象106N)执行垃圾收集,其中,对象106N在该非限制性示例中可以由对象106A引用。在该示例中,假定在上次对存储器存储区域104执行垃圾收集之后没有写入或改变特定存储区域,假定对象106A包括在特定存储区域中,并且假定对象106A引用对象106N,垃圾收集器118可以确定抑制对于对象106N执行垃圾收集。在某些情况下,在进一步确定对象106A当前是可到达的(例如,当前由对象106的另一个对象或者由处理器120可执行的进程(例如操作系统114和/或软件模块116)引用)时,垃圾收集器118可以确定抑制执行这种垃圾收集。

实际上,在该示例中,垃圾收集器118可以确定抑制对于由对象106A引用的一组不同对象中的任何一个执行垃圾收集。在这种情况下,对象106A可以被称为父对象,并且对象106A引用的对象可以被称为对象106A的子对象。以这种方式,垃圾收集器118可以利用由管理单元122提供的存储器写入信息102来确定自从先前的垃圾收集过程以来,由对象106A先前引用的任何对象继续被对象106A引用,并且在当前的垃圾收集过程期间,这些子对象都不会被垃圾收集。该确定可以提高垃圾收集器118执行的过程的效率,因为它们不一定需要单独遍历这些子对象中的每个以确定它们是否被垃圾收集。当存在对象106A的大量子对象(例如,对象的大列表)时,流线化的确定也可能特别有用。

图2是示出根据本公开的一个或多个方面的被配置为确定是否对一个或多个对象执行垃圾收集的计算设备200的另一示例的框图。计算设备200是图1中所示的计算设备100的一个非限制性示例。在该示例中,计算设备200包括一个或多个处理器220。处理器220包括存储器管理单元(MMU)222。计算设备200的存储器203包括一个或多个页204、页表208、操作系统214和虚拟机216。(MMU 222是图1中所示的管理单元122的一个示例,页204是存储器存储区域104的一个示例,页表208是表108的一个示例,操作系统214是操作系统114的一个示例,并且虚拟机216是软件模块116之一的示例。)

MMU 222可以包括处理器220的硬件组件,其被配置为管理从存储器203检索的数据和写入存储器203的数据。MMU 222被配置为提供从存储器203内的虚拟地址到物理地址的映射。物理地址是存储器203使用的地址(例如,在物理随机存取存储器(RAM)内),而虚拟地址是由处理器220(例如通过操作系统214和/或虚拟机216)执行的特定处理所使用的地址。MMU 222使用页表208将虚拟地址转换为物理地址。

页204包括存储器203内的一个或多个物理页。在一个非限制性示例中,页204的每页大小为4096字节。页204存储一个或多个对象206A-206N(统称为“对象206”)。对象206的每个对象存储在页206中的一个或多个中。例如,对象206的任何给定对象可以完全存储在页204的一页中,或者它可以跨越多个页。

页表208包括一个或多个页表条目210A-210N(统称为“页表条目210”)。每个页表条目与页204的页相关联,并且包括相应地址和脏位(dirty bit)。例如,如图2所示,页表条目210A包括地址211A和脏位212A,而页表条目210N包括地址211N和脏位212N。

MMU 222可以使用页表208的页表条目来将虚拟地址映射至物理地址。作为一个示例,MMU 222可以使用给定的虚拟地址作为页表208的索引,以识别对应于该虚拟地址的页表条目210A。然后,MMU 222可以将页表条目210A的地址211A识别为对应于给定虚拟地址的物理地址。具体地,虚拟地址可以是由一个或多个进程(例如,操作系统214和/或虚拟机216)使用或访问的虚拟存储器空间中的虚拟页的地址,并且物理地址可以是存储器203中的页204的物理页的地址。以这种方式,MMU 222可以使用页表条目210将虚拟存储器空间的虚拟页映射至存储器203内的页204。

如图2所示,页表条目210中的每个包括相应脏位。例如,页表210A包括脏位212A,并且页表条目210N包括脏位212N。MMU 222在操作系统214和/或虚拟机216的执行期间更新这些脏位,而不会给操作系统214和虚拟机216带来额外的执行成本。作为一个非限制性示例,在执行虚拟机216期间,MMU 222当虚拟机216已经写入与页表条目210A相关联的特定虚拟页时,可以将脏位212A设置为真值或“1”。该脏位212A与该特定虚拟页相关联,并且它还与存储器203中的页204的物理页的地址211A(例如,物理地址)相关联。当脏位212A被设置为“1”时,脏位212A指示在页204中的特定虚拟页和与地址211A相关联的对应物理页已由虚拟机216写入。相反,如果脏位212A被设置为假或“0”,则虚拟页和对应物理页尚未被虚拟机216写入。

在某些示例中,页表条目210中的每个还可以包括与脏位分开的被访问位(accessed bit)。当对应虚拟页已被操作系统214和/或虚拟机216写入或读取时,MMU 222可以设置给定页表条目的被访问位。在各种示例中,脏位和访问位可能永远不会被清除,但是它们可以由操作系统214(例如,由内核215)使用以执行内部存储器管理(例如,用于确定存储器映射文件的哪些页已经改变并且因此可以保存到一个或多个存储设备)。

操作系统214和/或虚拟机216可以利用脏位212A-212N(统称为“脏位212”)的设置以提高由一个或多个垃圾收集器218或虚拟机216执行的垃圾收集的效率。例如,在操作系统214的执行期间的不同点(例如,在场境从由诸如虚拟机216的处理器220执行的进程切换离开时)处,操作系统的内核215可以将来自相应页表条目210的一个或多个脏位212复制到位域信息202内。位域信息202可以包括图1中所示的存储器写入信息102的一个例子。在一些情况下,内核215可以将所有脏位212复制到位域信息202内。在其他情况下,内核215可以仅将选择的一些脏位212复制到用于给定地址范围(例如,与存储器203中的页204相对应的某些虚拟页的地址范围)的位域信息202中。

内核215可以提供或以其他方式包括应用编程接口(API)以读取和/或清除位域信息202。例如,内核215提供的API可以允许虚拟机216原子地读取和/或清除位域信息。为了允许这样的原子操作,在一些示例中,内核215可以维护用于位域信息202的位域的两个单独的副本或实例,其在经由该API与虚拟机216交互时使用。

在一些非限制性示例中,在每个垃圾收集循环或过程结束时,虚拟机216可以使用API与内核215来清除位域信息202,为给定的地址范围设置脏位的值(或者,可替选地,位域信息202中的所有脏位的值)为“0”。当垃圾收集器218执行后续的垃圾收集过程时,虚拟机216可以使用API来从内核接收位域信息202。在一些情况下,虚拟机216可以接收包括在与页表条目210相关联的位域信息202中的所有脏位。在其他情况下,虚拟机216可以在位域信息202中请求给定地址范围的脏位(例如,与存储器203中的页204相对应的某些虚拟页的地址范围)。

在接收到包括一个或多个脏位212的位域信息202之后,虚拟机216能够确定自上次垃圾收集器218执行垃圾收集以来尚未写入哪些虚拟页。虚拟机216可以通过确定位域信息202中的哪些脏位被设置为“0”来这样做。在各种示例中,如将参考图5进一步描述的那样,位域信息202中包括的每个脏位可以与相应虚拟页相关联。通过确定位域信息202中的哪些脏位被设置为“0”,虚拟机216能够识别自垃圾收集器218上次执行垃圾收集以来哪些对应虚拟页尚未被写入。虚拟机216能够基于对应虚拟地址并且在各种示例中基于每个虚拟页的大小(例如,每页4096字节)识别特定虚拟页。

虚拟机216还能够基于与这些对象相关联的虚拟地址和/或虚拟地址范围并且在各种示例中还基于虚拟页尺寸来识别在哪些虚拟页中可访问哪些对象206。因此,基于位域信息202中的哪些脏位被设置为“0”,虚拟机216可以确定从垃圾收集器218上次执行垃圾收集起哪些对象206与尚未写入的页相关联。假设这些对象仍然可以被另一个对象或进程在存储器203中访问和引用,则垃圾收集器218可以确定不应该对这些对象进行垃圾收集。此外,如果这些对象是引用一个或多个子对象的父对象,则垃圾收集器218可以基于与位域信息202中包括的这些父对象相关联的脏位设置“0”来确定也应该不对子对象进行垃圾收集。因此,位域信息202的使用允许垃圾收集器218显著地修剪遍历的对象的树以确定这些对象中的哪些对象是可到达的,并且因此不应该被垃圾收集。

作为一个非限制性示例,位域信息202可以包括页表208中的页表210A的脏位212A的脏位设置。脏位212A可以与映射至具有地址211A的物理页204之一并且存储对象206A的虚拟页相关联。脏位212A可以被设置为“0”,表示该虚拟页和具有地址211A的对应物理页尚未被写入。因为虚拟机216知道对象206A与该虚拟页(例如,基于与对象206A相关联的虚拟地址)相关联但与任何其他虚拟页不相关联,所以虚拟机216能够确定自上次执行垃圾收集以来对象206A尚未被写入。虚拟机216可能能够基于例如对象206A的大小和每个虚拟页的大小来确定对象206A仅与该虚拟页相关联。

继续该示例,如果对象206A保持对于对象206N的引用,并且如果垃圾收集器218确定对象206A仍然可到达(例如,由另一对象或进程引用),则垃圾收集器218可以确定对象206N是仍然可访问的并且由对象206A引用,并且因此垃圾收集器218应该抑制对于对象206N执行垃圾收集(在该示例中,对象206N是父对象206A的子对象)。此外,如果对象206A包括对多个子对象(例如,对象列表)的引用,则垃圾收集器218可以确定抑制执行任何这些子对象的垃圾收集。垃圾收集器218能够进行这样的确定而不必保持关于对象206的任何附加状态信息,而是利用基于由MMU 222提供的脏位212的设置的位域信息202。

在一些情况下,对象206的特定对象可以跨越页204中的多个页。例如,基于其大小,对象206的对象206B可以跨越存储在存储器203中的多个物理页204,并且因此,对象206B可以与多个虚拟页相关联。在该示例中,虚拟机216可以识别与对象206B相关联的多个虚拟页以及位域信息202中的哪些对应脏位与这些虚拟页相关联。如果这些脏位中的每个被设置为“0”,则虚拟机216可以确定自垃圾收集的最后一次迭代以来尚未写入对象206B,因为没有写入与对象206B相关联的虚拟页。在这种情况下,假设对象206B是可达的,垃圾收集器218可以确定抑制对于对象206B和可以由对象206B引用的任何对象206(例如,对象206B的子对象)执行垃圾收集。

图3是示出了根据本公开的一个或多个方面的计算设备300的示例的框图。图3中所示的计算设备300可以是计算设备100(图1)和/或计算设备200(图2)的一个示例。图3仅示出了计算设备300的一个特定示例,并且计算设备300的许多其他示例可以在其他情况中使用,并且可以包括示例计算设备300中包括的组件的子集,或者可以包括图3中未示出的附加组件。

在图3的示例中,计算设备300包括存在敏感显示设备329、一个或多个处理器320、一个或多个输入组件325、一个或多个通信单元324、一个或多个输出组件326、电源328以及一个或多个存储设备303。存储设备303可以包括或者以其他方式是分别在图1和2中所示的存储器103或存储器203的一个示例。

通信信道334可以互连组件320、324、325、326、328、329和/或302中的每个以用于组件间通信(物理地、通信地和/或可操作地)。在一些示例中,通信信道334可以包括系统总线、网络连接、进程间通信数据结构或用于在硬件和/或软件之间传送数据的任何其他方法。

计算设备300的一个或多个输入组件325可以接收输入,诸如来自用户的输入。输入的示例是触觉、音频和视频输入。输入组件325的示例包括存在敏感屏幕、触敏屏幕、触摸屏、鼠标、键盘、触控板、语音响应系统、摄像机、麦克风或用于检测来自人或机器的输入的任何其他类型的设备。

计算设备300的一个或多个输出组件326可以生成输出。输出的示例是触觉、音频和视频输出。输出组件326的示例包括存在敏感屏幕、触敏屏幕、触摸屏、声卡、视频图形适配器卡、扬声器、阴极射线管(CRT)显示器、液晶显示器(LCD)或用于生成到人或机器的输出的任何其他类型的设备。

计算设备300的一个或多个通信单元324可以通过在一个或多个网络(例如,一个或多个有线和/或无线网络)上发送和/或接收网络信号,经由一个或多个网络与外部设备通信。例如,计算设备300可以使用通信单元324在诸如蜂窝无线电网络的无线电网络上发送和/或接收无线电信号。同样,通信单元324可以在诸如全球定位系统(GPS)网络的卫星网络上发送和/或接收卫星信号。通信单元324的示例包括网络接口卡(例如,以太网卡)、光学收发器、射频收发器、GPS接收器或可以发送和/或接收信息的任何其他类型的设备。通信单元324的其他示例可以包括短波无线电设备、蜂窝数据无线电设备、无线以太网网络无线电设备以及通用串行总线(USB)控制器。在一些示例中,计算设备300可以使用通信单元224来与图1中所示的远程设备112通信。

计算设备300的存在敏感显示设备329包括显示组件330和存在敏感输入组件332。在一些示例中,存在敏感显示设备329可以使用触觉、音频或视频刺激向用户提供输出。例如,显示组件330可以提供如参考输出组件326所描述的显示或视频输出。存在敏感显示设备329还可以提供输入能力,例如上面参考输入输入组件325所描述的输入能力。例如,存在敏感输入组件332可以提供输入能力,如参考输入组件325所描述的。

显示组件330可以是在其处由存在敏感显示设备329显示信息的屏幕,并且存在敏感输入组件332可以检测在显示组件330处和/或附近的对象。作为一个示例范围,存在敏感输入组件332可以检测对象,例如在显示组件330的两英寸或更小的范围内的手指或触笔(stylus)。存在敏感输入组件332可以确定在其处检测到对象的组件330的显示组件330的位置(例如,[x,y]坐标)。在另一示例范围中,存在敏感输入组件332可以从显示组件330检测六英寸或更小的对象,并且其他范围也是可能的。存在敏感输入组件332可以使用电容、电感和/或光学识别技术来确定由用户的手指选择的显示组件330的位置。在一些示例中,存在敏感输入组件332还使用如关于显示组件330所描述的触觉、音频或视频刺激向用户提供输出。显示组件330可以是提供视觉输出的任何类型的输出设备,例如关于输出组件326描述的。

虽然被示为计算设备300的内部组件,但是存在敏感显示设备329还可以表示与计算设备300共享数据路径以用于发送和/或接收输入和输出的外部组件。例如,在一个示例中,存在敏感显示设备329表示位于计算设备300的外部封装(例如,移动电话上的屏幕)内并且物理连接到计算设备300的外部封装的计算设备300的内置组件。在另一示例中,存在敏感显示设备329表示位于计算设备300的封装(例如,与平板电脑共享有线和/或无线数据路径的监视器和/或投影仪)外部并且与计算设备300的封装物理分离的计算设备300的外部组件。

计算设备300的存在敏感显示设备329可以检测作为来自计算设备300的用户的输入的二维和/或三维手势。例如,存在敏感显示设备329的传感器(例如,存在敏感输入组件332的传感器)可以在存在敏感显示设备323的传感器的阈值距离内检测用户的移动(例如,移动手、手臂、笔、触笔)。存在敏感显示设备329可以确定运动的二维或三维矢量表示,并且将矢量表示与具有多个维度的手势输入(例如,手形波、捏合、拍手、笔划(pen stroke))相关联。换句话说,存在敏感显示设备329可以检测多维手势,而不需要用户在存在敏感显示设备329输出用于显示的信息的屏幕或表面(例如,显示组件330)处或附近做出手势。相反,存在敏感显示设备329可以检测在传感器处或附近执行的多维手势,该传感器可以或可以不位于存在敏感显示设备329输出用于显示的信息的屏幕或表面附近。

计算设备300内的一个或多个存储设备303可以存储用于在计算设备300的操作期间(例如,在执行操作系统314或虚拟机316中的一个或多个期间)进行处理的信息。在一些示例中,存储设备303包括临时存储器,这意味着存储设备303的主要目的不是长期存储。可以对于短期存储信息配置计算设备300上的存储设备303作为易失性存储器,并且因此如果断电则不保留存储的内容。易失性存储器的示例包括随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)以及本领域中已知的其他形式的易失性存储器。

在一些示例中,存储设备303包括一个或多个计算机可读存储介质。存储设备303可以被配置为存储比易失性存储器更大量的信息。对于长期存储信息还可以配置存储设备303作为非易失性存储器空间并且在电源开/关循环之后保留信息。非易失性存储器的示例包括磁性硬盘、光盘、软盘、闪存或电可编程存储器(EPROM)或电可擦除和可编程(EEPROM)存储器的形式。存储设备303可以存储与包括内核315的操作系统314和/或包括垃圾收集器318的一个或多个虚拟机316相关联的程序指令和/或数据。操作系统314可以是操作系统114(图1)或操作系统214(图2)的一个示例,而虚拟机316中的一个或多个可以是软件模块116(图1)或虚拟机216(图2)的示例。

如图3所示,计算设备300可以包括电源328。在一些示例中,电源328可以是电池。电源328可以向计算设备300的一个或多个组件提供电力。电源328的非限制性示例可以包括但不必限于具有锌-碳、铅酸、镍镉(NiCd)、镍金属氢化物(NiMH)、锂离子(Li离子)和/或锂离子聚合物(Li离子聚合物)化学品的电池。在一些示例中,电源328可以具有有限的容量(例如,1000-3000mAh)。

一个或多个处理器320可以在计算设备300内实现功能和/或执行指令。例如,计算设备300上的处理器320可以接收并执行由执行操作系统314和/或虚拟机316的功能的存储设备303存储的指令。处理器320执行的这些指令可以使计算设备300在程序执行期间在存储设备303内存储信息。处理器320可以执行操作系统314和虚拟机316的指令以执行一个或多个操作。也就是说,操作系统314和虚拟机316可以由处理器320操作以执行本文描述的各种功能。

如图3所示,处理器320包括MMU 322。MMU 322可以是管理单元122(图1)和/或MMU 222(图2)的一个示例。

在一些示例中,计算设备300可以仅包括或以其他方式包括处理器320。在这些示例中,输入组件325、存在敏感显示设备329、通信单元324、输出组件326、电源328和存储设备303可以在计算设备300外部,但可以(例如,通过通信信道334)与计算设备300通信地耦合。

如图3所示,存储设备303还可以被配置为存储位域信息302、存储器的一个或多个页304以及页表308。位域信息302可以是存储器写入信息102(图1)或位域信息202(图2)的一个示例。页304可以是存储器存储区域104(图1)或页204(图2)的一个示例。页表308可以是表108(图1)或页表208(图2)的一个示例。

图4是示出根据本公开的一个或多个方面的虚拟机416的示例的框图,该虚拟机416从内核415接收位域信息402的位以确定是否对一个或多个对象执行垃圾收集。在图4中,内核415可以是内核215(图2)和/或内核315(图3)的一个示例。虚拟机416可以是虚拟机216(图2)和/或虚拟机316(图3)之一的一个示例。虚拟机416可以包括一个或多个垃圾收集器418。

如图4所示,内核415可以接收脏位412。脏位412可以是脏位212(图2)的一个示例。例如,在一些情况下,内核415可以在执行期间(例如,在场境从由处理器220执行的进程切换离开时)的不同点从页表(例如,图2中所示的页表208)的相应页表条目检索脏位412。然后,内核415可以在位域信息402内包括这些脏位412,位域信息402可以是位域信息202(图2)和/或位域信息302(图3)的一个示例。包括在位域信息402中的每个脏位412与例如以上示例中所描述的虚拟存储器空间的相应虚拟页相关联。包括在位域信息402中的每个脏位的相应值指示虚拟机416是否已经从先前时间点起(例如,自从垃圾收集器418中的一个或多个进行垃圾收集的最后时间起)向相应虚拟页写入任何数据。

虚拟机416可以例如在执行垃圾收集过程的时间请求位域信息402的一个或多个位。例如,如图4所示,虚拟机416可以请求(例如,通过原子读取操作,如前所述)位域信息402的一个或多个位,以便在由垃圾收集器418执行的垃圾收集的下一次迭代期间使用。

在一些情况下,虚拟机416可以请求包括在位域信息402中的所有位。在一些情况下,虚拟机416可以仅请求与给定地址范围或某些虚拟页相关联的一组脏位412。例如,虚拟机416可以仅请求与关联于某些对象或感兴趣的虚拟页的虚拟地址范围相关联的一组脏位412。在该示例中,虚拟机416可以在对内核415的请求中指定特定地址范围。然后,内核415可以响应于例如在位域信息402内的该请求将那些脏位412提供给虚拟机416。然而,如果虚拟机416未在请求中指定特定地址范围,则在各种示例中,内核415可以提供在被提供给虚拟机416的位域信息402内的所有脏位412。

在一些情况下,内核415将位域信息402保持在存储器中,例如在存储器203(图2)中。在这些情况下,虚拟机416可以不直接访问位域信息402,但是可以仅从内核415请求包括在位域信息402中的数据。在各种示例中,内核415可以被配置为设置在位域信息内包括的脏位412,但可能未被配置为清除任何这些位。在这些示例中,虚拟机416可以在一个或多个时间点处请求清除位域信息402中的一个或多个脏位设置。例如,在垃圾收集器418执行垃圾收集的迭代之后,虚拟机416可以发送清除位域信息402的脏位设置的请求(例如,清除位域信息402中的所有脏位的请求、清除给定地址范围的脏位或者与位域信息402内的所选择的虚拟页相关联的脏位的请求)。通过这样做,在稍后的时间点处,例如当执行垃圾收集的后续迭代时,虚拟机416可以再次从内核415请求位域信息402以确定自上次以来已经设置了哪些脏位。这些脏位与自上次执行垃圾收集以来已被写入(例如,由虚拟机416)的虚拟页相关联。

图5是说明根据本发明的一个或多个方面的位域信息502中包括的位与虚拟存储器空间540的相应虚拟页之间的示例关联的概念图。在图5中,位域信息502可以是存储器写入信息102(图1)、位域信息202(图2)、位域信息302(图3)和/或位域信息402(图4)的一个示例。虚拟存储器空间540是与诸如存储器103(图1)、存储器203(图2)和/或存储器303(图3)的物理存储器相关联的虚拟存储器区域。虚拟存储器空间540中包括的虚拟页是与诸如存储器存储区域104(图1)的物理存储器区域相关联的虚拟存储器页,页204(图2)和/或页304(图3)。

如图5的示例中所示,位域信息502可以包括包含多个位(例如,脏位)的数据结构。在该示例中,位域信息502的每个位与虚拟存储器空间540内的相应虚拟存储器页相关联。因此,位域信息502的“位1”与虚拟存储器空间540的“虚拟页1”相关联;位域信息502的“位2”与“虚拟页2”相关联;位域信息502的“位3”与“虚拟页3”相关联;以及位域信息502的“位n”与“虚拟页n”相关联。在一个示例中,“虚拟页1”到“虚拟页N”在虚拟存储器空间540内以依序递增顺序发生,其中,位域信息502中的“位1”到“位N”的顺序与“虚拟页1”到“虚拟页N”的顺序匹配。根据各种示例,“虚拟页1”到“虚拟页N”中的每个可以具有相同的页大小。

如前所述,诸如虚拟机(例如,虚拟机216、虚拟机316之一、虚拟机416)的软件模块(例如,软件模块116之一)可以例如根据软件模块的请求从操作系统(例如,操作系统114、内核215、内核315、内核415)接收位域信息502。仅出于说明的目的,可以假设虚拟机416从内核415周期性地请求位域信息502,如图4所示,其中,位域信息502是位域信息402的一个示例。在该示例中,在接收位域信息502时,虚拟机416能够确定在位域信息502中包括的哪些位(例如,脏位)与虚拟存储器空间540的哪些虚拟页相关联。因为在图5的示例中在位和虚拟页之间存在1-1关联,虚拟机416能够基于与这个相应虚拟页相关联的位,针对虚拟存储器空间540的每个虚拟页确定是否已将任何数据写入该虚拟页。

例如,虚拟机416基于“位1”的设置来确定是否已将任何数据写入“虚拟页1”(例如,零的脏位设置指示没有数据已写入“虚拟页1”,1的脏位设置指示数据已写入“虚拟页1”)。如果虚拟机416确定自上次执行垃圾收集以来没有数据被写入“虚拟页1”,则虚拟机416的垃圾收集器418可以确定抑制对由在“虚拟页1”内包括的对象(例如,父对象)引用的任何对象(例如,子对象)执行垃圾收集,此处假设与“虚拟页1”相关联的对象由另一个对象引用而不是孤立的(例如,它是可达的)。以这种方式,通过知道父对象被包括在“虚拟页1”内,并且“虚拟页1”还没有被写入或改变,基于“位1”的设置,虚拟机416能够确定此父对象引用的任何子对象仍可访问,并且因此不应被进行垃圾收集。

类似地,虚拟机416基于“位2”的设置来确定是否已经将任何数据写入“虚拟页2”,基于“位3”的设置来确定是否已经将任何数据写入“虚拟页3”,以及基于“位n”的设置来确定是否已将任何数据写入“虚拟页n”。虚拟机416还能够基于这些对象的虚拟地址和与虚拟存储器空间540中的不同虚拟页对应的虚拟地址连同虚拟页大小和对象大小来确定哪些对象与“虚拟页1”到“虚拟页n”的哪一个或多个相关联。

如先前所描述,虚拟机416可从内核415请求位域信息502。在各种示例中,虚拟机416可以在每次垃圾收集器418要执行垃圾收集的另一次迭代时做出此请求。在一些情况下,虚拟机416可以请求在位域信息502中包括的所有位。在其他情况下,虚拟机416可以仅请求对应于虚拟存储器空间540的给定地址范围的位域信息502的那些位。例如,虚拟机416可以仅请求对应于虚拟存储器空间540的“虚拟页1”和“虚拟页2”的地址范围的位域信息502的“位1”和“位2”。在该示例中,内核415可以仅在发送到虚拟机416的位域信息502中提供“位1”和“位2”的值。

在一些示例中,内核415可以向虚拟机416提供API以允许虚拟机416请求位域信息502。在各种示例中,该API可以提供原子读取操作以允许虚拟机416读取在存储器中存储并且由内核415控制的位域信息502。在这些示例中,为了支持原子读取操作,内核415可以维护位域信息502的两个不同副本。

此外,API可以允许虚拟机416清除位域信息502(例如,通过原子清除操作)。例如,每次在虚拟机416从内核415读取位域信息502之后,例如在执行垃圾收集时,虚拟机416可以在读取位域信息502之后使用由内核415提供的API来清除在位域信息502中包括的位的设置。在一些情况下,虚拟机416可以清除位域信息502的所有位,而在其他情况下,它可以清除与对应于特定地址范围的虚拟存储器空间540的虚拟页相关联的位域信息的那些位。通过在每次执行垃圾收集时清除位域信息502中包括的一个或多个位的值,虚拟机416稍后可以能够在随后的垃圾收集迭代期间基于位域信息502中包括的位的设置来确定自从垃圾收集的先前迭代以来已经写入了虚拟存储器空间540的哪些虚拟页。

在某些示例中,位域信息502还可以包括与脏位分离的被访问位。被访问位指示是否已写入或读取对应虚拟页。在这些示例中,每个被访问位与相应虚拟页相关联。在图5的示例中,例如,如果位域信息502的“位1”是第一脏位,则位域信息502还可以包括也与“虚拟页1”相关联的第一被访问位。类似地,在“位2”可以是与“虚拟页2”相关联的第二脏位的同时,位域信息502还可以包括也与“虚拟页2”相关联的第二被访问位。继续该示例,“位3”可以是与“虚拟页3”相关联的第三脏位,并且位域信息502还可以包括也与“虚拟页3”相关联的第三被访问位。“位n”可以是与“虚拟页N”相关联的第n脏位,并且位域信息502还可以包括也与“虚拟页N”相关联的第n被访问位。

图6是说明根据本发明的一个或多个方面的虚拟存储器空间640的虚拟页到物理存储器642的相应物理页的示例映射的概念图。仅出于说明的目的,将再次参考虚拟机416描述图6的示例。在图6的示例中,可以将与不同虚拟页相对应的多个不同虚拟地址映射至与单个物理页相对应的单个物理地址。在某些情况下,图6的实施例可以用于64位寻址/处理架构中。

在图5的示例中,可能多个不同对象可以与同一虚拟页相关联并且被包括在同一虚拟页内。如果虚拟机416确定已经写入了虚拟页,则可能只有这些多个不同对象中的一个已被写入,而其余对象没有。然而,因为所有对象都与同一虚拟页相关联,所以虚拟机416可能无法区分该页的哪些对象已被写入以及哪些对象未被写入。

然而,使用图6以及图7的示例,虚拟机416可能能够精确地确定哪些对象已被写入以及哪些对象未被写入,因为每个对象可以由虚拟机416独特地与特定虚拟页相关联。如图6的说明性示例中所示,虚拟存储器空间640包括四个不同的虚拟页,即“虚拟页P”、“虚拟页Q”、“虚拟页R”和“虚拟页S”。物理存储器642包括三个不同的物理页,即“物理页A”、“物理页B”和“物理页C”。物理存储器642可以是存储器(例如,图1的存储器103、图2的存储器203、图3的存储器303)的一个示例或以其他方式被包括在该存储器内。

管理单元(例如,图1的管理单元122、图2的MMU 222、图3的MMU 322)可以通过对应表条目来使用表(例如,图1的表108、图2的页表208、图3的页表308)以将“虚拟页P”和“虚拟页Q”映射至“物理页A”。因此,在该示例中,“虚拟页P”和“虚拟页Q”中的每个被映射至相同的物理页,即“物理页A”。管理单元可以将“虚拟页R”映射至“物理页B”,并且还可以将“虚拟页S”映射至“物理页C”。

在图6的示例中,示出了在物理存储器642中存储的三个示例对象,即“对象X”、“对象Y”和“对象Z”。“对象X”和“对象Y”均被完全存储在“物理页A”中,而“对象Z”横跨并且存储在“物理页B”和“物理页C”中。在图6中,“对象X”被包括在“物理页A”的零偏移处,因此“对象X”的虚拟地址可以与“虚拟页P”的虚拟地址具有零偏移,其以零偏移映射至“物理页A”的物理地址。然而,“对象Y”被包括在“物理页A”的非零偏移处,因此“对象Y”的虚拟地址可以是具有非零偏移的“虚拟页Q”的虚拟地址,其映射至添加了非零偏移的“物理页A”的物理地址。“对象Z”横跨“物理页B”和“物理页C”,因为它被包含在这两个页中。然而,“对象Z”被包括在“物理页B”的零偏移处,因此“对象Z”的虚拟地址可以是具有零偏移的“虚拟页R”的虚拟地址,其以零偏移映射至“物理页B”的物理地址。

在该示例中,管理单元使用表(例如,表108、页表208、页表308)来创建存储器映射,使得每个对象具有其自己的关联虚拟页。因此,在虚拟机416的执行期间,虚拟机416使用具有零偏移的“虚拟页P”的虚拟地址来访问“对象X”,而虚拟机416使用具有指定的非零偏移的“虚拟页Q”的虚拟地址以访问“对象Y”。虚拟机416还使用具有零偏移的“虚拟页R”的虚拟地址来访问“对象Z”。因为“对象Z”横跨“物理页B”和“物理页C”这两者,所以“虚拟页R”和“虚拟页S”可以包括虚拟存储器空间中的连续虚拟页。

继续图6的示例,图7是说明根据本发明的一个或多个方面的存储在虚拟存储器空间640的虚拟页中的对象的示例布局的概念图。如图7所示,“虚拟页P”和“虚拟页Q”在虚拟存储器空间640内可以是连续的或者可以不是连续的,而“虚拟页R”和“虚拟页S”是连续的。如图6中所示,“虚拟页P”和“虚拟页Q”都映射至“物理页A”,并且“物理页A”存储“对象X”和“对象Y”。因此,如图7中所示,“对象X”和“对象Y”与“虚拟页P”以及“虚拟页Q”相关联。因此,理论上,“对象X”和“对象Y”都可以通过两个单独的虚拟页被访问。然而,在图6和7的示例中,利用管理单元和表(例如,页表),使得经由特定虚拟页访问每个对象。

因此,当虚拟机416创建“对象X”时,虚拟机416接收具有零偏移的“虚拟页P”的虚拟地址以访问“对象X”,而虚拟机416接收具有指定的非零偏移的“虚拟页Q”的虚拟地址以访问“对象Y”。虚拟机416可以在各种示例中从管理单元(例如,图3中所示的MMU 322)或从操作系统(例如,操作系统314)中接收这些虚拟地址。在执行期间,虚拟机416可以仅通过“虚拟页P”访问“对象X”,并且虚拟机416可以仅通过“虚拟页Q”访问“对象Y”。以这种方式,在各种示例中,每个虚拟页与虚拟机416访问的一个对象相关联。因为每个虚拟页可以与位域信息的各个脏位设置具有一对一的关联(例如,如图5中的位域信息502所示),所以虚拟机416可以经由虚拟存储器空间640的一个或多个独特的相应虚拟页访问每个对象,并且虚拟机416因此可以独特地将包括在位域信息中的一个或多个脏位与相应的对象相关联。(在图7的示例中,“虚拟页R”和“虚拟页S”以及它们相应的脏位都与“对象Z”相关联。)

在这种情况下,虚拟机416可以在处理位域信息(例如,位域信息502)时确定自上次执行垃圾收集以来是否已经写入或未写入每个对象,并且因此虚拟机416的垃圾收集器418可能潜在地能够抑制确定自上次执行垃圾收集以来未被写入或改变的父对象所引用的对象的对象可达性。

例如,虚拟机416可以例如基于“虚拟页P”的虚拟地址和位域信息内的脏位的对应有序位置来识别与“虚拟页P”相关联的位域信息中的脏位。如图5的示例中所述,其中,位的排序对应于虚拟页的排序。由于“对象X”独特地与“虚拟页P”相关联,因此虚拟机416可以基于“虚拟页P”的相应脏位的值来确定是否自上次执行垃圾收集以来已将任何数据写入“对象X”。

例如,如果相应脏位被设置为“0”,则虚拟机416可以确定没有数据被写入“对象X”。如果“对象X”是引用一个或多个子对象的父对象,则如果没有用于“对象X”的数据已经改变并且垃圾收集器418将抑制对这些子对象中的任何一个执行垃圾收集(例如,假设“对象X”本身是可访问的,并且仍然由另一个对象引用),那么虚拟机416可以识别这些子对象仍然可到达。

当虚拟机416创建“对象Z”时,虚拟机416接收具有零偏移的“虚拟页R”的虚拟地址以访问“对象Z”。在执行期间,虚拟机416可以通过“虚拟页R”(其后跟随有“虚拟页S”)来访问“对象Z”,此处假设“对象Z”跨越两个虚拟页。在该示例中,给定“对象Z”的大小大于虚拟页大小,则“对象Z”可以跨越多个页。即便如此,每个虚拟页仍然与给定对象相关联(例如,“虚拟页R”和“虚拟页S”均与给定对象,即“对象Z”相关联),并且虚拟机416被配置为通过“虚拟页R”(其后跟随有“虚拟页S”)来访问“对象Z”。

然而,假设“对象Z”跨越这两个虚拟页,则虚拟机416可以被配置为查看与“虚拟页R”相关联的位域信息的脏位以及与“虚拟页S”相关联的脏位。如果这两个脏位都设置为“0”,则虚拟机416可以确定没有数据被写入“对象Z”。

图8是示出根据本公开的一个或多个方面的计算设备(例如分别在图1、图2和图3中所示的计算设备200、计算设备200和/或计算设备300)的示例操作的流程图。仅出于说明的目的,参考图1中所示的计算设备100来描述图8的操作。

由计算设备(例如,计算设备100)的至少一个处理器(例如,处理器120中的一个或多个)执行的软件模块(例如,软件模块116之一)可以接收(800)存储器写入信息(例如,存储器写入信息102),其指示所述至少一个处理器是否已从先前时间点起将任何数据写入计算设备的存储器(例如,存储器103)的存储区域(例如,存储区域104的存储区域)。存储器写入信息与存储区域相关联并且由计算设备的管理单元(例如,管理单元122)生成,其中管理单元包括至少一个处理器的硬件组件,该硬件组件被配置为管理从存储器检索的数据和写入存储器的数据。存储区域包括存储在存储器中的第一对象(例如,对象106A)。软件模块基于存储器写入信息来确定(802)软件模块是否将对存储在存储器中并且由第一对象引用的第二对象(例如,对象106N)执行垃圾收集。

示例1:一种方法,包括:由计算设备的至少一个处理器执行的软件模块接收存储器写入信息,所述存储器写入信息指示所述至少一个处理器从先前的时间点起尚未将任何数据写入所述计算设备的存储器的存储区域,其中,所述存储器写入信息与所述存储区域相关联并且基于由所述计算设备的管理单元生成的信息,其中所述管理单元包括所述至少一个处理器的硬件组件,所述硬件组件被配置为管理从所述存储器检索的数据和写入所述存储器的数据,以及其中所述存储区域包括存储在所述存储器中的第一对象;以及由所述软件模块并且基于所述存储器写入信息来确定抑制对存储在所述存储器中并且由所述第一对象引用的第二对象执行垃圾收集。

示例2:根据示例1所述的方法,其中所述存储器写入信息还指示所述至少一个处理器是否已经从所述先前时间点起将任何数据写入所述存储器的一个或多个附加存储区域,所述存储器写入信息进一步与所述一个或多个附加存储区域中的每个相关联。

示例3:根据示例1-2中任一项所述的方法,其中确定抑制对所述第二对象执行垃圾收集还基于由所述软件模块确定所述第一对象当前被存储在所述存储器中的第三对象引用。

示例4:根据示例1-3中任一项所述的方法,其中所述第一对象引用在所述存储器中存储的与所述第一对象不同的多个对象,其中所述多个对象包括所述第二对象,以及其中所述方法还包括:通过所述软件模块并且基于所述存储器写入信息确定抑制每个被所述第一对象引用的所述多个对象执行垃圾收集。

示例5:根据示例1-4中任一项所述的方法,其中,所述存储器写入信息指示所述至少一个处理器自所述软件模块对存储在所述存储器中的至少一个对象先前地执行垃圾收集时的所述先前时间点起尚未将任何数据写入所述计算设备的所述存储器的所述存储区域。

示例6:根据示例1-5中任一项所述的方法,其中所述软件模块包括虚拟机,所述虚拟机包括一个或多个垃圾收集器,其中所述管理单元包括存储器管理单元(MMU),其中接收所述存储器写入信息包括由所述虚拟机从由所述至少一个处理器执行的操作系统的内核接收所述存储器写入信息,以及其中确定抑制对所述第二对象执行垃圾收集包括由所述虚拟机并且基于从所述内核接收的所述存储器写入信息来确定所述虚拟机的所述一个或多个垃圾收集器将抑制对所述第二对象执行垃圾收集。

示例7:根据示例1-6中任一项所述的方法,其中所述存储器包括多个存储区域和具有与所述多个存储区域相关联的多个表条目的表,其中所述存储区域被包括在所述多个存储区域中,并且与在所述多个表条目中包括的表条目相关联,以及其中所述表条目包括由所述管理单元生成的所述信息。

示例8:根据示例7所述的方法,其中所述多个存储区域包括存储在所述存储器中的物理页,其中所述表包括页表,所述页表具有与所述多个物理页相关联的多个页表条目,其中所述存储区域包括与所述多个页表条目的页表条目相关联的物理页,其中所述物理页包括所述第一对象,以及其中所述管理单元使用所述页表的所述多个页表条目来将虚拟存储器空间的虚拟页映射至在存储器中存储的所述物理页。

示例9:根据示例8所述的方法,其中所述页表条目将所述虚拟存储器空间的虚拟页映射至所述物理页,其中在所述页表条目中包括的所述信息包括与所述虚拟页相关联并且由管理单元生成的脏位,以指示所述至少一个处理器从所述先前的时间点起尚未向所述虚拟页写入任何数据。

示例10:根据示例9所述的方法,其中,由所述至少一个处理器执行的操作系统的内核检索所述脏位并且将其包括在位域信息中,其中接收所述存储器写入信息包括:由所述软件模块并且从所述内核接收包括与所述虚拟页相关联的脏位的所述位域信息,以及其中确定抑制对所述第二对象执行垃圾收集包括:所述软件模块确定所述第一对象与所述虚拟页关联,所述虚拟页与在所述位域信息中包括的所述脏位相关联;以及通过所述软件模块并且基于在所述位域信息中包括的所述脏位的值来确定所述软件模块将抑制对所述第一对象引用的所述第二对象执行垃圾收集。

示例11:根据示例10所述的方法,其中所述内核从所述页表的相应页表条目检索包括所述脏位的多个脏位中的每个,其中所述内核包括在所述位域信息中的所述多个脏位,其中包括在所述位域信息内的每个脏位与所述虚拟存储器空间的相应虚拟页相关联,以及其中包括在所述位域信息中的每个脏位的相应值指示从所述先前时间点起至少一个处理器是否已将任何数据写入相应虚拟页。

示例12:根据示例11所述的方法,其中所述软件模块通过所述虚拟存储器空间的一个或多个独特虚拟页访问在所述存储器中存储的每个对象,其中所述软件模块将在所述位域信息中包括的一个或多个脏位与相应对象独特地相关联,以及其中所述脏位与所述第一对象独特地相关联,所述第一对象与所述虚拟页相关联。

示例13:根据示例12所述的方法,其中所述虚拟页包括第一虚拟页,其中所述页表将所述虚拟存储器空间的所述第一虚拟页和第二虚拟页都映射至在所述存储器中存储的所述物理页,以及其中所述软件模块仅通过所述第一虚拟页而不是通过第二虚拟页来访问所述第一对象。

示例14:一种计算设备,包括:存储器;以及至少一个处理器,其通信地耦合到所述存储器,所述至少一个处理器包括管理单元,所述管理单元包括硬件组件,所述硬件组件被配置为管理从所述存储器检索的数据和写入所述存储器的数据,其中所述至少一个处理器被编程为:接收存储器写入信息,所述存储器写入信息指示所述至少一个处理器自从先前的时间点以来没有将任何数据写入所述计算设备的存储器的存储区域,其中所述存储器写入信息与所述存储区域相关联并且基于由所述计算设备的管理单元生成的信息,以及其中所述存储区域包括在所述存储器中存储的第一对象;以及基于所述存储器写入信息,确定抑制对在所述存储器中存储并且由所述第一对象引用的第二对象执行垃圾收集。

示例15:根据示例14所述的计算设备,其中,所述第一对象引用存储在所述存储器中的与所述第一对象不同的多个对象,其中所述多个对象包括所述第二对象,以及其中所述至少一个处理器还被编程为:基于所述存储器写入信息来确定抑制对每个由所述第一对象引用的所述多个对象执行垃圾收集。

示例16:根据示例14-15中任一项所述的计算设备,其中所述至少一个处理器被编程为实现包括一个或多个垃圾收集器的虚拟机,其中所述管理单元包括存储器管理单元(MMU),其中所述虚拟机被配置为从由所述至少一个处理器执行的操作系统的内核接收所述存储器写入信息,以及其中所述虚拟机被配置为基于从所述内核接收的所述存储器写入信息来确定所述虚拟机的所述一个或多个垃圾收集器将抑制对所述第二对象执行垃圾收集。

示例17:根据示例14-16中任一项所述的计算设备,其中所述存储器包括多个存储区域和具有与所述多个存储区域相关联的多个表条目的表,其中所述存储区域被包括在所述多个存储区域中,并且与在所述多个表条目中包括的表条目相关联,以及其中所述表条目包括由所述管理单元生成的所述信息。

示例18:根据示例17所述的计算设备,其中所述多个存储区域包括在所述存储器中存储的物理页,其中所述表包括页表,所述页表具有与所述多个物理页相关联的多个页表条目,其中所述存储区域包括与所述多个页表条目中的页表条目相关联的物理页,其中所述物理页包括所述第一对象,以及其中所述管理单元使用所述页表的所述多个页表条目来将虚拟存储器空间的虚拟页映射至在所述存储器中存储的所述物理页。

示例19:根据示例18所述的计算设备,其中所述页表条目将所述虚拟存储器空间的虚拟页映射至所述物理页,其中所述页表条目中包括的所述信息包括与所述虚拟页相关联并且由所述管理单元生成的脏位,以指示至少一个处理器自从所述先前的时间点以来没有向所述虚拟页写入任何数据。

示例20:根据示例19所述的计算设备,其中,由所述至少一个处理器执行的操作系统的内核检索所述脏位并且将其包括在位域信息内,其中被编程为接收所述存储器写入信息的所述至少一个处理器还被编程为从所述内核接收包括与所述虚拟页相关联的所述脏位的所述位域信息,以及其中被编程为确定抑制对所述第二对象执行垃圾收集的所述至少一个处理器还被编程为:确定所述第一对象与所述虚拟页相关联,所述虚拟页与在所述位域信息中包括的所述脏位相关联;以及基于在所述位域信息中包括的所述脏位的值,确定抑制对所述第一对象引用的所述第二对象执行垃圾收集。

示例21:根据示例20所述的计算设备,其中所述内核从所述页表的相应页表条目检索包括所述脏位的多个脏位中的每个,其中所述内核包括在所述位域信息中的所述多个脏位,其中在所述位域信息中包括的每个脏位与所述虚拟存储器空间的相应虚拟页相关联,以及其中在所述位域信息中包括的每个脏位的相应值指示至少一个处理器是否自从所述先前时间点起已将任何数据写入所述相应虚拟页。

示例22:根据示例21所述的计算设备,其中,所述至少一个处理器还被编程为:通过所述虚拟存储器空间的一个或多个独特虚拟页访问在所述存储器中存储的每个对象;以及将在所述位域信息中包括的一个或多个脏位与相应对象独特地相关联,以及其中所述脏位与所述第一对象独特地相关联,所述第一对象与所述虚拟页相关联。

示例23:根据示例22所述的计算设备,其中,所述虚拟页包括第一虚拟页,其中所述页表将所述虚拟存储器空间的所述第一虚拟页和第二虚拟页都映射至在所述存储器中存储的所述物理页,以及其中所述至少一个处理器还被编程为仅经由所述第一虚拟页而不是经由所述第二虚拟页访问所述第一对象。

示例24:示例14-23中任一项所述的计算设备,其中所述存储器写入信息还指示所述至少一个处理器是否已经从所述先前时间点起将任何数据写入到所述存储器的一个或多个附加存储区域,所述存储器写入信息进一步与所述一个或多个附加存储区域中的每个相关联。

示例25:示例14-24中任一项所述的计算设备,其中被编程为确定抑制对所述第二对象执行垃圾收集的所述至少一个处理器还被编程为确定第一对象当前由在所述存储器中存储的第三对象引用。

示例26:示例14-25中任一示例的计算设备,其中,存储器写入信息指示至少一个处理器从所述软件模块对在存储器中存储的至少一个对象先前地执行垃圾收集时的所述先前时间点起尚未将任何数据写入计算设备的存储器的存储区域。

示例27:示例14的计算设备,还包括用于执行示例2-13中任一项的方法的装置。

示例28:一种计算设备,包括用于执行示例1-13中任一项的方法的装置。

示例29:一种存储指令的计算机可读存储设备,所述指令在被执行时使得计算设备的至少一个处理器执行包括以下操作的操作:接收存储器写入信息,所述存储器写入信息指示所述至少一个处理器自从先前的时间点以来没有将任何数据写入所述计算设备的存储器的存储区域,其中所述存储器写入信息与所述存储区域相关联并且基于由所述计算设备的管理单元生成的信息,其中管理单元包括所述至少一个处理器的硬件组件,所述至少一个处理器的硬件组件被配置成管理从所述存储器检索的数据和写入到存储器中的数据,以及其中所述存储区域包括在所述存储器中存储的第一对象;以及基于所述存储器写入信息,确定抑制对在所述存储器中存储并且由所述第一对象引用的第二对象执行垃圾收集。

示例30:示例29的计算机可读存储设备,其中所述存储器写入信息还指示至少一个处理器是否已经从所述先前时间点起将任何数据写入存储器的一个或多个附加存储区域,存储器写入信息进一步与一个或多个附加存储区域中的每个相关联。

示例31:示例29-30中任一项所述的计算机可读存储设备,其中确定抑制对第二对象执行垃圾收集还基于确定第一对象当前由在存储器中存储的第三对象引用。

示例32:根据示例29-31的任意示例所述的计算机可读存储设备,其中,所述第一对象引用在所述存储器中存储的与所述第一对象不同的多个对象,其中所述多个对象包括所述第二对象,以及其中所述操作还包括:基于所述存储器写入信息确定抑制对每个由第一对象引用的所述多个对象执行垃圾收集。

示例33:示例29-32中任一项所述的计算机可读存储设备,其中,存储器写入信息指示至少一个处理器从软件模块对在存储器中存储的至少一个对象先前地执行垃圾收集时的所述先前时间点起尚未将任何数据写入计算设备的存储器的存储区域。

示例34:示例29-33中任一项所述的计算机可读存储设备,其中管理单元包括存储器管理单元(MMU),其中接收存储器写入信息包括由包括一个或多个垃圾收集器的虚拟机接收来自由至少一个处理器执行的操作系统的内核的存储器写入信息,以及其中确定抑制对第二对象执行垃圾收集包括由虚拟机并且基于从内核接收的存储器写入信息来确定虚拟机的一个或多个垃圾收集器将抑制对第二对象执行垃圾收集。

示例35:示例29-34中任一项所述的计算机可读存储设备,其中存储器包括多个存储区域和具有与多个存储区域相关联的多个表条目的表,其中存储区域被包括在多个存储区域中并且与在多个表条目中包括的表条目相关联,以及其中所述表条目包括由管理单元生成的信息。

示例36:示例35的计算机可读存储设备,其中所述多个存储区域包括在存储器中存储的物理页,其中所述表包括页表,所述页表具有与所述多个物理页相关联的多个页表条目,其中存储区域包括与多个页表条目的页表条目相关联的物理页,其中物理页包括第一对象,以及其中管理单元使用页表的多个页表条目,以将虚拟存储器空间的虚拟页映射至在存储器中存储的物理页。

示例37:示例36的计算机可读存储设备,其中页表条目将虚拟存储器空间的虚拟页映射至物理页,其中在页表条目中包括的信息包括脏位,脏位与虚拟页相关联并且由管理单元生成,以指示至少一个处理器自从先前时间点以来没有向虚拟页写入任何数据。

示例38:示例37的计算机可读存储设备,其中由所述至少一个处理器执行的操作系统的内核检索所述脏位并且将其包括在位域信息内,其中接收所述存储器写入信息包括从内核接收包括与虚拟页相关联的脏位的位域信息,以及其中确定抑制对第二对象执行垃圾收集包括:确定第一对象与虚拟页相关联,虚拟页与在位域信息中包括的脏位相关联;以及基于位域信息中包括的脏位的值,确定抑制对由第一对象引用的第二对象执行垃圾收集。

示例39:示例38的计算机可读存储设备,其中内核从页表的相应页表条目检索包括脏位的多个脏位中的每个,其中内核包括多个位域信息中的脏位,其中在位域信息内包括的每个脏位与虚拟存储器空间的相应虚拟页相关联,以及其中,在位域信息中包括的每个脏位的相应值指示至少一个处理器是否已经从先前的时间点起将任何数据写入相应虚拟页。

示例40:示例39的计算机可读存储设备,其中所述操作还包括:经由虚拟存储器空间的一个或多个独特虚拟页来访问在存储器中存储的每个对象;以及将在位域信息中包括的一个或多个脏位与相应对象独特地相关联,其中脏位与第一对象独特地相关联,第一对象与虚拟页相关联。

示例41:示例40的计算机可读存储设备,其中虚拟页包括第一虚拟页,其中页表将虚拟存储器空间的第一虚拟页和第二虚拟页都映射至在存储器中存储的物理页,以及其中操作还包括仅经由第一虚拟页而不是经由第二虚拟页来访问第一对象。

示例42:示例29的计算机可读存储设备,其中所述指令在被执行时还使得所述计算设备的至少一个处理器执行示例2-13中任一项的方法。

示例43:存储指令的计算机可读存储设备,所述指令在被执行时使计算设备的至少一个处理器执行示例1-13中任一项的方法。

在一个或多个示例中,所描述的功能可以以硬件、软件、固件或其任何组合来实施。如果以软件实现,则功能可以作为一个或多个指令或代码通过计算机可读介质被存储或传输,并且由基于硬件的处理单元执行。计算机可读介质可以包括:计算机可读存储介质,其对应于诸如数据存储介质的有形介质;或者通信介质,其包括有助于例如根据通信协议将计算机程序从一个地方传送到另一个地方的任何介质。以这种方式,计算机可读介质通常可以对应于:(1)有形计算机可读存储介质,其是非暂时性的;或(2)通信介质,诸如信号或载波。数据存储介质可以是由一个或多个计算机或一个或多个处理器可访问以检索用于实现本公开中描述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可以包括计算机可读介质。

作为示例而非限制,这种计算机可读存储介质可以包括随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、致密盘只读存储器(CD-ROM)或其他光学磁盘贮存器、磁盘贮存器或其他磁存储设备、闪存或可用于以指令或数据结构的形式存储所需程序代码并且可以通过计算机访问的任何其他存储介质。此外,任何连接都适当地称为计算机可读介质。例如,如果使用同轴线缆、光纤线缆、双绞线、数字用户线(DSL)或无线技术(如红外线、无线电和微波)从网站、服务器或其他远程源传输指令,则同轴线缆、光纤线缆、双绞线、DSL或无线技术(如红外、无线电和微波)都被包含在介质的定义中。然而,应该理解,计算机可读存储介质和数据存储介质不包括连接、载波、信号或其他瞬态介质,而是反而涉及非瞬态有形存储介质。这里使用的磁盘(disk)和光盘(disc)包括致密光盘(CD)、激光光盘、光学光盘(optical disc)、数字通用光盘(DVD)、软盘(floppy disk)和蓝光光盘(Blu-ray disc),其中磁盘(disk)通常以磁性方式再现数据,而光盘(disc)通过激光光学地再现数据。上述的组合也应包括在计算机可读介质的范围内。

指令可以由一个或多个处理器执行,所述一个或多个处理器例如是一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其他等效集成或分立逻辑电路。因此,如本文所使用的术语“处理器”可以指前述结构或适合于实现本文描述的技术的任何其他结构的任何一种。另外,在一些方面,可以在专用硬件和/或软件模块内提供本文描述的功能。此外,这些技术可以在一个或多个电路或逻辑元件中完全实现。

本公开的技术可以在包括无线手持机、集成电路(IC)或一组IC(例如,芯片组)的各种各样设备或装置中实现。在本公开中描述了各种组件、模块或单元以强调被配置为执行所公开的技术的设备的功能方面,但不一定需要由不同的硬件单元实现。而是,如上所述,各种单元可以组合在硬件单元中,或者由可互操作的硬件单元的集合结合合适的软件和/或固件提供,该可互操作的硬件单元包括如上所述的一个或多个处理器。

应当认识到,取决于实施例,本文描述的任何方法的某些动作或事件可以以不同的顺序执行,可以添加、合并或完全省略(例如,并非全部描述的行为或事件是实施所述方法所必需的)。此外,在某些实施例中,动作或事件可以例如通过多线程处理、中断处理或多个处理器同时执行,而不是顺序执行。

在一些示例中,计算机可读存储介质包括非暂时性介质。术语“非暂时性”指示存储介质不体现在载波或传播信号中。在某些示例中,非暂时性存储介质可以存储可以随时间变化的数据(例如,在RAM或高速缓存中)。

已经描述了各种示例。这些和其他示例在所附权利要求的范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1