CN107636624B - 没有使用的特殊指令的垃圾收集 - Google Patents

没有使用的特殊指令的垃圾收集 Download PDF

Info

Publication number
CN107636624B
CN107636624B CN201680031331.9A CN201680031331A CN107636624B CN 107636624 B CN107636624 B CN 107636624B CN 201680031331 A CN201680031331 A CN 201680031331A CN 107636624 B CN107636624 B CN 107636624B
Authority
CN
China
Prior art keywords
pointer
object pointer
memory
handler
location
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201680031331.9A
Other languages
English (en)
Other versions
CN107636624A (zh
Inventor
G·R·弗雷泽
M·K·格施温德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/755,748 external-priority patent/US10176093B2/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN107636624A publication Critical patent/CN107636624A/zh
Application granted granted Critical
Publication of CN107636624B publication Critical patent/CN107636624B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

促进垃圾收集处理。基于加载指令的执行以及确定要被加载的对象指针的地址位于指针存储区域中并且对象指针指示经历垃圾收集的所选择的存储器部分内的位置,处理控制由在计算环境的处理器内执行的处理程序来获取。处理程序从指针存储区域获取对象指针,并且确定对象指针是否要被修改。如果对象指针要被修改,则处理程序修改对象指针。处理程序然后可以将经修改的对象指针存储在所选择的位置。

Description

没有使用的特殊指令的垃圾收集
背景技术
一个或多个方面总体上涉及计算环境内的处理,并且具体地涉及计算环境内的垃圾收集处理。
垃圾收集是一个自动存储器管理过程,其标识存储器中不再被引用的对象并且释放这些对象。随着不同大小的存储器对象被分配并且稍后释放,存储其的存储器变得越来越碎片化。最终,存在很少的大的空闲存储器区域,并且在不增加存储器大小的情况下存储附加对象将变得很困难。当发生这种情况时,采用被称为压缩的垃圾收集内的过程,以便将所分配的对象合并为一个大的区域,从而留下可用于新的对象的另一大的空闲空间区域。在合并期间,仍然被引用的存储器对象从一个存储器区域移动到另一存储器区域。
传统上,当对对象存储区域执行垃圾收集时,需要使使用对象存储区域的应用暂停执行。其中一个原因是为了确定指向由应用使用以访问对象的对象的指针是否仍然有效,因为对象可能已经移动。有时几秒钟长的这些暂停防止应用被用于时间敏感的任务,诸如事务处理、实时游戏或机械控制。因此,需要优化的垃圾收集过程。
发明内容
根据本发明的一个或多个实施例,提供了一种优化的垃圾收集过程,该过程在应用没有访问经历垃圾收集的存储器区域中的对象时,使得这些应用在垃圾收集过程期间能够继续执行(而不会由于垃圾收集而被暂停),并且使得访问经历垃圾收集的存储器区域中的对象的应用在非常短暂的延迟之后立即恢复处理。这是通过提供一种有效的机制来实现的,该机制用于识别指向正在被收集的对象存储区域的指针何时被访问,获取指向正在被垃圾收集的存储器区域中的对象的指针,并且修改指针。有利地,这是在没有使用特殊指令和/或不需要用于执行特殊指令的程序修改的情况下执行的。此外,包括应用性能和/或处理器性能在内的计算环境内的性能被改善。
根据一个方面,提供了一种用于促进计算环境内的垃圾收集的计算机程序产品。该计算机程序产品包括由处理电路可读取并且存储用于由处理电路执行以执行方法的指令的存储介质。该方法包括例如由在计算环境的处理器内执行的处理程序获取处理控制。获取处理控制基于加载指令的执行以及要被加载的对象指针的地址位于指针存储区域中并且对象指针指示经历垃圾收集的所选择的存储器部分内的位置的确定。基于由处理程序获取处理控制,由处理程序从指针存储区域获取对象指针,对象指针指示要由对象指针指向的对象的位置。由处理程序确定对象指针是否要被修改,并且基于确定对象指针要被修改,由处理程序修改对象指针以提供经修改的对象指针。基于修改对象指针,将经修改的对象指针存储在所选择的位置。
有利地,这允许使用没有经历垃圾收集的存储器区域中的对象的应用在垃圾收集期间继续处理而没有中断,并且允许使用经历垃圾收集的存储器区域中的对象的应用在非常短的不可察觉的延迟之后继续处理,从而提高性能。此外,它不需要使用特殊指令或修改应用以使用特殊指令。
在一个实施例中,获取处理控制经由由处理器硬件发出的中断。中断基于加载指令的执行以及要被加载的对象指针的地址位于指针存储区域中并且对象指针指示经历垃圾收集的所选择的存储器部分内的位置的确定而被发出。在一个特定示例中,中断是轻量级的中断(即不涉及操作系统),它直接向应用级处理程序给与控制。有利地,这些实施例中的一个或多个实现了由处理程序的立即处理,并且使得访问指针的应用能够在中断被处理之后立即继续处理,而没有引起管理者级中断处理程序的延迟。
在另一实施例中,经历垃圾收集的所选择的存储器部分是也包括没有经历垃圾收集的一个或多个其他对象的对象区域的部分,并且有利地,访问没有经历垃圾收集的对象区域的一个或多个应用在垃圾收集过程期间继续处理。例如,他们继续处理而没有中断。此外,在处理程序(例如,轻量级应用级处理程序)处理指针期间,访问指示经历垃圾收集的所选择的存储器部分中的对象的对象指针的应用在非常短的延迟之后立即恢复处理。这使得应用能够用于时间敏感的处理,因为没有应用被延迟足够明显的一段时间。
在一个实施例中,对象指针的地址(即,规定对象指针的位置的地址)根据加载指令的执行来确定,并且将对象指针的地址与和指针存储区域相关的数据相比较以确定对象指针的地址是否位于指针存储区域内。基于比较,确定对象指针的地址位于指针存储区域内,将对象指针(即,规定对象的位置的地址)与和所选择的存储器部分相关的信息相比较以确定对象指针指示所选择的存储器部分内的位置。基于确定对象指针的地址位于指针存储区域内并且对象指针指示所选择的存储器部分内的位置,向处理程序提供控制。从指针存储区域获取对象指针有利地消除了使用特殊指令来获取对象指针的需要;从而消除了定义专用于垃圾收集的专用指令以及修改现有程序以使用指令来获取对象指针的需要。
在实施例中,指针存储区域包括连续存储器区域,连续存储器区域包括多个对象指针。作为一个示例,指针存储区域由寄存器或存储器内的位置中的一项来指示。
此外,在实施例中,所选择的存储器部分由寄存器或存储器内的位置中的一项来指示,并且在一个实施例中,寄存器包括所选择的存储器部分的基地址和所选择的存储器部分的大小。
另外,在一个示例中,存储经修改的对象指针的所选择的位置是指针存储区域内的位置或者由加载指令规定的位置。
作为一个示例,加载指令包括用于规定加载操作的一个或多个操作代码字段、要用于获取对象指针的结果字段、以及要在加载操作中使用的一个或多个其他字段。
在又一方面中,提供了一种用于促进计算环境内的处理的计算机程序产品。计算机程序产品包括计算机可读存储介质,计算机可读存储介质由处理电路可读取并且存储用于由处理电路执行以执行方法的指令。该方法包括例如由在计算环境的处理器内执行的处理程序获取处理控制。获取处理控制基于要被访问的对象指针指示所规定的存储器区域内的位置的确定。基于由处理程序获取处理控制,由处理程序采取动作。采取动作包括以下中的至少一项:提供警告;防止对所规定的存储器区域的访问;或者修改对象指针并且存储经修改的对象指针。这有利地允许处理程序在指针访问所规定的存储器区域时采取动作,而不管访问的原因如何。
根据另一方面,提供了一种用于促进计算环境内的垃圾收集的计算机系统,该计算机系统包括:存储器;以及与存储器通信的处理器,其中计算机系统被配置为执行方法,该方法包括:由在计算环境的处理器内执行的处理程序获取处理控制,获取处理控制基于加载指令的执行以及要被加载的对象指针的地址位于指针存储区域中并且对象指针指示经历垃圾收集的所选择的存储器部分内的位置的确定;基于由处理程序获取处理控制,由处理程序从指针存储区域获取对象指针,对象指针指示要由对象指针指向的对象的位置;由处理程序确定对象指针是否要被修改;基于确定对象指针要被修改,由处理程序修改对象指针以提供经修改的对象指针;以及基于修改对象指针,将经修改的对象指针存储在所选择的位置。
根据另一方面,提供了一种促进计算环境内的垃圾收集的计算机实现的方法,该计算机实现的方法包括:由在计算环境的处理器内执行的处理程序获取处理控制,获取处理控制基于加载指令的执行以及要被加载的对象指针的地址位于指针存储区域中并且对象指针指示经历垃圾收集的所选择的存储器部分内的位置的确定;基于由处理程序获取处理控制,由处理程序从指针存储区域获取对象指针,对象指针指示要由对象指针指向的对象的位置;由处理程序确定对象指针是否要被修改;基于确定对象指针要被修改,由处理程序修改对象指针以提供经修改的对象指针;以及基于修改对象指针,将经修改的对象指针存储在所选择的位置中。
与一个或多个方面相关的计算机实现的方法和系统以及其他计算机程序产品也可以在本文中描述和要求保护。此外,与一个或多个方面相关的服务也在本文中描述并且可以要求保护。
附加的特征和优点通过本文中描述的技术来实现。其他实施例和方面在本文中详细描述,并且可以被认为是要求保护的各方面的部分。
附图说明
现在将仅以示例的方式并且参考以下附图来描述本发明的优选实施例:
图1描绘了用于合并并且使用一个或多个实施例的计算环境的一个示例;
图2A描绘了用于合并并且使用一个或多个实施例的计算环境的另一示例;
图2B描绘了根据本发明的实施例的图2A的存储器的进一步细节;
图3描绘了根据一个或多个实施例的加载双字指令的一个示例;
图4描绘了根据一个或多个实施例的要执行垃圾收集的存储器的进一步细节;
图5A描绘了根据一个或多个实施例的指针存储区域寄存器的一个示例;
图5B描绘了根据一个或多个实施例的加载监测区域寄存器的一个示例;
图6描绘了根据一个或多个实施例的用于使用加载双字指令来执行垃圾收集的逻辑的一个实施例;
图7描绘了用于执行优化的垃圾收集的逻辑的一个实施例;
图8描绘了用于由处理程序基于规定的条件来采取动作的逻辑的一个实施例;
图9描绘了根据一个或多个实施例的云计算节点的一个示例;
图10描绘了根据一个或多个实施例的云计算环境的一个实施例;以及
图11描绘了根据一个或多个实施例的抽象模型层的一个示例。
具体实施方式
根据一个或多个实施例,为优化的垃圾收集过程提供了一种能力,其有利地提高了应用性能,提高了执行该应用的处理器的性能,和/或提高了处理器在其中执行的计算环境的性能。
优化的垃圾收集过程允许应用(也称为程序)执行垃圾收集而不需要程序修改以利用特殊指令或者用于执行特殊指令的硬件。另外,在一个或多个实施例中,其允许正在访问没有经历垃圾收集的存储器区域中的对象的应用在垃圾收集期间继续处理而没有中断,允许访问正在被垃圾收集的存储器区域中的对象的应用在非常短的不明显的延迟之后继续处理,并且进一步改进了对象指针(也被称为指针)的处理。
在一个实施例中,被称为加载双字(ld)指令的指令用于加载数据,包括对象指针(例如,对象的地址)。当指令被执行时,将要被加载的数据(例如,对象指针)的地址与指针存储区域相比较,并且如果数据不在指针存储区域中,则按常规执行加载指令。然而,如果要被加载的数据的地址在指针存储区域中,则进行检查以确定要被加载的数据是否指向给定的地址范围(例如,经历垃圾收集的存储器区域)内的对象。如果它不指向该地址范围内的对象,则加载指令按常规执行。但是,如果要被加载的数据确实指向给定的地址范围,则处理器引起向指针更新处理程序(也被称为垃圾收集处理程序、基于事件的跳转(EBB)处理程序或处理程序)的异步跳转(称为EBB)。这使得指针更新处理程序能够在所指向的对象在正在进行的垃圾收集过程期间已经被移动或者由处理程序移动的情况下更新指针(例如,对象的地址)。在一个示例中,经更新的指针然后被存储在所选择的位置,诸如指针存储区域内的位置。
在一个实施例中,为了确定指针的地址,指针更新处理程序检查ld指令以确定源寄存器,读取源寄存器,并且基于源寄存器的内容计算指针的地址。在又一实施例中,代替如上所述的指针更新处理程序计算指针地址,指针更新处理程序被提供或者具有对指针地址的直接访问。在该实施例中,处理器硬件从例如指令(例如,由下面描述的ld指令指示的EA)获取指针的地址,并且将指针的地址(也被称为指针地址)存储在预定义的位置,诸如所规定的存储器位置或者指针更新处理程序直接可访问的寄存器。
作为一个示例,指针地址可以存储在存储器中的规定位置。例如,可以将要存储指针地址的存储地址规定为紧接在存储在基于事件的跳转处理程序寄存器(EBBHR)中的EBB处理程序地址之前,或者在距该地址规定的一定偏移量处。示例偏移量可以是将指针地址存储在紧接在指针更新处理程序本身的开始之前的存储位置处。如果这样做,则指针更新处理程序仅读取该存储位置以确定指针地址。作为另外的示例,指针地址存储在不需要用于另一目的的现有寄存器中。例如,寄存器可以是诸如性能监测设施等另一设施的部分。而且,地址可以存储在用于存储指针更新处理程序的地址的寄存器EBBHR中。EBBHR可以在EBB发生之后立即由硬件加载指针地址,并且然后,当需要指针地址时,指针更新处理程序将读取该寄存器,并且在将控制返还给应用之前将其恢复为包含指针更新处理程序的开始地址。任何其他寄存器可以类似地使用,只要在指针更新处理程序的执行期间不需要该寄存器,除了指示指针地址之外,并且只要在返回到应用之前可以由指针更新处理程序恢复该寄存器。
用于合并和使用一个或多个实施例的计算环境的一个实施例参考图1进行描述。计算环境100包括例如处理器102(例如,中央处理单元)、存储器104(例如,主存储器)以及一个或多个输入/输出(I/O)设备和/或接口106,其经由例如一个或多个总线108和/或其他连接彼此耦合。
在一个实施例中,处理器102基于由国际商业机器公司提供的Power架构。Power架构的一个实施例在2015年4月9日的国际商业机器公司的“Power ISATM Version 2.07B”(Power ISATM版本2.07B)中描述,其全部内容由此通过引用并入本文。POWER
Figure BDA0001486842620000086
是美国纽约阿蒙克的国际商业机器公司的注册商标。本文中使用的其他名称可以是国际商业机器公司或其他公司的注册商标、商标或产品名称。
在另一示例中,处理器102基于由国际商业机器公司提供的z/架构,并且是服务器的部分,诸如系统z服务器,其实现了z/架构并且也由国际商业机器公司提供。z/架构的一个实施例在2015年3月的
Figure BDA0001486842620000083
Publication No.SA22-7832-10,Eleventh Edition(
Figure BDA0001486842620000082
公开号SA22-7832-10,第十一版)的题为“z/Architecture Principles ofOperation”(z/架构操作原理)的IBM出版物中描述,其全部内容由此通过引用并入本文。在一个示例中,处理器执行也由国际商业机器公司提供的操作系统,诸如z/OS。
Figure BDA0001486842620000084
Figure BDA0001486842620000085
是国际商业机器公司的注册商标。
在又一实施例中,处理器102基于由英特尔提供的Intel架构。
Figure BDA0001486842620000087
是加利福尼亚州圣克拉拉市的英特尔公司的注册商标。另外,处理器102可以基于其他架构。本文中提到的架构仅仅是作为示例提供的。
用于合并和使用一个或多个实施例的计算环境的另一实施例参考图2A进行描述。在该示例中,计算环境200包括例如本地中央处理单元202、存储器204、以及一个或多个输入/输出设备和/或接口206,其经由例如一个或多个总线208和/或其他连接彼此耦合。作为示例,计算环境200可以包括由纽约阿蒙克的国际商业机器公司提供的
Figure BDA0001486842620000088
处理器、zSeries服务器或pSeries服务器;由加利福尼亚州帕洛阿尔托的惠普公司提供的具有Intel Itanium II处理器的HP Superdome;和/或基于由国际商业机器公司、惠普、英特尔、甲骨文或其他公司提供的架构的其他机器。
本地中央处理单元202包括一个或多个本地寄存器210,诸如在环境内的处理期间使用的一个或多个通用寄存器和/或一个或多个专用寄存器。这些寄存器包括表示环境在任何特定时间点的状态的信息。
此外,本地中央处理单元202执行存储在存储器204中的指令和代码。在一个特定示例中,中央处理单元执行存储在存储器204中的仿真器代码212。该代码使得在一个架构中配置的处理环境能够仿真另一架构。例如,仿真器代码212允许基于除了
Figure BDA0001486842620000091
架构之外的架构的机器(诸如zSeries服务器、pSeries服务器、HP Superdome服务器等)仿真Power架构并且执行基于Power架构开发的软件和指令。在另外的示例中,仿真器代码212允许基于除了z/架构之外的架构的机器(诸如PowerPC处理器、pSeries服务器、HP Superdome服务器等)仿真z/架构并且执行基于z/架构开发的软件和指令。其他架构也可以被仿真。Power和PowerPC是国际商业机器公司的商标。
关于仿真器代码212的更多细节参考图2B进行描述。存储在存储器204中的访客指令250包括被开发为在除了本地CPU 202的架构之外的架构中执行的软件指令(例如,与机器指令相关)。例如,访客指令250可以被设计为在PowerPC处理器或z/架构处理器102上执行,但是代替地,在本地CPU 202上仿真,本地CPU 202可以是例如Intel Itanium II处理器。在一个示例中,仿真器代码212包括用于从存储器204获取一个或多个访客指令250并且可选地为所获取的指令提供本地缓冲的指令取回例程252。它还包括用于确定已经获取的访客指令的类型并且将访客指令转换成一个或多个相应的本地指令256的指令转换例程254。该转换包括例如标识要由访客指令执行的功能并且选择一个或多个本地指令来执行该功能。
此外,仿真器代码212包括用于引起本地指令被执行的仿真控制例程260。仿真控制例程260可以引起本地CPU 202执行仿真一个或多个先前获取的访客指令的本地指令的例程,并且在这样的执行结束时将控制返回到指令取回例程以仿真获取下一访客指令或一组访客指令。本地指令256的执行可以包括将数据从存储器204加载到寄存器中;将数据从寄存器存储回存储器;或执行由转换例程确定的某种类型的算术或逻辑运算。
例如,每个例程以软件实现,软件存储在存储器中并且由本地中央处理单元202执行。在其他示例中,一个或多个例程或操作以固件、硬件、软件或其某种组合实现。仿真处理器的寄存器可以使用本地CPU的寄存器210或通过使用存储器204中的位置来仿真。在实施例中,访客指令250、本地指令256和仿真器代码212可以驻留在相同的存储器中,或者可以分布在不同的存储器设备之间。
如本文中使用的,固件包括例如处理器的微代码、毫代码(millicode)和/或宏代码。它包括例如用于实现更高级别机器代码的硬件级指令和/或数据结构。在一个实施例中,其包括例如通常作为包括可信软件的微代码或专用于底层硬件的微代码传送的专有代码,并且控制对系统硬件的操作系统访问。
在一个示例中,获取、转换并且执行的访客指令250是本文中描述的指令。具有一种架构(例如,Power架构或z/架构)的指令从存储器被取回,被转换并且被表示为具有另一架构(例如,z/架构、Power架构、Intel架构等)的本地指令序列256。这些本地指令然后被执行。
根据一个或多个实施例使用的一个指令是用于加载包括对象指针在内的数据的加载双字指令。加载双字指令在Power架构中的一个特定实现参考图3进行描述。在一个示例中,加载双字(ld)指令300包括指示加载操作的操作代码(opcode)字段302a(例如,位0-5)、302b(例如,位30);用于指示寄存器存储加载操作的结果的结果字段(RT)304(例如,位6-10);用于规定要由加载操作使用的寄存器的寄存器字段(RA)306(例如,位11-15);以及由加载操作使用的另一字段(DS)(例如,位16-29)。在一个示例中,字段304-308中的每个彼此分开并且彼此独立;然而,在其他实施例中,可以组合多于一个字段。下面描述关于字段的使用的进一步信息。
在ld指令的操作中,检查要被加载的数据(例如,对象指针)的地址是否在指针存储区域中。如果它在指针存储区域中,则进一步检查要被加载的数据是否指向位于所选择的存储器部分(本文中称为加载监测区域)中的对象。如果要被加载的数据的地址不在指针存储区域中,或者要被加载的数据不指向位于所选择的存储器部分中的对象,则执行常规加载。例如,在一个示例中,执行常规加载双字。
在常规ld指令的操作中:令有效地址(EA)为总和(RA|0)+(DS||0b00)。由EA寻址的存储设备中的双字被加载到RT中。
用于常规ld指令的伪代码的一个示例如下:
如果RA=0 则b←0
否则 b←(RA)
EA←b+EXTS(DS||0b00)
RT←MEM(EA,8)
其中EA是对象指针的地址;并且MEM(EA,8)是对象指针。
然而,如果要被加载的数据的地址在指针存储区域中,并且对象指针确实指向位于经历垃圾收集的所选择的存储器部分中的对象,则处理被中断,从而引起向执行与垃圾收集相关的一个或多个任务(包括更新指针)的更新指针处理程序的基于事件的跳转,如本文中下面进一步描述的。
根据一个或多个实施例,用于ld指令的伪代码的一个示例如下:
如果RA=0 则b←0
否则 b←(RA)
EA←b+EXTS(DS||0b00)
loaded_ea←MEM(EA,8)
如果
Figure BDA0001486842620000111
((指针存储中的EA和loaded_ea在加载监测区域的启用部分中)和BESCRGE LME=0b11)
RT←loaded_ea
其中loaded_ea是对象指针;EA是对象指针的地址;BESCR是指跳转事件状态控制寄存器;GE是指一般启用;并且LME=加载监测启用。
尽管在本文中的示例中,指令格式是用于Power架构的,但是可以将类似的格式用于其他架构。
此外,在另一示例中,可以使用加载双字索引(ldx)指令,其中代替DS 308,在位16-20中存在另一寄存器字段(RB)308,并且位21-30包括opcode 302b的部分。采用这种格式,EA←b+(RB)。
在一个实施例中,如前所述,经历垃圾收集的所选择的存储器部分在本文中被称为加载监测区域。如图4所示,存储器400包括加载监测区域402以及多个对象404。对象之一的对象B 406处于加载监测区域402中,这意味着该对象位于其中正在执行垃圾收集的存储器部分中。因此,如果由于例如垃圾收集过程而导致指针指向的对象已经被移动,则当前指针可能需要被更新。
此外,如本文中使用的,对象区域包括加载监测区域和包括没有经历垃圾收集的对象的存储器区域。
另外,在一个实施例中,存储器400包括指针存储区域410,指针存储区域410包括多个指针。
在该图中,还示出了应用程序420执行ld指令422,该指令试图加载在指针存储区域中的指针B。指针B指向加载监测区域中的对象406,并且因此中断被执行,从而向EBB处理程序424(也称为更新指针处理程序)给与控制。在一个示例中,处理程序424在必要时修改指针B,并且将经修改的指针存储在获取其的位置426中。然后处理返回到被重新执行的指令。
在另外的实施例中,处理程序修改指针,将经修改的指针存储在指令的目标寄存器中,并且处理在ld指令之后的指令处继续,从而仿真指针的加载。在一个或多个实施例中,应用不知道EBB处理,并且简单地接收指针,如前所述。
如上所述,当要被加载的数据(例如,对象指针)的地址在指针存储区域中并且对象指针指向处于存储器的加载监测区域中的对象时,执行中断处理。指针存储区域可以用很多方式来标识,例如包括规定其大小以及在寄存器中的基地址或存储器中的规定位置。例如,如图5A所示,指针存储区域(PSA)寄存器500包括例如包括指针区域基地址的字段502、和包括该区域的大小的字段504。在一个示例中,位0:53标识指针存储区域的开始地址。在该示例中,基地址在与其大小相同的地址边界上对准以便促进实现。例如,256K指针存储区域将在256K边界上对准,并且2K指针存储区域在2K边界上对准。这种对准是一种用于允许指针地址及其大小适合64位寄存器的方法,而不是绝对的要求。可以使用更大的寄存器或多个寄存器进行任何对准。
在该实施例中,位61:63确定指针存储区域的大小,如下所示:
Figure BDA0001486842620000131
加载监测区域也可以以替代的方式被标识。例如,在一个实现中,其大小和基地址存储在寄存器中,诸如图5B所示。如所示出的,加载监测区域寄存器(LMRR)550包括例如包括加载监测区域基地址的字段552、以及包括该区域的大小的字段554。
在一个示例中,加载监测区域基地址包括加载监测区域的高阶位。在该实施例中,假定加载监测区域按照其大小的粒度对准。大小字段被编码,使得每个值对应于规定的大小。例如,如果需要16个可能的大小,则大小字段具有4位。典型的大小是在10MB(兆字节)到超过GB(千兆字节)的数量级。加载监测区域基地址字段中的位数可以从所支持的最小大小导出。例如,如果所支持的最小大小是16MB,则加载监测区域基址字段是40位,因为64-40=24,并且24位地址足以标识在16MB地址边界上对准的任何16MB存储区域。当大小字段指示较小的大小时,则需要较少的位来规定基地址,并且加载监测区域基地址字段中的低阶位被设置为0。
在其他示例中,加载监测区域和/或指针存储区域的大小和基地址可以在存储器位置或用于其他目的的寄存器等中规定。另外,其他信息可以用于规定加载监测区域和/或指针存储区域的地址范围。
根据本发明的实施例的与执行ld指令相关联的逻辑的一个实施例参考图6来进行描述。在一个实现中,处理器的硬件执行发出ld指令的应用,并且处理器硬件对ld进行解码,“步骤600”。在执行ld期间,处理器硬件将要被加载的数据(例如,指针)的地址与例如由PSA寄存器指示的指针存储区域相比较,“询问601”。如果对象指针的地址在指针存储区域中,则处理器硬件进一步将读取的数据与规定经历垃圾回收的所选择的存储器部分的加载监测区寄存器(或其他寄存器或存储器位置)相比较。如果读取的指针指向加载监测区域内的位置,“询问602”,则硬件引起到指针更新处理程序的中断(例如,基于事件的跳转),“步骤606”。指针更新处理程序然后通过从加载指令寄存器计算其地址或通过从预定义的位置读取其来确定指针的地址;从指针存储区域读取指针;根据需要(即,如果其指向的对象在垃圾收集期间或由处理程序移动)修改指针,并且根据需要并且在时间允许时执行其他垃圾收集任务;并且将经修改的指针存储回读取其的位置中,“步骤610”。处理程序然后可以在ld指令处向应用返回控制,并且重新执行指令,“步骤612”。
在另外的示例中,更新处理程序读取ld指令的目标寄存器,并且将经更新的指针存储在目标寄存器中。这具有仿真指针加载的效果,并且因此,处理程序可以在ld指令之后的指令处将向应用返回控制。
返回“询问601”,如果指针不在指针存储区域中或者指针没有指向加载监测区域内的位置,“询问602”,则处理器硬件不引起基于事件的跳转,而是执行ld指令而没有中断,“步骤614”。之后,处理继续到下一指令,“步骤616”。
如本文中描述的,通过以下方式优化了垃圾收集:允许正在访问没有被垃圾收集的存储器区域中的对象的应用在垃圾收集期间继续处理(而不是被暂停),并且允许正在访问被垃圾收集的存储器区域中的对象的应用在短暂的不明显的延迟之后恢复处理。这是通过在指针的加载过程期间确定对象指针的地址位于指针存储区域中并且被指向的对象位于经历垃圾收集的所选择的存储器部分中来实现的,并且因此,中断被发出到管理指针的处理程序。在一个有利的实现中,指针可用于处理程序,并且因此处理程序不必计算指针的地址,从而减少了更新指针所需要的指令的数目,并且改善了计算机处理。
根据一个或多个实施例的与促进垃圾收集相关联的逻辑的一个实施例参考图7进行描述。最初,在处理器内执行的处理程序(例如,应用级处理程序)经由例如由处理器硬件发出的中断(例如,不涉及操作系统的轻量级中断),“步骤702”,来获取处理控制,“步骤700”。由处理程序基于加载指令(例如,ld或ldx)的执行以及要被加载的对象指针的地址位于指针存储区域中并且对象指针指示经历垃圾收集的所选择的存储器区域内的位置的确定来获取处理控制,“步骤704”。在一个示例中,对象指针的地址通过加载指令(例如,EA)而被获取,并且与和指针存储区域相关的数据相比较以确定对象指针是否位于指针存储区域内,“步骤706”。基于比较指示对象指针的地址位于指针存储区域内,将对象指针与和所选择的存储器部分相关的信息相比较以确定对象指针指示所选择的存储器部分内的位置,“步骤708”。在一个实施例中,作为示例,指针存储区域由可以包括基地址和大小的寄存器、或存储位置指示,“步骤710”。此外,作为示例,所选择的存储器部分由可以包括基地址和大小的寄存器、或存储位置指示,“步骤712”。
基于获取处理控制,处理程序获取对象指针的地址,“步骤720”。在一个示例中,根据ld指令的执行确定地址,“步骤722”,或从预定义的位置读取地址,“步骤724”。处理程序使用该地址来从在例如寄存器或存储器位置中指示的指针存储区域获取(例如,读取)对象指针,“步骤726”。
处理程序然后确定对象指针是否要被修改,“询问730”。例如,处理程序确定对象指针指向的对象是否已经被移动。如果对象已经被移动,则修改对象指针,“步骤735”。之后,将经修改的对象指针存储在读取其的位置中(例如,在指针存储区域内的位置中),“步骤740”,并且处理继续到ld指令,该指令被重新执行;或者它可以存储在由加载指令规定的位置,诸如例如在由加载指令规定的目标寄存器中,并且处理继续到在ld指令之后的指令。
返回“询问730”,如果对象指针没有被修改,则将其存储在例如加载指令的目标寄存器中,并且处理程序在ld之后的指令处向应用返回控制,“步骤732”。
有利地,在一个或多个实施例中,通过允许没有访问所选择的存储器部分中的对象的应用在垃圾收集期间继续处理(即,不需要暂停)来促进垃圾收集,“750”。而且,正在访问所选择的存储器部分中的对象的应用只是被短暂地延迟。
如本文中描述的,一个或多个实施例将对象指针的地址直接提供给处理程序,而不要求处理程序计算对象指针的地址。一个或多个实施例消除了由处理程序进行的ld指令的解码以确定源地址和目的地地址,源通用寄存器的内容的读取,以及计算指针的有效地址,同样,代替地,处理程序从预定义的位置读取地址,并且不需要计算它。一个或多个实施例有利地使得需要垃圾收集的应用能够进入对时间敏感的环境,诸如高速交易、实时机械控制、时间敏感的游戏等。一个或多个实施例不增加应用的占用空间,因为不需要在应用中插入附加指令,也不需要对操作系统进行任何修改。此外,应用不需要被修改。
根据一个或多个实施例,在每次访问对象指针时,如果指针位于指针存储区域中并且指向正在被垃圾收集的存储器区域中的对象,则处理可以被转移到实时垃圾收集处理程序(例如,指针更新处理程序)。
如本文中描述的,促进了垃圾收集。在一个实施例中,由在计算环境的处理器内执行的处理程序来获取处理控制,获取处理控制基于加载指令的执行以及要被加载的对象指针的地址位于指针存储区域中并且对象指针指示经历垃圾收集的所选择的存储器部分内的位置的确定。基于由处理程序获取处理控制,处理程序从指针存储区域获取对象指针,对象指针指示要由对象指针指向的对象的位置。处理程序确定对象指针是否要被修改,并且基于确定对象指针要被修改,修改对象指针以提供经修改的对象指针。基于修改对象指针,将经修改的对象指针存储在所选择的位置中,诸如指针存储区域内的位置或由加载指令规定的位置。
有利地,这允许使用没有经历垃圾收集的存储器区域中的对象的应用在垃圾收集期间继续处理而没有中断,允许使用经历垃圾收集的存储器区域中的对象的应用在非常短暂的不明显的延迟之后继续处理,并且不需要使用特殊的指令或程序修改,从而提高了性能。
在一个另外的实施例中,经历垃圾收集的所选择的存储器部分是也包括没有经历垃圾收集的一个或多个其他对象的对象区域的部分,并且有利地,访问没有经历垃圾收集的对象区域的一个或多个应用在垃圾收集期间继续处理。例如,它们继续执行而没有中断。此外,在一个实施例中,访问指示经历垃圾收集的所选择的存储器部分中的对象的对象指针的应用在处理程序(例如,应用级处理程序)处理指针期间在非常短暂的延迟之后立即恢复处理。这使得应用能够用于时间敏感的处理,因为没有应用被延迟足够明显的一段时间。
另外,一个或多个实施例可以用于除了垃圾收集之外的操作。例如,由于可以使用本文中描述的一个或多个实施例来检测何时加载指向规定的存储地址范围的指针,所以可以使用它来提供关于即将进入受限的存储器空间的预先警告。在这种情况下,存储器区域被初始化为受限的存储器区域,并且指针存储区域被设置为指示存储器指针的位置。随后,当指针存储区域中指向受限区域的指针被读取时,发生EBB。然后,EBB处理程序可以完全防止访问,向安全监测程序提供预先警告信号,即访问即将要针对存储器的限制区域进行或执行某个其他所选择的动作。其他相关的应用在希望关于对即将对规定的存储器区域进行的预期访问的警告的情况下是可能的。
用于由处理程序基于规定的条件采取动作的逻辑的一个实施例参考图8进行描述。在一个示例中,解码加载指令,“步骤800”。(在另一实施例中,它可以是另一种类型的指令)。加载指令可以是各种加载指令之一,作为示例,包括ld指令、ldx指令或另一加载指令。加载指令被解码,并且基于解码,确定对象指针。确定对象指针是否指示规定的存储器区域中的对象,“询问802”。该存储器区域是例如由于某种原因或另一原因而被限制的规定的存储地址范围。如果指针没有指示规定的存储器区域中的对象,则按常规执行加载(或其他指令),“步骤804”。然后处理在下一指令处继续,“步骤806”。
然而,返回“询问802”,如果指针确实指示规定的存储器区域中的对象,则由处理程序(例如,应用级处理程序)获取控制,“步骤810”。例如,处理器硬件执行到处理程序的中断(例如,不涉及操作系统的轻量级中断)。然后,处理程序可以采取一个或多个动作,“步骤812”。例如,在一个实施例中,处理程序提供警告,可选地防止对规定的存储器区域的访问,并且然后在下一指令处继续处理,“步骤814”。作为另一示例,例如,处理程序获取指针地址(例如,从预定义的位置,或从指令中计算),读取指针,修改指针,将经修改的指针存储回读取其的位置中,向指令返回控制并且重新执行该指令,使得规定的存储器区域不被访问,“步骤816”。还存在其他可能性。
如本文中使用的,除非另有说明,否则存储设备、中央存储设备、主存储设备、存储器和主存储器可以明确地或通过使用隐含地可互换地使用。
一个或多个实施例可以涉及云计算。
首先应当理解,尽管本公开包括关于云计算的详细描述,但是其中记载的技术方案的实现却不限于云计算环境。相反,本发明的实施例能够结合现在已知或以后开发的任何其他类型的计算环境来实现。
云计算是一种服务交付模式,用于对能够以最小的管理成本或与服务提供者进行最少的交互就能快速部署和释放的共享的可配置计算资源池(例如,网络、网络带宽、服务器、处理、存储器、存储装置、应用、虚拟机和服务)进行方便、按需的网络访问。这种云模式可以包括至少五个特征、至少三个服务模型和至少四个部署模型。
特征如下:
按需自助式服务:云的消费者能够在无需与服务提供者进行人为交互的情况下单方面自动地按需部署诸如服务器时间和网络存储等计算能力。
广泛的网络接入:计算能力可以在网络上获取并且通过标准机制访问,这种标准机制促进了通过不同种类的瘦或厚客户机平台(例如,移动电话、膝上型电脑和PDA)对云的使用。
资源池:提供者的计算资源被归入资源池以使用多租户(multi-tenant)模式服务于多个消费者,其中按需将不同的实体资源和虚拟资源动态地分配和再分配。存在一定程度的位置不相关,因为一般情况下,消费者不能控制或并不知晓所提供的资源的确切位置,但是可以在较高抽象程度上规定位置(例如,国家、州或数据中心)。
迅速弹性:能够迅速且有弹性地(有时是自动地)部署计算能力,以实现快速扩展,并且能迅速释放来快速缩小。在消费者看来,用于部署的可用计算能力往往显得是无限的,并能在任意时候都能获取任意数量的计算能力。
可测量的服务:云系统通过利用适于服务类型(例如,存储、处理、带宽和活跃用户帐号)的某种抽象程度的计量能力,自动地控制和优化资源效用。可以监测、控制和报告资源使用情况,为服务提供者和消费者双方提供透明度。
服务模型如下:
软件即服务(SaaS):向消费者提供的能力是使用提供者在云基础架构上运行的应用。可以通过诸如网络浏览器的瘦客户机接口(例如,基于网络的电子邮件)从各种客户机设备访问应用。除了有限的特定于用户的应用配置设置外,消费者既不管理也不控制包括网络、服务器、操作系统、存储、乃至单个应用能力等的底层云基础架构。
平台即服务(PaaS):向消费者提供的能力是在云基础架构上部署消费者创建或获取的应用,这些应用利用提供者支持的程序设计语言和工具创建。消费者既不管理也不控制包括网络、服务器、操作系统或存储的底层云基础架构,但对其部署的应用具有控制权,对应用托管环境配置可能也具有控制权。
基础架构即服务(IaaS):向消费者提供的能力是消费者能够在其中部署并运行包括操作系统和应用的任意软件的处理、存储、网络和其他基础计算资源。消费者既不管理也不控制底层的云基础架构,但是对操作系统、存储和其部署的应用具有控制权,对选择的网络组件(例如,主机防火墙)可能具有有限的控制权。
部署模型如下:
私有云:云基础架构单独为某个组织运行。云基础架构可以由该组织或第三方管理并且可以存在于该组织内部或外部。
共同体云:云基础架构被若干组织共享并支持有共同利害关系(例如,任务使命、安全要求、政策和合规考虑)的特定共同体。共同体云可以由共同体内的多个组织或第三方管理并且可以存在于该共同体内部或外部。
公共云:云基础架构向公众或大型产业群提供并且由出售云服务的组织拥有。
混合云:云基础架构由两个或更多部署模型的云(私有云、共同体云或公共云)组成,这些云依然是独特的实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如,用于云之间的加载平衡的云突发)绑定在一起。
云计算环境是面向服务的,特点集中在无状态性、低耦合性、模块性和语意的互操作性。云计算的核心是包含互连节点网络的基础架构。
现在参考图9,其中显示了云计算节点的一个示例。图1显示的云计算节点10仅仅是适合的云计算节点的一个示例,不应对本发明的实施例的功能和使用范围带来任何限制。总之,云计算节点10能够被用来实现和/或执行以上所述的任何功能。
云计算节点10具有计算机系统/服务器12,其可与众多其他通用或专用计算系统环境或配置一起操作。众所周知,适于与计算机系统/服务器12一起操作的计算系统、环境和/或配置的示例包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任意系统的分布式云计算技术环境,等等。
计算机系统/服务器12可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机系统/服务器12可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本机或远程计算系统存储介质上。
如图9所示,云计算节点10中的计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些架构包括但不限于工业标准架构(ISA)总线,微通道架构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是能够被计算机系统/服务器12访问的任意可获取的介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其他可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如,“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如,CD-ROM,DVD-ROM或者其他光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如,至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用、其他程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如,键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其他计算设备进行通信的任何设备(例如,网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如,局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其他模块通信。应当明白,尽管图中未示出,其他硬件和/或软件模块可以与计算机系统/服务器12一起操作,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
现在参考图10,其中显示了示例性的云计算环境50。如图所示,云计算环境50包括云计算消费者使用的本机计算设备可以与其相通信的一个或者多个云计算节点10,本机计算设备例如可以是个人数字助理(PDA)或移动电话54A,台式电脑54B、笔记本电脑54C和/或汽车计算机系统54N。云计算节点10之间可以相互通信。可以在包括但不限于如上所述的私有云、共同体云、公共云或混合云或者它们的组合的一个或者多个网络中将云计算节点10进行物理或虚拟分组(图中未显示)。这样,云的消费者无需在本机计算设备上维护资源就能请求云计算环境50提供的基础架构即服务(IaaS)、平台即服务(PaaS)和/或软件即服务(SaaS)。应当理解,图10显示的各类计算设备54A-N仅仅是示意性的,云计算节点10以及云计算环境50可以与任意类型网络上和/或网络可寻址连接的任意类型的计算设备(例如,使用网络浏览器)通信。
现在参考图11,其中显示了云计算环境50(图10)提供的一组功能抽象层。首先应当理解,图11所示的组件、层以及功能都仅仅是示意性的,本发明的实施例不限于此。如所示,提供下列层和对应功能:
硬件和软件层60包括硬件和软件组件。硬件组件的示例包括:主机61;基于RISC(精简指令集计算机)架构服务器62;服务器63;刀片服务器64;存储设备65;网络和网络组件66。在一些实施例中,软件组件包括网络应用服务器软件67和数据库软件68。
虚拟化层70提供一个抽象层,该层可以提供下列虚拟实体的示例:虚拟服务器71、虚拟存储72、虚拟网络73(包括虚拟私有网络)、虚拟应用和操作系统74,以及虚拟客户端75。
在一个示例中,管理层80可以提供下述功能:资源供应功能81:提供用于在云计算环境中执行任务的计算资源和其他资源的动态获取;计量和定价功能82:在云计算环境内对资源的使用进行成本跟踪,并为此提供帐单和发票。在一个示例中,该资源可以包括应用软件许可。安全功能:为云的消费者和任务提供身份认证,为数据和其他资源提供保护。用户门户功能83:为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能84:提供云计算资源的分配和管理,以满足必需的服务水平。服务水平协议(SLA)计划和履行功能85:为根据SLA预测的对云计算资源未来需求提供预先安排和供应。
工作负载层90提供可以利用云计算环境的功能的示例。可以从这一层提供的工作负载和功能的示例包括:映射和导航91;软件开发和生命周期管理92;虚拟教室教育交付93;数据分析处理94;事物处理95;以及本发明的一个或多个实施例的垃圾收集处理96。
本文中参考根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图来描述本发明的各方面。将理解,流程图和/或框图中的每个框以及流程图和/或框图中的框的组合可以通过计算机可读程序指令来实现。
这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机的处理器或其他可编程数据处理装置执行的指令创建用于实现在流程图和/或框图的一个或多个框中规定的功能/动作的装置。这些计算机可读程序指令还可以被存储在计算机可读存储介质中,该计算机可读存储介质可以指导计算机、可编程数据处理装置和/或其他设备以特定方式运行,使得其中存储有指令的计算机可读存储介质包括制造品,其包括实现在流程图和/或框图的一个或多个框中规定的功能/动作的各方面的指令。
计算机可读程序指令还可以被加载到计算机、其他可编程数据处理装置或其他设备上,以引起一系列操作步骤在计算机、其他可编程装置或其他设备上被执行以产生计算机实现的过程,使得在计算机、其他可编程装置或其他设备上执行的指令实现在流程图和/或框图的一个或多个框中规定的功能/动作。
附图中的流程图和框图示出了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。就这一点而言,流程图或框图中的每个框可以表示包括用于实现一个或多个规定的逻辑功能的一个或多个可执行指令的指令的模块、段或部分。在一些替代实现中,框中提到的功能可以不按照附图中标注的顺序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者框有时可以以相反的顺序执行。还要注意,框图和/或流程图中的每个框以及框图和/或流程图中的框的组合可以由执行规定的功能或动作或者执行专用硬件和计算机指令的组合的基于专用硬件的系统来实现。
除了以上之外,一个或多个方面可以由提供客户环境管理的服务提供商提供、供应、部署、管理、服务等。例如,服务提供商可以创建、维护、支持等为一个或多个客户执行一个或多个方面的计算机代码和/或计算机基础设施。作为回报,例如,服务提供商可以根据订购和/或收费协议从客户接收支付。另外地或替代地,服务提供商可以从向一个或多个第三方销售广告内容接收支付。
在一方面中,可以部署应用用于执行一个或多个实施例。作为一个示例,部署应用包括提供可操作来执行一个或多个实施例的计算机基础设施。
作为另一方面,可以部署计算基础设施,包括将计算机可读代码集成到计算系统中,其中代码与计算系统结合能够执行一个或多个实施例。
作为又一方面,可以提供用于集成计算基础设施的过程,包括将计算机可读代码集成到计算机系统中。计算机系统包括计算机可读介质,其中计算机介质包括一个或多个实施例。代码与计算机系统结合能够执行一个或多个实施例。
尽管以上描述了各种实施例,但是这些仅仅是示例。例如,可以使用其他架构的计算环境来并入和使用一个或多个实施例。此外,可以使用不同的指令、指令格式、指令字段和/或指令值。很多变化是可能的。
此外,其他类型的计算环境可以受益并且被使用。作为示例,适合于存储和/或执行程序代码的数据处理系统是可用的,其包括通过系统总线直接或间接耦合到存储器元件的至少两个处理器。存储器元件例如包括在程序代码的实际执行期间使用的本地存储器、大容量存储设备、和提供至少一些程序代码的临时存储以便减少在执行期间必须从大容量存储设备获取代码的次数的高速缓冲存储器。
输入/输出或I/O设备(包括但不限于键盘、显示器、指示设备、DASD、磁带、CD、DVD、拇指驱动器和其他存储介质等)可以直接或通过中间I/O控制器耦合到系统。网络适配器也可以耦合到系统,以使得数据处理系统能够通过中间私人或公共网络与其他数据处理系统或远程打印机或存储设备耦合。调制解调器、电缆调制解调器和以太网卡只是少数几种可用类型的网络适配器。
本文中使用的术语仅用于描述特定实施例的目的,而不意图是限制性的。如本文中使用的,除非上下文另外清楚地指出,否则单数形式“一(a)”、“一个(an)”和“该(the)”也旨在包括复数形式。应该进一步理解,当在本说明书中使用时,术语“包括(comprises)”和/或“包含(comprising)”规定所述特征、整数、步骤、操作、元素和/或部件的存在,但是不排除一个或多个其他特征、整数、步骤、操作、元素、部件和/或其组的存在或添加。
如果有的话,下面的权利要求中的所有装置或步骤加上功能元件的对应结构、材料、动作和等同物旨在包括用于结合其他要求保护的元件执行功能的任何结构、材料或动作,如具体地要求保护的。已经出于说明和描述的目的呈现了对一个或多个实施例的描述,但是并非旨在穷举或限于所公开的形式。对于本领域的普通技术人员来说,很多修改和变化将是显而易见的。选择和描述实施例是为了最好地解释各个方面和实际应用,并且使本领域的其他普通技术人员能够理解具有适合于预期的特定用途的各种修改的各种实施例。

Claims (17)

1.一种用于促进计算环境内的垃圾收集的计算机程序产品,所述计算机程序产品包括:
计算机可读存储介质,由处理电路可读并且存储用于由所述处理电路执行以执行方法的指令,所述方法包括:
由在所述计算环境的处理器内执行的处理程序获取处理控制,所述获取处理控制基于加载指令的执行以及要被加载的对象指针的地址位于指针存储区域中并且所述对象指针指示经历垃圾收集的所选择的存储器部分内的位置的确定,其中将所述对象指针的所述地址与和所述指针存储区域相关的数据相比较,以确定所述对象指针的所述地址是否位于所述指针存储区域内;基于所述比较确定所述对象指针的所述地址位于所述指针存储区域内,将所述对象指针与和所述所选择的存储器部分相关的信息相比较,以确定所述对象指针指示所述所选择的存储器部分内的所述位置;
基于由所述处理程序获取处理控制,由所述处理程序从所述指针存储区域获取所述对象指针,所述对象指针指示由所述对象指针指向的对象的位置;
由所述处理程序确定所述对象指针是否要被修改;
基于确定所述对象指针要被修改,由所述处理程序修改所述对象指针以提供经修改的对象指针;以及
基于修改所述对象指针,将所述经修改的对象指针存储在所选择的位置中。
2.根据权利要求1所述的计算机程序产品,其中所述所选择的位置是所述指针存储区域内的位置或者由所述加载指令规定的位置。
3.根据权利要求1所述的计算机程序产品,其中所述获取处理控制经由由处理器硬件发出的中断,所述中断基于所述加载指令的执行以及要被加载的所述对象指针的所述地址位于所述指针存储区域中并且所述对象指针指示经历垃圾收集的所述所选择的存储器部分内的所述位置的确定而被发出。
4.根据权利要求1所述的计算机程序产品,其中经历垃圾收集的所述所选择的存储器部分是包括没有经历垃圾收集的一个或多个其他对象的对象区域的部分,并且其中访问没有经历垃圾收集的所述对象区域的一个或多个应用在垃圾收集期间继续处理。
5.根据权利要求1所述的计算机程序产品,其中所述指针存储区域包括连续存储器区域,所述连续存储器区域包括多个对象指针地址。
6.根据权利要求1所述的计算机程序产品,其中所述指针存储区域由存储器内的位置或寄存器中的一项来指示。
7.根据权利要求1所述的计算机程序产品,其中所述所选择的存储器部分由存储器内的位置或寄存器中的一项来指示。
8.根据权利要求7所述的计算机程序产品,其中所述寄存器包括所述所选择的存储器部分的基地址和所述所选择的存储器部分的大小。
9.根据权利要求1所述的计算机程序产品,其中所述加载指令包括用于规定加载操作的一个或多个操作代码字段、要被用于获取所述对象指针的结果字段、以及要在所述加载操作中被使用的一个或多个其他字段。
10.一种用于促进计算环境内的垃圾收集的计算机系统,所述计算机系统包括:
存储器;以及
与所述存储器通信的处理器,其中所述计算机系统被配置为执行方法,所述方法包括:
由在所述计算环境的处理器内执行的处理程序获取处理控制,所述获取处理控制基于加载指令的执行以及要被加载的对象指针的地址位于指针存储区域中并且所述对象指针指示经历垃圾收集的所选择的存储器部分内的位置的确定,其中将所述对象指针的所述地址与和所述指针存储区域相关的数据相比较,以确定所述对象指针的所述地址是否位于所述指针存储区域内;基于所述比较确定所述对象指针的所述地址位于所述指针存储区域内,将所述对象指针与和所述所选择的存储器部分相关的信息相比较,以确定所述对象指针指示所述所选择的存储器部分内的所述位置;
基于由所述处理程序获取处理控制,由所述处理程序从所述指针存储区域获取所述对象指针,所述对象指针指示由所述对象指针指向的对象的位置;
由所述处理程序确定所述对象指针是否要被修改;
基于确定所述对象指针要被修改,由所述处理程序修改所述对象指针以提供经修改的对象指针;以及
基于修改所述对象指针,将所述经修改的对象指针存储在所选择的位置中。
11.根据权利要求10所述的计算机系统,其中所述获取处理控制经由由处理器硬件发出的中断,所述中断基于所述加载指令的执行以及要被加载的所述对象指针的所述地址位于所述指针存储区域中并且所述对象指针指示经历垃圾收集的所述所选择的存储器部分内的所述位置的确定而被发出。
12.根据权利要求10所述的计算机系统,其中经历垃圾收集的所述所选择的存储器部分是包括没有经历垃圾收集的一个或多个其他对象的对象区域的部分,并且其中访问没有经历垃圾收集的所述对象区域的一个或多个应用在垃圾收集期间继续处理。
13.根据权利要求10所述的计算机系统,其中所述所选择的位置是所述指针存储区域内的位置或者由所述加载指令规定的位置。
14.一种促进计算环境内的垃圾收集的计算机实现的方法,所述计算机实现的方法包括:
由在所述计算环境的处理器内执行的处理程序获取处理控制,所述获取处理控制基于加载指令的执行以及要被加载的对象指针的地址位于指针存储区域中并且所述对象指针指示经历垃圾收集的所选择的存储器部分内的位置的确定,其中将所述对象指针的所述地址与和所述指针存储区域相关的数据相比较,以确定所述对象指针的所述地址是否位于所述指针存储区域内;基于所述比较确定所述对象指针的所述地址位于所述指针存储区域内,将所述对象指针与和所述所选择的存储器部分相关的信息相比较,以确定所述对象指针指示所述所选择的存储器部分内的所述位置;
基于由所述处理程序获取处理控制,由所述处理程序从所述指针存储区域获取所述对象指针,所述对象指针指示由所述对象指针指向的对象的位置;
由所述处理程序确定所述对象指针是否要被修改;
基于确定所述对象指针要被修改,由所述处理程序修改所述对象指针以提供经修改的对象指针;以及
基于修改所述对象指针,将所述经修改的对象指针存储在所选择的位置中。
15.根据权利要求14所述的计算机实现的方法,其中所述获取处理控制经由由处理器硬件发出的中断,所述中断基于所述加载指令的执行以及要被加载的所述对象指针位于所述指针存储区域中并且所述对象指针指示经历垃圾收集的所述所选择的存储器部分内的所述位置的确定而被发出。
16.根据权利要求14所述的计算机实现的方法,其中经历垃圾收集的所述所选择的存储器部分是包括没有经历垃圾收集的一个或多个其他对象的对象区域的部分,并且其中访问没有经历垃圾收集的所述对象区域的一个或多个应用在垃圾收集期间继续处理。
17.一种用于促进计算环境内的处理的计算机程序产品,所述计算机程序产品包括:
计算机可读存储介质,由处理电路可读并且存储用于由所述处理电路执行以执行方法的指令,所述方法包括:
由在所述计算环境的处理器内执行的处理程序获取处理控制,所述获取处理控制基于要被访问的对象指针指示所规定的存储器区域内的位置的确定,其中将所述对象指针与所规定的存储器区域内相关的信息相比较,以确定所述对象指针指示所规定的存储器区域内的位置;以及
基于由所述处理程序获取处理控制,由所述处理程序采取动作,所述采取动作包括以下中的至少一项:提供警告;防止对所述所规定的存储器区域的访问;或者修改所述对象指针并且存储经修改的所述对象指针。
CN201680031331.9A 2015-06-30 2016-06-21 没有使用的特殊指令的垃圾收集 Active CN107636624B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US14/755,748 2015-06-30
US14/755,748 US10176093B2 (en) 2015-06-30 2015-06-30 Pauseless location and object handle based garbage collection
US14/941,558 US10180902B2 (en) 2015-06-30 2015-11-14 Pauseless location and object handle based garbage collection
US14/941,558 2015-11-14
PCT/IB2016/053675 WO2017001967A1 (en) 2015-06-30 2016-06-21 Garbage collection absent use of special instructions

Publications (2)

Publication Number Publication Date
CN107636624A CN107636624A (zh) 2018-01-26
CN107636624B true CN107636624B (zh) 2021-06-15

Family

ID=57607955

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680031331.9A Active CN107636624B (zh) 2015-06-30 2016-06-21 没有使用的特殊指令的垃圾收集

Country Status (6)

Country Link
US (1) US10180902B2 (zh)
JP (1) JP6697486B2 (zh)
CN (1) CN107636624B (zh)
DE (1) DE112016001686B4 (zh)
GB (1) GB2556547B (zh)
WO (1) WO2017001967A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10783073B2 (en) * 2018-02-23 2020-09-22 International Business Machines Corporation Chronologically ordered out-of-place update key-value storage system
US10802965B2 (en) * 2019-02-05 2020-10-13 Microsoft Technology Licensing, Llc Reducing synchronization reliance in garbage collection marking

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0442338A (ja) * 1990-06-07 1992-02-12 Fuji Xerox Co Ltd ガーベッジコレクションシステムにおけるアクセス可能なオブジェクトの判別方法
CN1236921A (zh) * 1998-03-06 1999-12-01 太阳微系统有限公司 用于计算机存储器的世代动态管理的方法和装置

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5088036A (en) 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
US5560003A (en) * 1992-12-21 1996-09-24 Iowa State University Research Foundation, Inc. System and hardware module for incremental real time garbage collection and memory management
JPH06230963A (ja) * 1993-01-29 1994-08-19 Oki Electric Ind Co Ltd メモリアクセス制御装置
JPH09106377A (ja) * 1995-10-11 1997-04-22 Casio Comput Co Ltd メモリ管理装置
US6098089A (en) 1997-04-23 2000-08-01 Sun Microsystems, Inc. Generation isolation system and method for garbage collection
US5920876A (en) 1997-04-23 1999-07-06 Sun Microsystems, Inc. Performing exact garbage collection using bitmaps that identify pointer values within objects
US5873105A (en) * 1997-06-26 1999-02-16 Sun Microsystems, Inc. Bounded-pause time garbage collection system and method including write barrier associated with a source instance of a partially relocated object
CA2321787C (en) 1998-03-03 2007-05-15 Geodesic Systems, Inc. Transparent garbage collection of resources
US6874074B1 (en) 2000-11-13 2005-03-29 Wind River Systems, Inc. System and method for memory reclamation
DE10329680A1 (de) * 2003-07-01 2005-02-10 Universität Stuttgart Prozessorarchitektur für exakte Zeigeridentifizierung
US7469324B2 (en) * 2005-01-07 2008-12-23 Azul Systems, Inc. System and method for concurrent compacting self pacing garbage collection using loaded value and access barriers
US8108628B2 (en) * 2003-08-04 2012-01-31 Azul Systems, Inc. Processor instruction used to perform a matrix test to generate a memory-related trap
US8131955B2 (en) 2004-04-15 2012-03-06 Microsoft Corporation Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles
US7287049B1 (en) 2004-06-29 2007-10-23 Sun Microsystems, Inc. Tracking minimum mutator utilization (MMU) constraints in a garbage-collection system
US7313566B1 (en) 2004-12-23 2007-12-25 Sun Microsystems, Inc. Method and apparatus for isolating selected heap objects using a faulting address trap
US8452938B1 (en) * 2004-12-30 2013-05-28 Azul Systems, Inc. Garbage collection with memory quick release
US7647458B1 (en) * 2004-12-30 2010-01-12 Azul Systems, Inc. Garbage collection
US20060248130A1 (en) * 2005-04-22 2006-11-02 Steffen Grarup Process and system for real-time relocation of objects during garbage collection
JP2007026368A (ja) * 2005-07-21 2007-02-01 Canon Inc システムlsi用マルチタスクos
US7512745B2 (en) 2006-04-28 2009-03-31 International Business Machines Corporation Method for garbage collection in heterogeneous multiprocessor systems
US7900011B2 (en) 2007-07-19 2011-03-01 International Business Machines Corporation Apparatus, system, and method for improving system performance in a large memory heap environment
US20090063595A1 (en) 2007-09-05 2009-03-05 Mark Graham Stoodley Method and apparatus for updating references to objects in a garbage collection operation
US8612493B2 (en) * 2008-10-30 2013-12-17 International Business Machines Corporation Allocation cache premarking for snap-shot-at-the-beginning concurrent mark-and-sweep collector
US8402218B2 (en) 2009-12-15 2013-03-19 Microsoft Corporation Efficient garbage collection and exception handling in a hardware accelerated transactional memory system
US8327109B2 (en) 2010-03-02 2012-12-04 Advanced Micro Devices, Inc. GPU support for garbage collection
US8601036B2 (en) 2011-03-23 2013-12-03 International Business Machines Corporation Handling persistent/long-lived objects to reduce garbage collection pause times
JP6044181B2 (ja) 2012-08-24 2016-12-14 富士通株式会社 ガーベジコレクションのための情報処理方法、プログラム及び装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0442338A (ja) * 1990-06-07 1992-02-12 Fuji Xerox Co Ltd ガーベッジコレクションシステムにおけるアクセス可能なオブジェクトの判別方法
CN1236921A (zh) * 1998-03-06 1999-12-01 太阳微系统有限公司 用于计算机存储器的世代动态管理的方法和装置

Also Published As

Publication number Publication date
GB2556547A (en) 2018-05-30
DE112016001686B4 (de) 2023-10-12
GB2556547B (en) 2021-07-14
US20170004076A1 (en) 2017-01-05
CN107636624A (zh) 2018-01-26
JP2018524696A (ja) 2018-08-30
WO2017001967A1 (en) 2017-01-05
DE112016001686T5 (de) 2017-12-28
GB201801041D0 (en) 2018-03-07
US10180902B2 (en) 2019-01-15
JP6697486B2 (ja) 2020-05-20

Similar Documents

Publication Publication Date Title
US10467135B2 (en) Multi-section garbage collection
US9720824B2 (en) Garbage collection handler to update object pointers
US10176093B2 (en) Pauseless location and object handle based garbage collection
US10713139B2 (en) System level testing of multi-threading functionality including building independent instruction streams while honoring architecturally imposed common fields and constraints
US11010168B2 (en) Effectiveness and prioritization of prefetches
KR102313021B1 (ko) 전용 캐시에서 캐시 라인의 배타적 홀드를 연장하기 위한 퍼실리티
AU2018208453B2 (en) Temporarily suppressing processing of a restrained storage operand request
CN107636624B (zh) 没有使用的特殊指令的垃圾收集
JP7413371B2 (ja) 部分的に完了された命令の移行
US11151267B2 (en) Move data and set storage key based on key function control
US20240069944A1 (en) Coordinated hooking mechanism for checkpointing virtual machines
US10831480B2 (en) Move data and set storage key instruction

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant