CN111566626A - 并发复制垃圾收集的复制和转发 - Google Patents

并发复制垃圾收集的复制和转发 Download PDF

Info

Publication number
CN111566626A
CN111566626A CN201880085156.0A CN201880085156A CN111566626A CN 111566626 A CN111566626 A CN 111566626A CN 201880085156 A CN201880085156 A CN 201880085156A CN 111566626 A CN111566626 A CN 111566626A
Authority
CN
China
Prior art keywords
thread
copy
data
replication
object header
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.)
Granted
Application number
CN201880085156.0A
Other languages
English (en)
Other versions
CN111566626B (zh
Inventor
A·米希克
J·希尤
I·德索扎
F·杰瑞米克
C·R·杰拉希尔
D·皮维科内
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
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN111566626A publication Critical patent/CN111566626A/zh
Application granted granted Critical
Publication of CN111566626B publication Critical patent/CN111566626B/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
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • 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
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • 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/1016Performance improvement

Abstract

提供一种在并发复制垃圾收集操作中优化数据对象的复制的方法。在一个实施例中,标识作为所述垃圾收集操作的部分的要复制的数据对象的源副本。由主要访问线程发起将源副本复制到目标位置。复制的发起包括为目标位置中的目标对象创建一个临时目标对象头部,该头部包含一个指示符,指示复制正在进行中。在进行复制时,只要指示符指示复制正在进行中,尝试使用数据对象的任何其他访问线程的执行将被扣住。一旦复制完成后,将目标对象头部替换为源对象头部的副本,重置指示符。

Description

并发复制垃圾收集的复制和转发
技术领域
一般来说,本发明的实施例涉及计算机存储器管理。具体地,本发明的实施例涉及一种用于在并发复制垃圾收集操作中优化数据对象的复制的方法。
背景技术
在现代计算机处理环境中,对物理或虚拟的计算机系统存储器的有效管理变得越来越重要。内存的内容通常会随着计算机系统上运行的应用程序线程创建、使用和丢弃新的数据对象而不断变化。但是,有时应用程序线程使用的对象在使用之后并没有被完全丢弃,从而导致为从未使用过的对象保留的内存得以保留。随着时间的流逝,这可能导致内存中充满了越来越多的未使用数据对象,从而使可用于新数据对象的内存空间减少,并降低了应用程序线程处理的效率。
为了解决这个问题,大多数计算机系统采用称为垃圾收集(GC)的操作。GC操作分析内存或其一部分,并删除未使用的数据对象。GC可以使用几种不同的策略之一来完成此任务。例如,在一种名为标记和清除的策略中,要在其上执行GC的内存区域中的活动数据对象被“标记为”活动的,而所有未标记的数据对象将从内存中删除(清除)。
用于执行GC的另一种策略称为复制收集器GC。在复制收集器类型的GC中,要做GC内存区域被撤离所有活动的对象。在一些实施方式中,在撤离区域中识别出活动的对象时,将数据物体复制到新的位置,称为幸存者空间。可以通过以下几种方式之一进行复制。在停止世界(Stop-The-World)复制中,GC操作开始后访问数据对象的第一个线程为幸存者空间中的数据对象分配空间,并执行数据对象的复制,同时所有其他应用程序线程都等待直到复制完成。或者,在并发复制GC实施中,在GC操作开始后尝试访问数据对象的每个GC或应用程序线程都会尝试为幸存者空间中的数据对象分配空间,以在自己预先分配的空间复制数据对象。无论如何,在复制了数据对象之后,应用程序线程用于访问数据对象的地址被更新为引用幸存者空间中的新位置。撤离区域,在周期结束时现在没有活动的对象,然后可以全部重新使用。
发明内容
根据本发明,提供了一种用于在并发复制垃圾收集操作中优化数据对象的复制的方法。在一个实施例中,标识作为所述垃圾收集操作的部分的要复制的数据对象的源副本。由主要访问线程发起将源副本复制到目标位置。复制的发起包括为目标位置中的目标对象创建一个临时目标对象头部,目标对象头部包含设置为指示该复制正在进行的指示符。在进行复制时,只要指示符指示复制正在进行中,尝试使用数据对象的任何其他访问线程的执行将被扣住。复制完成后,将目标对象头部替换为源对象头部的副本,这将重置指示符并允许访问线程以恢复执行。
本发明的一个方面包括一种用于在并发复制垃圾收集操作中优化数据对象的复制的方法。该方法包括标识作为所述垃圾收集操作的部分的要复制的数据对象的源副本。该方法还包括由主要访问线程发起将源副本复制到目标位置,该发起包括为目标位置中的目标对象创建目标对象头部,该目标对象头部包含包含设置为指示该复制正在进行的指示符。该方法还包括:只要指示符指示正在进行复制,就扣住试图使用数据对象的辅助访问线程的执行。该方法还包括:响应于复制的完成,用源副本的源对象头部的副本替换目标对象头部。
该方法可以可选地进一步包括响应于对源副本的标识,由访问线程为所述数据对象在幸存者空间中分配空间。该方法还包括将具有所述指示符的所述目标对象头部存储在所述分配的空间中。该方法还包括在原子操作中,响应于转发位的设置,将所述转发位和所述分配的空间的位置存储到所述源对象头部的所述目标位置。该方法还包括基于所述原子存储操作成功,将所述访问线程指定为主要访问线程。该方法还包括:响应于辅助访问线程确定在所述源对象头部中设置了所述转发位,将所述辅助访问线程转发到所述目标位置,以响应于次级访问线程确定在源对象头部中设置了转发位,而将次级访问线程转发到目标位置。该方法具有几个优点,包括但不限于向其他访问线程指示数据对象正被转发以及数据对象正被转发到的位置。
该方法可以可选地进一步包括以下实施例,其中,指示符是目标对象头部中的复制位,其具有与源对象头部中的转发位的位置相对应的位置,并且其中,该设置还包括设置复制位。此方法具有多个优点,例如但不限于存储在标准化位置的单个位指示符。
该方法可以可选地进一步包括在多个参与线程之间同步复制,该多个参与线程包括主要访问线程和执行被扣住的辅助访问线程。该方法还包括由主要访问线程将目标对象头部中的未复制的数据值初始化为数据对象的总大小。该方法还包括响应于多个参与线程中的任何辅助访问线程开始复制而增加目标对象头部中的复制线程数据值。该方法还包括:响应于任何参与线程开始复制数据对象的部分,将未复制的值减小数据部分的大小。该方法还包括:响应于任何辅助访问线程确定未复制的值已经达到0,减小复制线程数据值,其中,目标对象头部的替换由主要访问线程响应于确定而执行。复制线程数据值已减小到初始值。该方法具有多个优点,例如但不限于由多个访问线程执行的同步复制,从而减少了扣住时间。
该方法可以可选地进一步包括其中在单个存储器更新中执行目标对象头部的替换的实施例,并且包括重置指示符和恢复类别信息。此方法具有多个优点,例如但不限于主要访问线程执行单个操作以恢复对数据对象的访问的能力。
该方法可以可选地进一步包括其中主要访问线程和辅助访问线程中的每个是垃圾收集线程或应用程序线程之一的实施例。此方法具有多个优点,例如但不限于应用程序线程或垃圾回收线程执行复制的能力。
该方法可以可选地进一步包括实施例,其中,标识还包括通过以下至少之一从存储器中的活动对象中读取引用源副本的对象引用:对存储器中的活动对象进行扫描的垃圾收集线程,或在正常执行期间遇到活动对象的应用程序线程。此方法具有多个优点,例如但不限于标识要复制的数据对象。
本发明的另一方面提供一种用于在并发复制垃圾收集操作中优化数据对象的复制的系统,包括:包括指令的存储介质;耦合到存储介质的总线;耦合到总线的处理器,该处理器在执行指令时使系统执行以下操作:标识作为所述垃圾收集操作的部分的要复制的数据对象的源副本;由主要访问线程发起将源副本复制到目标位置,该发起包括为目标位置中的目标对象创建目标对象头部,该头部包含设置为指示该复制正在进行的指示符;只要指示符指示正在进行复制,就扣住试图使用数据对象的辅助访问线程的执行;以及;响应于复制的完成,将目标对象头部替换为源副本的源对象头部的副本。
本发明的另一方面提供了一种用于在并发复制垃圾收集操作中优化数据对象的复制的计算机程序产品,该计算机程序产品包括计算机可读存储介质以及存储在计算机可读介质上的程序指令,其使至少一个计算机设备能够执行以下操作:标识作为所述垃圾收集操作的部分的要复制的数据对象的源副本;由主要访问线程发起将源副本复制到目标位置,该发起包括为目标位置中的目标对象创建目标对象头部,该头部包含设置为指示该复制正在进行的指示符;只要指示符指示正在进行复制,就扣住试图使用数据对象的辅助访问线程的执行;响应于复制的完成,将目标对象头部替换为源副本的源对象头部的副本。
本发明的又一方面提供了一种用于在并发复制垃圾收集操作中部署用于优化数据对象的复制的系统的方法,该方法包括:提供具有至少一个计算机设备的计算机基础设施,该计算机基础设施操作为:标识作为所述垃圾收集操作的部分的要复制的数据对象的源副本;由主要访问线程发起将源副本复制到目标位置,该发起包括为目标位置中的目标对象创建目标对象头部,该头部包含设置为指示该复制正在进行的指示符;只要指示符指示正在进行复制,就扣住试图使用数据对象的辅助访问线程的执行;响应于复制的完成,将目标对象头部替换为源副本的源对象头部的副本。
附图说明
通过以下结合附图对本发明各个方面的详细描述,将更容易理解本发明的这些和其他特征。
图1描绘了根据本发明实施例的计算环境。
图2描绘了根据本发明实施例的系统图。
图3A描绘了根据本发明实施例的示例数据对象头部。
图3B描绘了根据本发明的实施例的示例更新的源副本头部。
图4描绘了根据本发明实施例的示例目标头部。
图5描绘了根据本发明的实施例的示例目标头部。
图6描绘了根据本发明的实施例的示例过程流程图。
图7描绘了根据本发明实施例的示例目标数据对象。
图8描绘了根据本发明实施例的示例方法流程图。
附图不一定按比例绘制。附图仅是示意性表示,并非意图描绘本发明的特定参数。附图仅旨在描绘本发明的典型实施例,因此不应视为限制本发明的范围。在附图中,相同的标号表示相同的元素。
具体实施方式
现在将在本文中参考示出了实施例的附图来更全面地描述说明性实施例。然而,本公开可以以许多不同的形式来体现,并且不应被解释为限于本文阐述的实施例。相反,提供这些实施例使得本公开将是彻底和完整的,并将向本领域技术人员充分传达本公开的范围。在说明书中,可以省略众所周知的特征和技术的细节,以避免不必要地混淆所呈现的实施例。
本文所使用的术语仅是出于描述特定实施例的目的,并且不旨在限制本公开。如本文所使用的,单数形式“一”,“一个”和“该”也意图包括复数形式,除非上下文另外明确指出。此外,术语“一”,“一个”等的使用不表示数量限制,而是表示存在至少一个所引用的项目。术语“组”旨在表示至少一个的数量。还将理解的是,当在本说明书中使用时,术语“包括(现在时)”和/或“包括(进行时)”或“包含(现在时)”和/或“包含(进行时)”指定存在所述特征、区域、整数、步骤、操作、元件和/或组件,但不排除存在或增加一个或多个其他特征、区域、整数、步骤、操作、元件、组件和/或其组。
本发明的实施例提供一种用于在并发复制垃圾收集操作中优化数据对象的复制的方法。在一个实施例中,标识作为所述垃圾收集操作的部分的要复制的数据对象的源副本。将源副本复制到目标位置是由主要访问线程发起的。复制的发起包括为目标位置中的目标对象创建一个临时目标对象头部,该头部包含一个指示符,设置为指示复制正在进行中。在进行复制时,只要指示符指示复制正在进行中,尝试使用数据对象的任何其他访问线程的执行将被扣住。复制完成后,将目标对象头部替换为源对象头部的副本,这将重置指示符并允许访问线程以恢复执行。
现在参考图1,示出了计算环境10的示例的示意图。计算环境10仅是合适的计算环境的一个示例,并且无意于对本文所述的本发明的实施例的使用范围或功能提出任何限制。无论如何,计算环境10能够被实现和/或执行上文阐述的任何功能。
在计算环境10中,存在计算机系统/服务器12,其可与许多其他通用或专用计算系统环境或配置一起操作。可能适合与计算机系统/服务器12一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户端、胖客户端、手持或便携式设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机系统、大型计算机系统以及包括上述任何系统或设备的分布式云计算环境,等等。
可在由计算机系统执行的计算机系统可执行指令(例如程序模块)的一般上下文中描述计算机系统/服务器12。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。可以在分布式云计算环境中实践计算机系统/服务器12,在分布式云计算环境中,任务由通过通信网络链接的远程处理设备执行。在分布式云计算环境中,程序模块可以位于包括内存存储设备的本地和远程计算机系统存储介质中。
如图1所示,计算环境10的计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图中未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
本发明的实施例可以被实现为计算机可读信号介质,其可以包括其中包含有计算机可读程序代码的传播的数据信号(例如,在基带中或者作为载波的一部分)。这样的传播信号可以采取多种形式中的任何一种,包括但不限于电磁的、光的或其任何合适的组合。计算机可读信号介质可以是不是计算机可读存储介质,并且可以通信、传播或传输供指令执行系统、装置或设备使用或与其结合使用的程序的任何计算机可读介质。
包含在计算机可读介质上的程序代码可以使用任何适当的介质来传输,包括但不限于无线、有线、光纤电缆、射频(RF)等,或前述的任何适当组合。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
现在参考图2,示出了根据本发明实施例的描述本文讨论的功能的系统图。应该理解的是,本文叙述的教导可以在任何类型的计算环境70中实践,包括但不限于,单个计算机设备、客户端/服务器环境、网络计算环境(例如,云计算环境50)和/或类似环境。仅用于说明目的,图2中示出了独立的计算机系统/服务器12。如果在网络计算环境中实践此处叙述的教导,则每个客户端不需要具有GC复制优化引擎(以下称为“系统72”)。而是,系统72可以被加载在与客户端通信(例如,无线地)的服务器或具有服务器能力的设备上以为其提供优化的GC。无论如何,如所描绘的,系统72被示出在计算机系统/服务器12内。通常,系统72可以被实现为图1的计算机系统12上的程序/实用工具40,并且可以启用本文中叙述的功能。还应当理解,系统72可以被结合在任何类型的可以接收、处理和/或执行关于网络计算环境中的IT资源的命令的系统内或与之结合工作。为了简洁起见,这些其他系统未在图2中示出。
沿着这些思路,系统72可以执行类似于通用计算机的多种功能。具体地,除其他功能外,系统72可以在并发复制垃圾收集操作中优化数据对象的复制。为此,系统72可以包括:源副本标识符74、复制启动器76、线程执行扣住器77和头部替换器78。
由计算机系统/服务器12执行的系统72的源副本标识符74被配置为标识将作为垃圾收集(GC)操作的一部分复制的数据对象的源副本88N。如上所述,GC操作标识活动数据对象88A-N,并从计算机系统82的存储器84中删除未使用的数据对象。就此而言,可以在执行GC的任何环境中实践本发明的教导。在一个实施例中,可以在受管理的运行时环境(例如,Java、Python、Ruby、C#、Swift等)中执行GC操作(Java是Sun Microsystems的商标;Python是Python USA,Inc.的商标;C#是Microsoft,Inc.的商标;Swift是Apple Inc.在美国和/或其他地方的商标)。在这样的实施例中,存储器84可以是在受管理的运行时环境中用于存储数据对象88A-N的堆。
在任何情况下,如图所示,存储器84被划分为多个存储器分区86A-N。可以周期性地确定应该在特定的存储器分区86A-N上执行GC。出于示例的目的,假定确定将在存储器分区86B上执行GC。在复制收集器类型的GC环境中,源副本标识符74标识数据对象88N是存储器分区86B(例如,撤离/源区域)内的活动对象,因此,需要将其复制到幸存者空间86N。在一个实施例中,当访问线程92从存储器82中的任何活动数据对象88A-N(例如,数据对象88A-N)中读取对象地址字段时,当对象地址字段的值指向存储器82(例如堆)中的撤离/源区域86B中的数据对象88A-N时,标识数据对象88N。可以通过专用GC线程96A-N执行对存储器82中活动对象的扫描(可以递归)来执行此标识(例如,作为GC操作的一部分)。标识也可以或者由常规应用程序线程94A-N执行,该常规应用程序线程94A-N在活动对象的正常执行过程中遇到该活动对象。无论如何,一旦被标识,就可以开始将数据对象88N复制到幸存者空间88N。
本文描述的本发明的发明人已经发现了当前解决方案中在并发复制GC操作中复制数据对象88N的某些缺陷。例如,在停止世界风格的GC中,使用目标数据对象88N'的访问线程92直到复制完成之后才有问题(目标数据对象88N'最终可能会由另一个GC线程96N或CPU进行扫描,但不会将其压入扫描队列,并且在完成复制之前将无法用于扫描)。但是,尝试在GC操作期间访问数据对象88A-N的世界停止风格的GC中的应用程序线程94A-N可能经受的等待时间可能会比等待GC操作得出复制结论的等待时间更长。相反,在并发GC操作中,应用程序线程94A-N与活动GC线程96A-N一起运行。这样,尝试访问数据对象88N的访问线程92可以立即跟随指向目标数据对象88N'的转发指针并尝试访问目标数据对象88N'的内容,而目标数据对象88N'仍在复制过程中。
在并发GC操作中对该问题的一种当前解决方案中,尝试访问经历GC的内存分区86B中的数据对象88N的每个访问线程92(无论是应用程序线程94A-N还是GC线程96A-N)都将竞争复制数据对象88N。即,每个访问线程92将开始在幸存者空间86N中分配其自己的空间,并将数据对象88N复制到其预分配空间中。然后,在其复制完成之后,每个访问线程92将尝试以原子操作将其数据对象88N的副本指定为新的目标数据对象88N'。但是,当前的解决方案可以导致创建许多重复副本,其中只有一个最终成为目标数据对象88N'。这引入了许多效率低下的问题。例如,由任何“丢失”的访问线程92所使用的CPU时间(该丢失的访问线程92制作了最终未用作目标数据对象88N的数据对象88N的副本)以及由丢失的访问线程92在生存空间86N分配的任何空间(例如堆空间)被浪费了。此外,作为复制的结果,丢失的访问线程92的CPU高速缓存可能最终被无用的数据污染。
如果要复制的数据对象88N是一个相对较大的数据对象,这些缺陷将变得更加明显。例如,如果数据对象88N对于CPU高速缓存而言太大,则任何丢失的访问线程92的复制操作可能会占用共享数据总线,从而有可能减慢其他线程的通信。此外,随着数据对象88N的大小(例如,MB的大小)和流行度(例如,被堆中的多个其他对象引用)的增加,创建重复项的可能性将大大增加。如此大的对象的副本的这种增加可能会对系统性能产生非常明显的负面影响。对于用于生成多个大副本的浪费空间而言,尤其如此,因为一个慢线程/CPU实际上可能根本无法复制该对象(由于幸存者空间86N被更快的线程的这种对象的多个副本完全消耗了),因此必须终止整个GC周期。这种中止的周期可能需要非常昂贵的恢复操作,从而可能导致非常长的延迟,这完全抵消了并发GC操作所带来的任何好处。
本发明的特征通过在并发复制GC操作中优化数据对象的复制来解决其中一些或所有这些缺陷,尤其是潜在的缺陷。这些特征保留了并发复制GC的优势,同时消除了创建多份副本的复制。这样可以提高执行GC操作的效率。在一些实施例中,这些特征使本发明能够同时利用多个访问线程92来执行同步的复制操作,从而进一步提高了GC操作期间的计算机操作效率。
现在参考图3A-B,其示出了根据本发明实施例的源副本头部100的示例。如图3A所示,数据对象头部110代表存储器84中的数据对象88A-N(图2)的示例原始未修改的头部,该数据对象88A-N尚未被标识出作为GC操作的一部分进行复制。在此程度上,数据对象头部110的转发位112被设置为0,指示它没有被复制。此外,数据对象头部110中的类别信息指针114被设置为指向关于数据对象88A-N的类别信息(图2)。
与当前的非并发GC解决方案类似,一旦将源副本88N标识为要复制的候选对象,任何尝试访问源副本88N的访问应用程序92将“竞争”以转发(为目标数据对象88N'在幸存者空间86N分配空间)并在原子操作中更新对象头部100。这样做的第一访问线程通常被称为“获胜”线程,并且在本文中被称为主要访问线程(此后称为92A)。无论如何,图3B示出了由主要访问线程92A对源副本88N的头部进行原子更新而产生的更新的对象头部120。如图所示,转发位112已更新为1,指示数据对象88N正被转发到新的目标位置,并且此新目标位置的地址已存储在类别位置地址114中,而不是先前指向该类别信息的指针。可以看出,源副本88N仅需要一位来表示该对象正被转发到远程位置。在此实现中,转发地址与对象的类别/类型指针槽共享。转发位通常也是此地址字的一部分,因此未使用转发地址的低2-4位,因为由于对象对齐(分别为4-16字节)和类别/类型信息(如果占用相同的槽)。同样,由于强制对齐,可能不必使用几个低位置位。
另外参考图2,如由计算机系统/服务器12执行的,系统72的复制启动器76被配置为通过主要访问线程92A启动将已识别数据的源副本88N复制到目标位置。具体地,作为要被指定为主要访问线程92A的竞争的一部分,线程可以发起复制过程。为了执行该启动,主要访问线程92A首先创建临时目标对象头部,然后将目标对象头部复制到目标数据对象88N’要复制到的目标位置。该头部包括指示符,该指示符被设置为指示复制正在进行中。在一个实施例中,指示符是位于目标对象头部中的位,并且在目标对象报头中占据与转发位在源对象报头120中占据的位置相同的位置。就此而言,本发明不需要任何额外的在目标位置字段(或原始对象中的任何位置)中的位。而是,源数据对象88N的(双重)形状不以任何方式改变,而是仅以与复制GC解决方案中的任何源数据对象88N的源对象头部120将被改变的相同方式来改变。目标对象头部中的未使用标志保持了“仍在复制”的新状态。由于通常在目标数据对象88N'中不使用转发的位112(对象在一个GC周期内不递归转发),因此如它在其他地方使用的那样,该位可以用于表示新的中间状态。
现在参考图4,示出了根据本发明的实施例的临时目标对象头部200的示例。如图所示,已经创建了将复制位212设置为“1”的目标对象头部200,该复制位212指示正在进行复制。此外,在一个实施例中,如将描述的那样,目标对象头部200的其他部分(例如,与类别信息指针/目标位置地址114相对应的部分)也可以用于促进复制。
再次结合图3B和4参照图2,由计算机系统/服务器12执行的系统72的线程执行扣住器77被配置为保留试图使用数据对象的辅助访问线程的执行以便只要指示器指示正在进行复制。具体地,一旦具有复制指示符的目标对象头部200已经由访问线程92创建并且访问线程92已被指定为主要访问线程92A,则主要访问线程92A可以执行从源数据副本88N到目标数据对象88N'的复制数据的处理。在此期间,尝试访问源数据副本88N的不是主要访问线程92A的访问线程92(以下称为次访问线程92N),将通过检查源对象头部100中的转发位112来检查是否转发了源对象88N。响应于确定在源对象头部100中设置了转发位112,将辅助访问线程92N转发到目标位置(例如,经由存储在类别信息位置114中的目标位置地址)。一旦到达目标位置,辅助访问线程92N将检查目标对象头部200中的复制位212是否被设置。如果设置了复制位212,则在再次检查复制位212之前,辅助访问线程92N将被扣住(例如,将等待)一段时间。因此,如指示符(例如,复制位212)所指示,在复制进行期间,禁止任何访问线程92访问目标数据对象88N’和/或目标对象地址。在大多数情况下,等待将涉及主动运转不超过很短的时间,因为要复制的大多数对象相对较小,并且很快就可以使用。然而,如果目标数据对象88N’在预定时间段之后仍然不可用,则访问线程92可以在提供CPU并最终休眠以及周期性地唤醒时采取更多运转。
在一个实施例中,线程执行扣住器77可以使用丢失(例如,辅助)访问线程92N来执行复制操作,在该复制操作中,源副本88N的复制在多个(参与)访问线程92之间同步。这可以基于要复制的数据对象大于预定大小的确定。无论如何,在这种操作中,复制操作中既可以包括“获胜”的主要访问线程92A,也可以包括任何“丢失”的辅助访问线程92N。可以基于诸如数据对象88N的大小、可用总线空间的数量等因素来限制被允许参与的辅助访问线程92N的数量。在任何情况下,为了实现此目的,可以将用于促进同步复制的附加信息存储在目标对象头部200的其他部分(例如,与类信息指针/目标位置地址114相对应的部分)中。
现在参考图5,示出了根据本发明的实施例的临时目标对象头部300,该临时目标对象头部300已经适于利用多个访问线程92(图2)进行同步复制。如前所述,目标对象头部300具有已被设置的复制位312形式的指示符。此外,如图所示,还设置了未复制的数据值字段314,其保持有待复制的目标数据对象88N’的大小。类似地,还设置了参与线程字段316,其保存参与同步复制的访问线程92的数量。
现在参考图6,示出了根据本发明的实施例的演示使用多个参与线程的同步复制的处理流程图400。流程从上述过程开始,其中在402中任何试图访问数据对象88N的访问线程92都试图为目标数据对象88N’(图2)分配空间。参照图2和5,创建目标对象头部250包括在404中通过将未复制的数据值字段314设置为要复制的数据对象88N的总大小来初始化目标对象头部250,将复制线程值字段316设置为0,将复制位设置为1。在406,访问线程92尝试如前所述赢得转发并成为主要访问线程92A。
在408中,一旦线程成功赢得转发并成为主要访问线程92A,则将源副本88N复制到幸存者空间的过程从头到尾以固定长度进行,其中主要访问线程92A在410执行任何未对齐数据的复制(例如,源副本88N末尾的数据不构成完整长度的部分)。在复制期间,每次主要访问线程92A完成复制操作时,在412中检查未复制数据值字段314,以确保未复制数据值大于0(例如,还有更多数据要复制)。在414中,如果仍有更多数据要复制,则主要访问线程92A选择要复制的部分并尝试以原子操作赢得它。如果在416中未成功赢得该部分,则流程返回到412。否则,主要访问线程92A将未复制的值减小要复制的数据的部分的大小,并在418处复制获胜的部分。这继续直到未复制数据值是0(例如,没有更多的数据要复制),此时,主要访问线程92A在432中等待,直到在430中,所有其他线程都完成了它们的复制(例如,直到复制线程的数据值为0)。
对于作为丢失/辅助访问线程92N的任何访问线程92(例如,在408处未成功赢得在406的转发或在确定了主要访问线程92A之后尝试访问源副本88N),在419,使用由主要访问线程92A设置的转发地址来转发该线程,其中在420,辅助访问线程92N检查指示符(例如,是否设置了复制位312),以确定是否正在进行复制。如果是这样,则类似于主要访问线程92A,辅助访问线程92N在422检查未复制数据值字段314,以确保未复制数据值大于0(例如,还有更多数据要复制)。在424中,如果仍有更多数据要复制,则辅助访问线程选择要复制的部分并尝试以原子操作赢得它,这还会使未复制的值减小要复制的数据部分的大小,如果这是由辅助线程92N复制的数据的第一部分,增加复制线程值字段316中的复制线程数据值。辅助线程92N然后在428复制赢取的部分,然后过程返回到420。如果在426中未成功赢得,则过程返回到420。持续直到未复制的数据值为0(例如,不再有要复制的数据),此时在423辅助访问线程以原子操作对复制线程值字段316中的线程数据值递减1,并等待直到指示符指示复制已完成(例如,复制位212是否为0),然后流程进行到440。
现在参考图7,示出了根据本发明的实施例的在由多个访问线程(图2)复制期间的目标数据对象500的示例。另外参考图2,如图所示,执行同步复制的访问线程92包括主要访问线程W和辅助访问线程T1和T2。这样,复制线程数据值=2以反映两个辅助访问线程92N(除了主要访问线程W之外)正在参与复制的事实。如图所示,目标数据对象88N'末尾的未对齐部分520已由主要访问线程W复制。其他部分522处于复制的各个阶段,已经复制了三个部分,当前正在复制三个部分,还有两个尚未复制的部分。这样,未复制的数据值等于尚未复制的两个部分的大小。此外,对象头部524的最终版本也将被复制,如将要描述的。
再次结合图3A和4参见图2,由计算机系统/服务器12执行的系统72的线程执行扣住器78响应于复制的完成,被配置为用源副本的原始源对象头部110的副本替换目标对象头部300。具体地,另外参考图6,一旦所有访问线程92都已完成复制,如未复制数据值和复制线程数据值均为0所示,则主要访问线程92A通过将目标对象头部300恢复为如在434中所示的预复制数据对象88N的目标对象头部300来完成复制,其中还重置指示符(例如,将复制位212重置为0)。在一个实施例中,在单个存储器更新中执行目标对象头部的替换,其中,重置指示符并恢复类别信息以及可能在目标头部中的任何其他字段,例如但不限于对象的年龄,哈西位等。指示符的这种重置向所有访问线程92指示目标数据对象88N'可用,结束第二访问线程92N的持有。然后,可以重置应用线程96A-N用于访问数据对象的地址以引用目标位置。
现在结合图2参考图8,示出了根据本发明实施例的方法流程图600。在610,由计算机系统/服务器12执行的系统72的源副本标识符74标识作为垃圾收集操作的一部分的要复制的数据对象的源副本88N。在620,由计算机系统/服务器12执行的系统72的复制发起者76发起将源副本88N复制到目标位置。该发起包括主要访问线程92A为目标位置中的目标对象创建目标对象头部,该对象头部包含指示符。设置此指示符以指示正在进行复制。在630处,由计算机系统/服务器12执行的系统72的线程执行扣住器77扣住尝试使用数据对象的任何辅助访问线程92N的执行,只要指示符指示正在进行复制,而可选在复制过程中使用保留的线程。在640处,响应于复制的完成,由计算机系统/服务器12执行的系统72的头部替换器78用源副本的源对象头部的副本替换目标对象头部。此还原将恢复对复制的数据对象的访问。
图8的流程图示出了根据本发明的各个实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。就这一点而言,流程图中的每个块可以代表模块、代码段或代码部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。还应注意,在一些替代实施方式中,方框中指出的功能可能不按图中所示的顺序发生。例如,连续示出的两个方框实际上可以基本上同时执行。还应注意,流程图图示的每个框可以由执行指定功能或动作的基于专用硬件的系统或专用硬件和计算机指令的组合来实现。
尽管在本文中示出和描述了作为用于在并发复制垃圾收集操作中优化数据对象的复制的方法,但是应当理解,本发明还提供了各种替代实施例。例如,在一个实施例中,本发明提供了一种基于订阅、广告和/或费用执行本发明的过程的方法。也就是说,服务提供商(例如解决方案集成商)可以提供在并发复制垃圾回收操作中提供用于优化数据对象复制的功能。在这种情况下,服务提供商可以创建、维护、支持等计算机基础设施,例如为一个或多个消费者执行本发明的过程的计算机系统12(图1)。作为回报,服务提供商可以根据订阅和/或费用协议从消费者那里接收付款,和/或服务提供商可以从向一个或多个第三方出售广告内容中接收付款。
在另一个实施例中,本发明提供了一种用于在并发复制垃圾收集操作中优化数据对象的复制的计算机实现的方法。在这种情况下,可以提供诸如计算机系统12(图1)之类的计算机基础设施,并且可以获得(例如,创建、购买、使用,修改等)用于执行本发明的过程的一个或多个系统,并部署到计算机基础架构。就此而言,系统的部署可以包括以下一项或多项:(1)从计算机可读介质将程序代码安装在诸如计算机系统12(图1)的计算设备上;(2)在计算机基础架构中添加一个或多个计算设备;(3)结合和/或修改计算机基础设施的一个或多个现有系统,以使计算机基础设施能够执行本发明的过程。
在本说明书中描述的一些功能组件已经被标记为系统或单元,以便更特别地强调它们的实现独立性。例如,系统或单元可以被实现为包括定制的VLSI电路或门阵列,诸如逻辑芯片、晶体管或其他分立元件的现成半导体的硬件电路。系统或单元也可以在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等的可编程硬件设备中实现。系统或单元还可以用软件实现以由各种类型的处理器执行。可执行代码的系统或单元或组件可以例如包括计算机指令的一个或多个物理或逻辑块,其可以例如被组织为对象、过程或功能。然而,所标识的系统或单元的可执行文件不必在物理上位于一起,而是可以包括存储在不同位置的完全不同的指令,当它们在逻辑上结合在一起时,它们构成系统或单元并实现系统或单元的所述的目的。
此外,可执行代码的系统或单元可以是单个指令或多个指令,并且甚至可以分布在多个不同的代码段,不同的程序之间以及跨多个存储设备。类似地,本文中操作数据可以在模块内被识别和示出,并且可以以任何合适的形式来体现并且可以组织在任何合适类型的数据结构内。操作数据可以被收集为单个数据集,或者可以分布在不同的位置上,包括分布在不同的存储设备和不同的内存设备上。
此外,系统/单元还可以被实现为软件和一个或多个硬件设备的组合。例如,系统72可以体现为存储在存储介质(例如,内存存储设备)上的软件可执行代码的组合。在另一示例中,系统或单元可以是对一组操作数据进行操作的处理器的组合。
如上所述,一些实施例可以以硬件体现。硬件可以被称为硬件元件。通常,硬件元件可以指被布置为执行某些操作的任何硬件结构。在一个实施例中,例如,硬件元件可以包括制造在衬底上的任何模拟或数字电气或电子元件。例如,可以使用诸如互补金属氧化物半导体(CMOS)、双极和双极CMOS(BiCMOS)技术之类的基于硅的集成电路(IC)技术来执行制造。硬件元件的示例可以包括处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(ASIC)、可编程逻辑设备(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、逻辑门、寄存器、半导体设备、芯片、微芯片、芯片组等。然而,实施例不限于此上下文。
上面还指出,一些实施例可以用软件来体现。该软件可以被称为软件元件。通常,软件元件可以指被安排为执行某些操作的任何软件结构。在一个实施例中,例如,软件元件可以包括适于由诸如处理器之类的硬件元件执行的程序指令和/或数据。程序指令可以包括命令的有组织的列表,该有组织的列表包括以预定语法布置的单词、值或符号,当被执行时,该预定语法可以使处理器执行相应的一组操作。
本发明也可以是计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令
本发明可以是处于任何可能的技术细节集成水平的系统、方法和/或计算机程序产品。该计算机程序产品可以包括计算机可读存储介质,其上具有用于使处理器执行本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及传统过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
显然,已经提供了用于在并发复制垃圾收集操作中优化数据对象的复制的方法。尽管已经结合示例性实施例具体示出和描述了本发明,但是应当理解,本领域技术人员将想到各种变化和修改。因此,应理解,所附权利要求书旨在覆盖落入本发明范围内的所有此类修改和改变。

Claims (20)

1.一种用于在并发复制垃圾收集操作中优化数据对象的复制的方法,该方法包括以下计算机实现的过程:
标识作为所述垃圾收集操作的部分的要复制的所述数据对象的源副本;
由主要访问线程发起将所述源副本复制到目标位置,该发起包括为所述目标位置中的目标对象创建目标对象头部,所述目标对象头部包含设置为指示该复制正在进行的指示符;
只要所述指示符指示正在进行所述复制,就扣住试图使用所述数据对象的辅助访问线程的执行;以及
响应于所述复制的完成,用所述源副本的源对象头部的副本替换所述目标对象头部。
2.如权利要求1所述的方法,还包括:
响应于所述源副本的所述标识,由访问线程为所述数据对象在幸存者空间中分配空间;
将具有所述指示符的所述目标对象头部存储在所述分配的空间中;
在原子操作中,响应于转发位的设置,将所述转发位和所述分配的空间的位置存储到所述源对象头部的所述目标位置;
基于所述原子存储操作成功,将所述访问线程指定为主要访问线程;以及
响应于辅助访问线程确定在所述源对象头部中设置了所述转发位,将所述辅助访问线程转发到所述目标位置。
3.如权利要求1所述的方法,其中,所述指示符是所述目标对象头部中的复制位,其具有与所述源对象头部中的所述转发位的位置相对应的位置,并且其中,所述设置还包括设置所述复制位。
4.如权利要求1所述的方法,还包括:在多个参与线程之间同步所述复制,所述多个参与线程包括所述主要访问线程和具有执行被扣住的所述辅助访问线程两者,所述同步包括:
由所述主要访问线程将所述目标对象头部中的未复制的数据值初始化为所述数据对象的总大小;
响应于所述多个参与线程中的任何辅助访问线程开始复制,增加在所述目标对象头部中的复制线程数据值;
响应于任何参与线程开始复制所述数据对象的部分,将所述未复制的值减小所述数据的所述部分的大小;以及
响应于任何辅助访问线程确定所述未复制的值已达到0,减小所述复制线程数据值,
其中,所述目标对象头部的所述替换由所述主要访问线程响应于确定所述复制线程数据值已经减小到初始值来执行。
5.如权利要求1所述的方法,其中,所述目标对象头部的所述替换在单个存储器更新中执行,并且包括重置所述指示符和恢复类别信息。
6.如权利要求1所述的方法,其中所述主要访问线程和所述辅助访问线程中的每一个是垃圾收集线程或应用程序线程之一。
7.如权利要求1所述的方法,其中,所述标识还包括:通过以下至少之一从存储器中的活动对象中读取引用所述源副本的对象引用:对所述存储器中的活动对象进行扫描的垃圾收集线程,或在正常执行期间遇到所述活动对象的应用程序线程。
8.一种用于在并发复制垃圾收集操作中优化数据对象的复制的系统,包括:
包括指的令存储介质;
耦合到所述存储介质的总线;以及
与所述总线耦合的处理器,当执行所述指令时,所述处理器使所述系统:
标识作为所述垃圾收集操作的部分的要复制的所述数据对象的源副本;
由主要访问线程发起将所述源副本复制到目标位置,该发起包括为所述目标位置中的目标对象创建目标对象头部,所述目标对象头部包含设置为指示该复制正在进行的指示符;
只要所述指示符指示正在进行所述复制,就扣住试图使用所述数据对象的辅助访问线程的执行;以及
响应于所述复制的完成,用所述源副本的源对象头部的副本替换所述目标对象头部。
9.如权利要求8所述的系统,所述指令还使所述系统:
响应于所述源副本的所述标识,由访问线程为所述数据对象在幸存者空间中分配空间;
将具有所述指示符的所述目标对象头部存储在所述分配的空间中;
在原子操作中,响应于转发位的所述设置,将所述转发位和所述分配的空间的位置存储到所述源对象头部的所述目标位置;
基于所述原子存储操作成功,将所述访问线程指定为主要访问线程;以及
响应于辅助访问线程确定在所述源对象头部中设置了所述转发位,将所述辅助访问线程转发到所述目标位置。
10.如权利要求8所述的系统,其中,所述指示符是所述目标对象头部中的复制位,其具有与所述源对象头部中的所述转发位的位置相对应的位置,并且其中,所述设置还包括设置所述复制位。
11.如权利要求8所述的系统,所述指令还使所述系统在多个参与线程之间同步所述复制,所述参与线程包括所述主要访问线程和具有执行被扣住的所述辅助访问线程两者,包括:
由所述主要访问线程将所述目标对象头部中的未复制的数据值初始化为所述数据对象的总大小;
响应于所述多个参与线程中的任何辅助访问线程开始复制,增加在所述目标对象头部中的复制线程数据值;
响应于任何参与线程开始复制所述数据对象的部分,将所述未复制的值减小所述数据的所述部分的大小;以及
响应于任何辅助访问线程确定所述未复制的值已达到0,减小所述复制线程数据值,
其中,所述目标对象头部的所述替换由所述主要访问线程响应于确定所述复制线程数据值已经减小到初始值来执行。
12.如权利要求8所述的系统,其中使得所述系统替换所述目标对象头部的所述指令在单个存储器更新中替换所述目标对象头部,并且包括重置所述指示符和恢复类别信息。
13.如权利要求8所述的系统,其中,其中所述主要访问线程和所述辅助访问线程中的每一个是垃圾收集线程或应用程序线程之一。
14.如权利要求8所述的系统,其中,所述标识指令还包括通过以下至少之一从存储器中的活动对象中读取引用所述源副本的对象引用:对所述存储器中的活动对象进行扫描的垃圾收集线程,或在正常执行期间遇到所述活动对象的应用程序线程。
15.一种用于在并发复制垃圾收集操作中优化数据对象的复制的计算机程序产品,所述计算机程序产品包括计算机可读存储介质以及存储在所述计算机可读存储介质上的程序指令,所述程序指令导致至少一个计算机设备:
标识作为所述垃圾收集操作的部分的要复制的所述数据对象的源副本;
由主要访问线程发起将所述源副本复制到目标位置,该发起包括为所述目标位置中的目标对象创建目标对象头部,所述目标对象头部包含设置为指示该复制正在进行的指示符;
只要所述指示符指示正在进行所述复制,就扣住试图使用所述数据对象的辅助访问线程的执行;以及
响应于所述复制的完成,用所述源副本的源对象头部的副本替换所述目标对象头部。
16.如权利要求15所述的计算机程序产品,所述指令还使所述至少一个计算机设备:
响应于所述源副本的所述标识,由访问线程为所述数据对象在幸存者空间中分配空间;
将具有所述指示符的所述目标对象头部存储在所述分配的空间中;
在原子操作中,响应于转发位的所述设置,将所述转发位和所述分配的空间的位置存储到所述源对象头部的所述目标位置;
基于所述原子存储操作成功,将所述访问线程指定为主要访问线程;以及
响应于辅助访问线程确定在所述源对象头部中设置了所述转发位,将所述辅助访问线程转发到所述目标位置。
17.如权利要求16所述的计算机程序产品,其中,所述指示符是所述目标对象头部中的复制位,其具有与所述源对象头部中的所述转发位的位置相对应的位置,并且其中,所述设置还包括设置所述复制位。
18.如权利要求15所述的计算机程序产品,所述指令还使所述至少一个计算机设备在多个参与线程之间同步所述复制,所述参与线程包括所述主要访问线程和具有执行被扣住的所述辅助访问线程两者,,包括:
由所述主要访问线程将所述目标对象头部中的未复制的数据值初始化为所述数据对象的总大小;
响应于所述多个参与线程中的任何辅助访问线程开始复制,增加在所述目标对象头部中的复制线程数据值;
响应于任何参与线程开始复制所述数据对象的部分,将所述未复制的值减小所述数据的所述部分的大小;以及
响应于任何辅助访问线程确定所述未复制的值已达到0,减小所述复制线程数据值,
其中,所述目标对象头部的所述替换由所述主要访问线程响应于确定所述复制线程数据值已经减小到初始值来执行。
19.如权利要求15所述的计算机程序产品,其中,导致所述系统替换所述目标对象头部的指令在单个存储器更新中替换所述目标对象头部,并且包括重置所述指示符和恢复类别信息。
20.如权利要求15所述的计算机程序产品,其中,所述标识指令还包括通过以下至少之一从存储器中的活动对象中读取引用所述源副本的对象引用:对所述存储器中的活动对象进行扫描的垃圾收集线程,或在正常执行期间遇到所述活动对象的应用程序线程。
CN201880085156.0A 2018-01-09 2018-11-16 并发复制垃圾收集的复制和转发 Active CN111566626B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/865,789 2018-01-09
US15/865,789 US10877884B2 (en) 2018-01-09 2018-01-09 Copying and forwarding for concurrent copying garbage collection
PCT/IB2018/059041 WO2019138276A1 (en) 2018-01-09 2018-11-16 Copying and forwarding for concurrent copying garbage collection

Publications (2)

Publication Number Publication Date
CN111566626A true CN111566626A (zh) 2020-08-21
CN111566626B CN111566626B (zh) 2023-10-31

Family

ID=67140816

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880085156.0A Active CN111566626B (zh) 2018-01-09 2018-11-16 并发复制垃圾收集的复制和转发

Country Status (6)

Country Link
US (1) US10877884B2 (zh)
JP (1) JP7034296B2 (zh)
CN (1) CN111566626B (zh)
DE (1) DE112018005998B4 (zh)
GB (1) GB2581465B (zh)
WO (1) WO2019138276A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10877884B2 (en) 2018-01-09 2020-12-29 International Business Machines Corporation Copying and forwarding for concurrent copying garbage collection
CN115379263A (zh) * 2022-08-23 2022-11-22 京东方科技集团股份有限公司 一种终端设备的播放内容的管控方法和管控系统

Citations (7)

* 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
US20080281886A1 (en) * 2007-05-08 2008-11-13 Microsoft Corporation Concurrent, lock-free object copying
US20090327374A1 (en) * 2008-06-30 2009-12-31 Sun Microsystems, Inc. Method and apparatus for performing concurrent garbage collection
US20110113075A1 (en) * 2008-08-11 2011-05-12 Fujitsu Limited Garbage collection program, garbage collection method, and garbage collection system
US20110264870A1 (en) * 2010-04-23 2011-10-27 Tatu Ylonen Oy Ltd Using region status array to determine write barrier actions
CN103765817A (zh) * 2011-08-30 2014-04-30 国际商业机器公司 从源服务器向目标服务器复制数据对象
US9208081B1 (en) * 2007-11-30 2015-12-08 Oracle America, Inc. Concurrent object management

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7653793B1 (en) 2004-11-17 2010-01-26 Sun Microsystems, Inc. Use of memory protection to implement replicating collection in an incremental, copying garbage collector
US9110791B2 (en) 2008-03-03 2015-08-18 Microsoft Technology Licensing, Llc Optimistic object relocation
US8595462B2 (en) * 2011-03-14 2013-11-26 International Business Machines Corporation Dynamic measurement and adaptation of a copying garbage collector
JP6044181B2 (ja) * 2012-08-24 2016-12-14 富士通株式会社 ガーベジコレクションのための情報処理方法、プログラム及び装置
US9720819B2 (en) 2015-06-12 2017-08-01 Intel Corporation Concurrent, moving, garbage collector
US10877884B2 (en) 2018-01-09 2020-12-29 International Business Machines Corporation Copying and forwarding for concurrent copying garbage collection

Patent Citations (7)

* 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
US20080281886A1 (en) * 2007-05-08 2008-11-13 Microsoft Corporation Concurrent, lock-free object copying
US9208081B1 (en) * 2007-11-30 2015-12-08 Oracle America, Inc. Concurrent object management
US20090327374A1 (en) * 2008-06-30 2009-12-31 Sun Microsystems, Inc. Method and apparatus for performing concurrent garbage collection
US20110113075A1 (en) * 2008-08-11 2011-05-12 Fujitsu Limited Garbage collection program, garbage collection method, and garbage collection system
US20110264870A1 (en) * 2010-04-23 2011-10-27 Tatu Ylonen Oy Ltd Using region status array to determine write barrier actions
CN103765817A (zh) * 2011-08-30 2014-04-30 国际商业机器公司 从源服务器向目标服务器复制数据对象

Also Published As

Publication number Publication date
JP7034296B2 (ja) 2022-03-11
GB202009873D0 (en) 2020-08-12
CN111566626B (zh) 2023-10-31
WO2019138276A1 (en) 2019-07-18
JP2021509509A (ja) 2021-03-25
US20190213125A1 (en) 2019-07-11
US10877884B2 (en) 2020-12-29
GB2581465A (en) 2020-08-19
DE112018005998T5 (de) 2020-08-06
GB2581465B (en) 2021-03-10
DE112018005998B4 (de) 2022-06-15

Similar Documents

Publication Publication Date Title
US20150186068A1 (en) Command queuing using linked list queues
US11550819B2 (en) Synchronization cache seeding
US8904386B2 (en) Running a plurality of instances of an application
EP3177994A1 (en) Live migration of virtual machines that use externalized memory pages
US8930596B2 (en) Concurrent array-based queue
CN110647511A (zh) 数据同步方法、计算设备及计算机存储介质
US10983909B2 (en) Trading off cache space and write amplification for Bε-trees
US11579874B2 (en) Handling an input/output store instruction
CN105760218A (zh) 一种虚拟机在线迁移方法及装置
CN111566626B (zh) 并发复制垃圾收集的复制和转发
US20200371827A1 (en) Method, Apparatus, Device and Medium for Processing Data
WO2019215532A1 (en) Host aware update write
CN109597697B (zh) 一种资源撮合处理方法及装置
EP4031986B1 (en) Rdma-enabled key-value store
US20150213104A1 (en) Synchronous data replication in a content management system
CN110569105B (zh) 分布式虚拟机自适应内存一致性协议及其设计方法、终端
US9395982B1 (en) Atomic memory operations on an N-way linked list
US10042554B2 (en) Increased bandwidth of ordered stores in a non-uniform memory subsystem
US20210011716A1 (en) Processing circuit, information processing apparatus, and information processing method
KR20210152929A (ko) Ssd에서의 라이트 명령하기
US20170255499A1 (en) Hybrid quorum system with persistent and non-persistent
US11379147B2 (en) Method, device, and computer program product for managing storage system
US8966220B2 (en) Optimizing large page processing
US20210034580A1 (en) Method, apparatus and computer program product for maintaining metadata
CN111767082A (zh) 计算芯片启动方法、装置和计算机系统

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