CN112313631A - 闭环垃圾收集器 - Google Patents

闭环垃圾收集器 Download PDF

Info

Publication number
CN112313631A
CN112313631A CN201980039590.XA CN201980039590A CN112313631A CN 112313631 A CN112313631 A CN 112313631A CN 201980039590 A CN201980039590 A CN 201980039590A CN 112313631 A CN112313631 A CN 112313631A
Authority
CN
China
Prior art keywords
memory
garbage collection
generation
free list
feedback loop
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.)
Pending
Application number
CN201980039590.XA
Other languages
English (en)
Inventor
M·Z·史蒂芬斯
P·H·杜苏德
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN112313631A publication Critical patent/CN112313631A/zh
Pending legal-status Critical Current

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
    • 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
    • G06F12/0276Generational garbage collection
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • G06F12/0684Configuration or reconfiguration with feedback, e.g. presence or absence of unit detected by addressing, overflow detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/70Details relating to dynamic memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control

Abstract

公开了用于垃圾收集的系统和方法。在内部闭合反馈环中,基于空闲列表和选定量的空闲空间来触发垃圾收集。在外部反馈环中,空闲列表根据选定存储器负载和如根据垃圾收集而生成的当前存储器负载来确定。

Description

闭环垃圾收集器
背景技术
垃圾收集是计算系统中的自动存储器管理的一种形式。垃圾收集器试图检测不再被计算机系统上的软件应用或程序使用的对象并恢复由不再被计算系统上运行的软件应用或程序使用的对象占用的存储器。在一个示例中,垃圾收集可以与人工存储器管理进行对比,在人工存储器管理中,程序员指定要解除分配的对象并返回到存储器系统。存储器管理,包括垃圾收集,可以影响计算设备上运行的软件应用的性能。
许多编程语言包括垃圾收集。在一些编程语言(诸如C#、Java、D、Go以及许多脚本语言)中,垃圾收集可以被包括作为语言规范的部分。另外,诸如C和C++的一些语言被设计用于人工存储器管理但是包括垃圾收集的实现。另外,诸如C++通用语言基础架构(C++/CLI)的一些语言通过针对收集的对象和人工管理的对象使用单独的存储器片段而允许垃圾收集和人工存储器管理两者共存于相同应用中。垃圾收集常常被集成到语言编译器和运行时系统中。
发明内容
提供本发明内容从而以简化的形式介绍下面在具体实施方式中进一步描述的一系列概念。本发明内容不旨在确定要求保护的主题的关键特征或必要特征,也不旨在用于限制要求保护的主题的范围。
公开了应用垃圾收集以控制选定量的存储器负载并维持选定量的空闲列表的系统和方法。系统常常指定用于运行应用的可用存储器的工作集限制(working setlimits),其可以包括关于堆大小和软件容器的工作集限制。为了维持所指定的存储器负载,可用存储器的量可以基于垃圾收集正在如何被使用来调整。当存储器负载被维持时,空闲列表的量被确定。闭环反馈控制可以被应用以确定虚拟空闲空间。不是使虚拟空闲空间具体化,其被提供到闭环反馈控制以确定空闲列表的量。这提供控制物理存储器负载的灵活性而无需将对象引入物理存储器中。到闭合反馈环的输入是距目标的误差,诸如实际量对比设定点或目标量。在一个示例中,在内部闭合反馈环中,基于空闲列表和选定量的空闲空间来触发存储器分配中的垃圾收集。在外部闭合反馈环中,根据选定存储器负载和根据垃圾收集而被生成的当前存储器负载来确定空闲列表。在一个示例中,外部反馈环包括具有比例项和积分项的多项控制器。空闲列表可以被分布在多个存储器分配中的多个垃圾收集世代之间。外部环提供虚拟空闲空间列表的输出。内部环提供确定下一个垃圾收集何时被触发的分配的输出。垃圾收集可以基于可以对世代执行的分配的量而被触发,其基于从外部环提供的虚拟空闲空间来计算。
附图说明
附图被包含以提供对实施例的进一步理解并且被并入到本公开中并且构成本公开的一部分。附图图示了实施例并与说明书一起用于解释实施例的原理。将容易认识到其他实施例和实施例的意图的优点中的许多,因为它们通过参考下文描述变得更好理解。附图的元件不必是相对于彼此按比例的。类似的附图标记指代对应的相似的部分。
图1是示出计算设备的示例的框图,该计算设备可以被配置在计算网络中以提供例如云计算环境。
图2是示出用于在图1的计算设备中执行的示例应用框架的框图。
图3是示出图2的垃圾收集器的示例方法的框图。
图4是示出根据图3的方法的示例系统的框图。
图5是示出根据图3的方法的多个世代垃圾收集器的示例系统的框图。
具体实施方式
在下文描述中,对附图进行引用,所述附图形成本文的一部分并且通过图示的方式在附图中示出了在其中可以实践本发明的特定实施例。应理解,可以在不脱离本发明的范围的情况下利用其它实施例并且可以进行结构或逻辑改变。因此,以下描述不应在限制性的意义上来理解。要理解,本文描述的各个示例实施例的特征可以部分地或整体地与彼此进行组合,除非另行特别指出。
图1示出示例性计算机系统,其可以被采用于操作环境中并且用于托管或运行一个或多个计算机可读存储介质上包含的计算机应用,计算机可读存储介质存储用于控制计算机系统(诸如计算设备)以执行过程的计算机可执行指令。计算机实现的过程的示例包括可以被存储在计算机存储器中并利用处理器执行以基于根据先前垃圾收集的动态可调谐参数被触发的并发垃圾收集。
示例性计算机系统包括计算设备,诸如计算设备100。在基本硬件配置中,计算设备100通常包括处理器系统,其具有一个或多个处理单元,即处理器102,以及存储器104。例如,处理单元可以包括在一个芯片上的两个或以上的处理核或两个或以上的处理器芯片。在一些示例中,计算设备还可以具有一个或多个额外处理或专用处理器(未示出),诸如用于图形处理器单元上的通用计算的图形处理器,以执行从处理器102卸载的处理功能。存储器104可以以层次结构布置并且可以包括一级或多级高速缓存。取决于计算设备的配置和类型,存储器104可以是易失性(诸如随机访问存储器(RAM))、非易失性(诸如只读存储器(ROM)、闪存等)、或二者的特定组合。计算设备100可以采取若干形式中的一种或多种。这样的形式包括平板电脑、个人计算机、工作站、服务器、手持设备、消费电子设备(诸如视频游戏控制台或数字视频记录仪)或其他,并且可以是独立设备或被配置为计算机网络的部分。
计算设备100还可以具有额外的特征或功能。例如,计算设备100还可以包括额外的存储装置。这样的存储装置可以是可移除的和/或不可移除的并且可以包括磁盘或光盘、固态存储器或闪速存储设备(诸如可移除存储装置108和不可移除存储装置110)。计算机存储介质包括以任何适当的方法或技术实现的用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的易失性介质和非易失性介质、可移除介质和不可移除介质。存储器104、可移除存储装置108和不可移除存储装置110全部是计算机存储介质的示例。计算机存储介质包括RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多用盘(DVD)或其他光学存储装置、磁带盒、磁带、磁盘存储装置或其他磁性存储设备、通用串行总线(USB)闪速驱动器、闪存卡、或其他闪速存储设备、或者能够被用于存储期望信息并且能够由计算设备100访问的任何其他存储介质。因此,传播信号本身不被认为是存储介质。任何这样的计算机存储介质可以是计算设备100的部分。
计算设备100通常包括一个或多个输入和/或输出连接,诸如USB连接、显示端口、专属连接、以及其他以连接到各种设备来向计算设备提供输入和输出。输入设备112可以包括诸如键盘、指点设备(例如,鼠标、跟踪板)、触笔、语音输入设备、触摸输入设备(例如,触摸屏)或其他的设备。输出设备111可以包括诸如显示器、扬声器、打印机等的设备。
计算设备100通常包括允许计算设备100与其他计算机/应用115进行通信的一个或多个通信连接114。示例通信连接可以包括以太网接口、无线接口、总线接口、存储区域网络接口、以及专属接口。通信连接可以用于将计算设备100耦合到计算机网络,其可以根据诸如拓扑、连接方法以及尺度的各种各样的特性来分类。网络是通过便于通信的通信信道相互连接的计算设备和可能的其他设备的汇集并且允许在相互连接的设备之间共享资源和信息。计算机网络的示例包括局域网、广域网、互联网或其他网络。
计算设备100可以被配置为运行操作系统软件程序和一个或多个计算机应用,其构成系统平台。被配置为在计算设备100上运行的计算机应用包括至少一个进程(或任务),其是运行程序。每个进程提供资源以运行程序。一个或多个线程在进程的背景下运行。线程是操作系统在处理器102中分配时间的基本单元。线程是进程内的可以被调度用于执行的实体。进程的线程可以共享其虚拟地址空间和系统资源。每个线程可以包括异常处理程序、调度优先级、线程本地存储、线程标识符以及线程背景或线程状态,直到线程被调度。线程背景包括线程的机器寄存器集合、内核堆栈、线程环境块、以及与线程相对应的进程的地址空间中的用户堆栈。线程可以在通过诸如消息传递的技术的处理期间与彼此通信。
操作可以在与主应用线程分离的线程中执行。当应用调用方法以执行操作时,在方法执行其任务的同时,应用可以继续在其线程上执行。用于共享存储器多处理器的并发编程可以包括用于多线程访问相同数据的能力。共享存储器模型是多线程通信的最常用的部署方法。多个线程在多个处理器、多个处理器核、单个处理器核的多个逻辑节点和/或被附接到与处理器之间共享的存储器的其他类的并行化上执行。
本公开大体涉及垃圾收集器和提供垃圾收集的方法,诸如并发垃圾收集,与诸如计算设备100的数据处理系统中的编程语言或运行时系统一起使用。本公开的方面可以被体现为一种系统、方法或计算机程序产品。因此,本公开的方面可以采取完全硬件、完全软件(包括固件、驻存软件、微代码)或可以全部被统称为系统的软件和硬件方面的组合的形式。另外,本公开的方面可以采取计算机程序产品的形式,计算机程序产品包括具有用于使处理器执行本公开的方面的计算机可读程序指令的一个或多个计算机可读介质或媒介。
图2示出了可以被实现在计算设备100上的示例软件框架200的特征。框架200可以与以用于一个或多个平台的一种或多种框架兼容语言创建的开发者编写的软件应用一起使用。示例框架200包括具有运行时库和基类库的类库202,以及诸如运行时系统204、虚拟机或软件容器的应用引擎。在一个示例中,类库202包括由命名空间组织以限定以框架兼容编程语言可用的特征的类的集合。以框架兼容语言编写为源代码的软件应用被编译成平台无关语言或字节码,其可以在诸如计算设备100的平台上安装的特定于平台的虚拟机中执行。运行时系统204将字节码编译成在平台上执行的机器代码。运行时系统204可以提供额外的服务,包括存储器管理、类型安全、异常处理、垃圾收集、安全和线程管理。在执行了开发者编写的程序后,运行时系统204的特定于平台的即时编译器210将字节码转化成机器代码。编译器210可以提供提前编译和解释的组合,并且运行时系统204可以处置后期绑定数据类型并强制执行安全保证。
示例的类库202可以包括根据所公开的方法实现的一个或多个类206。通常,类206是可扩展程序代码模板或蓝图,其用于创建对象、提供针对状态的初始值以及行为的实现。类是使得开发者能够通过将其他类型、方法和事件的变量分组到一起来创建定制类型的构件。一个或多个类206可以包括类变量、实例变量、局部变量、参数、用户定义的方法、继承的状态和行为、以及接口。变量可以保持在存储器104中直到所有引用超出范围。在那时,运行时系统204经由垃圾收集器208可以将变量标记为适合进行垃圾收集。
垃圾收集器208自动管理针对应用的存储器的分配和释放。运行时系统204分配存储器104的片段以存储和管理对象。在一个示例中,存储器的片段被称为管理堆(managedheap)。(管理堆区别于操作系统中的本机堆。出于本公开的目的,“堆”是指管理堆)。对于每个新对象,运行时系统204从存储器的片段为对象分配存储器。在一个示例中,可以存在针对每个管理进程的管理堆,并且进程中的线程在相同堆上为对象分配存储器。在另一示例中,堆可以是大对象堆(诸如包括超过选定阈值大小的对象的堆)和小对象堆的累积。堆可以包括任何数量的非连续块虚拟存储器,每个包括具有对象的、散布着空闲存储器或空闲空间的区域的生存块。运行时系统204维持空闲列表数据结构或物理空闲列表,其索引已经被分配的空闲存储器中的所有空闲存储器,并且使用其来满足分配请求。
除了已经被分配的空闲存储器以外,运行时系统204可以维持针对堆可用的所有存储器的虚拟空闲列表。例如,运行时系统204可以指定用于堆的存储器104的子集的量或存储器负载。这可以被指定为小于或等于存储器104的量的存储器的量,作为存储器104的量的百分比,或对存储器104的某种其他限制。运行时系统204可以分配到虚拟空闲列表中以扩展物理空闲列表。
当地址空间在存储器的片段上变为被占用时,垃圾收集器208最终释放一些存储器。垃圾收集器208包括优化引擎212以确定执行收集的优选时间或时机。垃圾收集器208在存储器的片段中检查不再由应用使用的对象并且执行操作来回收存储器。当系统具有低物理存储器时或在存储器的片段上由已分配的对象使用的存储器超过可接受阈值的情况下,垃圾收集发生。
在一个示例中,被管理的存储器可以是分世代的。存储器可以被组织成多个世代以提供给长生存期对象和短生存期对象。垃圾收集主要与对通常占用存储器的片段的小部分的短生存期对象的回收一起发生。一个示例包括堆上的对象的三个世代,包括世代0、世代1和世代2。世代0是最年轻的一个世代并且包含短生存期对象,诸如临时变量。垃圾收集在该世代中最频繁地发生。在一个示例中,新分配的对象形成对象的新世代,并且隐含地是世代0收集,除非它们是大对象,在这种情况下它们继续到世代2收集中的大对象堆上。许多对象针对世代0中的垃圾收集被回收并且存活不到下一世代。世代1包括短生存期对象并且可以用作短生存期对象与长生存期对象之间的缓冲器。一些示例垃圾收集器不包括世代1堆并且仅仅包括针对短生存期对象和长生存期对象的堆。另外,短生存期对象的一个世代或多个世代可以被称为短暂的世代。世代2包括长生存期对象。长生存期对象的示例是服务器应用中的、包含在进程的持续时间内生存的静态数据的对象。当条件满足时,垃圾收集发生在特定世代上。收集世代意味着收集该世代中和所有其更年轻世代中的对象。世代2垃圾收集通常是完全垃圾收集,因为其回收管理堆的所有世代中的所有对象。在垃圾收集中未回收的对象被称为存活者并且被提升到下一世代。例如,从世代0垃圾收集存活的对象被提升到世代1,从世代1垃圾收集存活的对象被提升到世代2,并且从世代2垃圾收集存活的对象保持在世代2中。
在垃圾收集开始或被触发之前,被管理的线程可以被挂起,除了触发了垃圾收集的线程。垃圾收集器可以经由诸如以下的信息确定对象是否是活(live)的:由即时编译器和堆栈行走者(stack walker)提供的堆栈变量、指向被管理的对象并且可以由用户代码或由运行时分配并且来自可以正在引用其他对象的、应用领域中的静态对象的句柄。每个应用领域跟踪其静态对象。在一个示例中,垃圾收集可以发生在包括以下的阶段的集合中:标记阶段,其找到并创建所有活对象的列表;重定位阶段,其更新对将被压缩(compact)的对象的引用;以及压缩阶段,其回收由死对象占用的空间并压缩存活(surviving)对象。压缩阶段将已经从垃圾收集存活的对象向存储器的片段的更老的端移动。在一个示例中,垃圾收集器208可以是标记和扫掠收集器,其可以找到并创建所有活对象的列表,更新对占用要被压缩的存储器的对象的引用,回收由死对象占用的地址空间并压缩存活对象。
并发垃圾收集是一种形式的垃圾收集,其使得线程能够与执行垃圾收集的专用线程在执行垃圾收集的专用线程的持续时间中的至少一些内并发地运行。例如,在一个或多个突变线程(即,使管理堆突变的线程)正在运行的同时,并发垃圾收集可以在专用线程中运行。并发垃圾收集可以在分世代和非分世代堆上执行。在一个示例中,并发垃圾收集影响针对长生存期对象(诸如世代2)的垃圾收集。例如,世代0和世代1中的垃圾收集被非并发地执行,因为它们可以快速完成并且不会显著地影响性能。
垃圾收集器208试图经由利用优化引擎212对收集的优选触发来改进性能。垃圾收集器通常呈现性能开销,并且太经常运行或在不优选时可以不利地影响并发运行的程序的性能。如果收集被触发得太早,则空闲存储器空间尚未被有效利用并且并发运行的程序的性能被不利地影响。如果收集被触发得太晚并且管理堆用尽存储器空间,则管理堆的分世代的大小(generational size)可能需要被扩大,这不利地影响非压缩垃圾收集器的性能。压缩并发垃圾收集器的性能可以遭受影响以及突变线程可能必须等待更多存储器空间变得可用。
垃圾收集可以受不可预测的因素影响,这些因素诸如操作系统线程调度和应用行为的突然变化以及其他因素。由于这些因素的不可确定性质,预测构建空闲存储器空间和消耗空闲存储器空间的节奏是困难的。因此,根据静态地被预先配置的管理堆中剩余的可用的空闲存储器空间的量来触发垃圾收集一般是低效的,并且可能冒着用尽空闲空间并且必须从操作系统获取更多存储器或不利用从先前垃圾收集构建的空闲空间的风险。
图3示出了用于与软件框架200的垃圾收集器208一起使用(诸如在优化引擎212中),以利用闭环反馈控制使用虚拟空闲空间来控制堆大小的示例方法300。在一个示例中,在302处,在内部闭合反馈环中基于空闲列表和选定量的空闲空间来触发存储器分配中的垃圾收集。在304处,在外部闭合反馈环中基于选定存储器负载和根据垃圾收集生成的当前存储器负载来确定空闲列表。存储器负载可以基于针对应用的可用存储器,诸如针对堆大小或软件容器大小可用的物理存储器的量。例如,如果计算设备100包括10千兆字节的存储器104,则系统可以指定70%的存储器104(或7千兆字节)可用作存储器负载。当前存储器负载是当前可用物理存储器的量,其可以小于存储器负载。系统可以经由应用编程接口或其他机制指定存储器负载或存储器限制以限制堆大小或容器大小。在一个示例中,空闲列表是存储器104中的虚拟空闲列表或可用空间。空闲空间包括未正在被使用的已分配的存储器,并且选定量的空闲空间包括运行时系统试图维持的指定量的空闲空间。
图4示出了在软件框架200中实现方法300的系统400的示例。内部闭合反馈环402在内部误差输入408处接收空闲列表404,诸如可以被分配的、高达存储器负载的、可用存储器的虚拟空闲列表,以及指定量的空闲空间406,诸如可以被认为是用户指定的空闲空间的目标的用户指定量的空闲空间。在一个示例中,虚拟空闲列表404和空闲空间406被提供为比率,诸如存储器或堆的百分比或空闲存储器空间与堆上的可用存储器空间的比率。在另一示例中,空闲空间的量可以是空闲存储器的字节的数量。内部误差输入408是虚拟空闲列表404与空闲空间406之间的差,其可以利用内部反馈机制410(其可以包括多项控制器)来处理。第一输出412可以包括将在下一垃圾收集414被触发之前在空闲空间中由其他世代分配被消耗的存储器的量。输出可以被扩展到任何其他类型的因素,因素将表示对下一垃圾收集414的触发,诸如将在下一垃圾收集414被触发之前被执行的更年轻的世代垃圾收集的数量。
在垃圾收集414完成之后,外部闭合反馈环422在外部误差输入428处接收当前存储器负载424,诸如当前可用量的物理存储器,以及指定量的存储器负载426,诸如可以被认为是用户指定的存储器负载的目标的用户指定量的存储器负载。在一个示例中,当前存储器负载424和指定量的存储器负载426被提供为比率,诸如所有存储器104的百分比。在另一示例中,空闲空间的量可以是存储器104的子集的字节的数量。内部误差输入428可以确定当前存储器负载424与所指定的存储器负载426之间的差,其可以利用外部反馈机制430(其可以包括多项控制器)来处理。外部反馈机制提供输出,其是空闲列表404。
到闭合反馈环402、422的输入是距目标的误差408、428,诸如实际量对比设定点或目标量。外部环428提供虚拟空闲空间列表的输出404。内部环402提供确定下一垃圾收集何时被触发的分配的输出412。垃圾收集414可以基于可以在世代上执行的分配的量来触发,其基于从外部环428提供的虚拟空闲空间计算。
内部反馈机制410和外部反馈机制430的多项控制器的示例可以包括一种类型的比例积分导数控制器(PID控制器)。多项控制器将误差值计算为期望设定点(诸如选定存储器负载或选定空闲空间)与测量进程变量(诸如分别是当前存储器负载和虚拟空闲空间)之间的差,并且基于比例、积分和导数项中的至少一个来应用校正以对控制函数自动应用准确且响应的校正。在一个示例中,多项控制器可以被实现为具有比例和积分项的进程。在一个示例中,导数项可以缺失。例如,比例项可以包括说明距设定点或目标的误差的当前值。如果误差大且为正,则输出也将大且为正。积分项可以包括说明误差的过去值。如果当前输出不足够强,例如,则误差的积分项将随时间累积,并且优化引擎212将通过应用更强的动作来做出响应。只要应用,导数项可以说明误差的可能未来趋势并且可以基于当前的改变速率。
在一个示例中,内部反馈机制410和外部反馈机制430的输出404、412可以基于多项控制器的项之和。在外部反馈环422中,例如,比例项可以包括如从外部误差输入428确定的误差乘以常数,诸如ml_kp*误差。此外,在外部反馈环422中,积分项还可以将来自外部误差输入428的误差乘以常数,诸如ml_ki*误差,以获得积分误差量error_ki,并且然后将积分误差量添加到累积误差或accu_error,诸如accu_error+=error_ki。累积误差基于当前存储器负载424和存储器负载设定点值426。比例项和积分项可以被添加在一起以返回总虚拟空闲列表大小,其可以被提供到输出404作为
total_virtual_fl_size=ml_kp*error+accu_error
避免过大变化的各种多项技术(诸如抗卷绕(anti-windup))可以被应用到积分项或其他。
为了初始化系统400,优化引擎212可以应用初始由运行时系统200配置的参数。在一个示例中,用户还可以配置或选择性地调整参数。例如,存储器负载可以被选择为70%,并且空闲空间目标可以被选择为包括堆大小的15%。初始触发器可以经由其他机制完成,如当存储器的每5%被消耗时触发垃圾收集以建立足够的垃圾收集来展现模式或历史。
图5示出了在软件框架200中实现方法300的示例系统500,其中,系统400的类似特征用类似的附图标记来标记,但是来自空闲列表404的虚拟空闲列表被分布在多个世代中并且由诸如第一世代内部闭合反馈环402a和第二世代内部闭合反馈环402b的多个内部闭合反馈环触发。第一世代和第二世代的描述旨在用于说明,并且可以不与垃圾收集器208的世代0和世代1或世代1和世代2相对应。
在示例中,第一世代内部闭合反馈环402a在误差输入408a处接收被指派给第一世代的空闲列表404,或者第一世代虚拟空闲列表,以及针对第一世代的第一指定量的空闲空间406a,诸如可以被认为是用户指定的第一世代中的空闲空间的目标的用户指定量的空闲空间。第一世代空闲列表可以是总空闲列表的百分比并被提供为比率。内部误差输入408a可以确定第一世代虚拟空闲列表404与第一所指定的空闲空间406a之间的差,其可以利用诸如多项控制器的内部反馈机制410a来处理。第一世代输出412a可以包括将在下一垃圾收集414被触发之前在空闲空间中由世代分配被消耗的存储器的量。
第二世代内部闭合反馈环402b在误差输入408b处接收被指派给第二世代的空闲列表404,或者第二世代虚拟空闲列表,以及针对第二世代的第二指定量的空闲空间406b,诸如可以被认为是用户指定的第二世代中的空闲空间的目标的用户指定量的空闲空间。第二世代空闲列表可以是总空闲列表的百分比并被提供为比率,并且在两个世代的情况下,可以等于1-第一世代空闲列表。第二所指定的空闲空间406b针对第一世代的第一所指定的空闲空间406a可以是相同的或不同的。误差输入408b可以确定第二世代虚拟空闲列表与第二所指定的空闲空间406b之间的差,其可以利用诸如多项控制器的第二世代反馈机制410b来处理。第二世代输出412b可以包括将在下一垃圾收集414被触发之前在空闲空间中由世代分配被消耗的存储器的量。
尽管已经在本文中说明并描述了特定实施例,但是本领域普通技术人员将认识到,在不脱离本发明的范围的情况下,各种备选和/或等效实施方式可以代替示出和描述的特定实施例。本申请旨在涵盖本文中讨论的特定实施例的任何调整或变型。

Claims (10)

1.一种计算设备中的垃圾收集的方法,包括:
在内部闭合反馈环中基于空闲列表和选定量的空闲空间来触发存储器分配中的垃圾收集;以及
在外部闭合反馈环中基于选定存储器负载和从所述垃圾收集被生成的当前存储器负载来确定所述空闲列表。
2.根据权利要求1所述的方法,其中所述选定存储器负载基于存储器负载比率、堆大小或基于容器限制。
3.根据权利要求1所述的方法,其中所述空闲列表被分布在多个世代之间。
4.根据权利要求3所述的方法,其中所述多个世代包括第一世代和第二世代,其中所述第二世代比所述第一世代更不频繁地被垃圾收集,并且其中所述空闲列表被分布在多个存储器分配中。
5.根据权利要求1所述的方法,其中所述外部反馈环包括多项控制器反馈机制,所述多项控制器反馈机制包含比例项和积分项。
6.一种回收存储器的系统,包括:
存储器设备,用于存储指令集;以及
处理器,用于执行所述指令集以:
在内部闭合反馈环中基于空闲列表和选定量的空闲空间来触发存储器分配中的垃圾收集;以及
在外部闭合反馈环中基于选定存储器负载和从所述垃圾收集被生成的当前存储器负载来确定所述空闲列表。
7.根据权利要求6所述的系统,其中所述外部反馈环包括反馈机制,所述反馈机制接收基于所述选定存储器负载与所述当前存储器负载的差异的误差量。
8.根据权利要求6所述的系统,其中所述空闲列表被分布在多个存储器分配中的多个垃圾收集世代之间,并且其中所述多个垃圾收集世代中的每个垃圾收集世代包括反馈机制,所述反馈机制接收基于所述空闲列表与所述选定量的空闲空间的差异的误差量。
9.一种计算机可读设备,用于存储计算机可读指令以控制处理器来控制垃圾收集,所述指令包括:
在内部闭合反馈环中基于空闲列表和选定量的空闲空间来触发存储器分配中的垃圾收集;以及
在外部闭合反馈环中基于选定存储器负载和从所述垃圾收集被生成的当前存储器负载来确定所述空闲列表。
10.根据权利要求9所述的计算机可读设备,其中所述外部反馈环包括多项控制器,所述多项控制器具有比例项和积分项。
CN201980039590.XA 2018-06-14 2019-05-23 闭环垃圾收集器 Pending CN112313631A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/008,820 US11650916B2 (en) 2018-06-14 2018-06-14 Closed loop garbage collector
US16/008,820 2018-06-14
PCT/US2019/033643 WO2019240927A1 (en) 2018-06-14 2019-05-23 Closed loop garbage collector

Publications (1)

Publication Number Publication Date
CN112313631A true CN112313631A (zh) 2021-02-02

Family

ID=66821485

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980039590.XA Pending CN112313631A (zh) 2018-06-14 2019-05-23 闭环垃圾收集器

Country Status (4)

Country Link
US (1) US11650916B2 (zh)
EP (1) EP3807770A1 (zh)
CN (1) CN112313631A (zh)
WO (1) WO2019240927A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11899576B2 (en) * 2019-06-11 2024-02-13 Micron Technology, Inc. Dynamically modifying garbage collection rates for a memory subsystem in a closed-loop system
US11954023B2 (en) 2022-07-20 2024-04-09 Microsoft Technology Licensing, Llc Garbage collection prefetching state machine

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050149587A1 (en) * 2004-01-05 2005-07-07 International Business Machines Corporation Breaking read barrier to apply optimizations
WO2011109191A1 (en) * 2010-03-02 2011-09-09 Advanced Micro Devices, Inc. Gpu support for garbage collection
US20150127623A1 (en) * 2013-11-07 2015-05-07 International Business Machines Corporation Allocation aware heap fragmentation metrics
US20160350214A1 (en) * 2015-05-29 2016-12-01 Google Inc. Idle time software garbage collection
CN107408018A (zh) * 2015-03-27 2017-11-28 英特尔公司 用于在固态驱动器中适应垃圾收集资源分配的机制

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6807551B2 (en) * 2002-04-22 2004-10-19 Sun Microsystems Inc. Measuring maximum memory requirement of an application at any point through continuous use of garbage collector
US9754122B1 (en) * 2014-03-21 2017-09-05 Amazon Technologies, Inc. Isolating tenants executing in multi-tenant software containers
US10565104B2 (en) * 2017-08-01 2020-02-18 International Business Machines Corporation System and method to manage and share managed runtime memory for JAVA virtual machine

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050149587A1 (en) * 2004-01-05 2005-07-07 International Business Machines Corporation Breaking read barrier to apply optimizations
WO2011109191A1 (en) * 2010-03-02 2011-09-09 Advanced Micro Devices, Inc. Gpu support for garbage collection
US20150127623A1 (en) * 2013-11-07 2015-05-07 International Business Machines Corporation Allocation aware heap fragmentation metrics
CN107408018A (zh) * 2015-03-27 2017-11-28 英特尔公司 用于在固态驱动器中适应垃圾收集资源分配的机制
US20160350214A1 (en) * 2015-05-29 2016-12-01 Google Inc. Idle time software garbage collection
CN107430492A (zh) * 2015-05-29 2017-12-01 谷歌公司 空闲时间软件垃圾收集

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
陈贤闯;徐小良;: "一种基于栈式分配的JVM垃圾收集算法", 计算机系统应用, no. 07 *

Also Published As

Publication number Publication date
US11650916B2 (en) 2023-05-16
US20190384705A1 (en) 2019-12-19
EP3807770A1 (en) 2021-04-21
WO2019240927A1 (en) 2019-12-19

Similar Documents

Publication Publication Date Title
US10572181B2 (en) Multiple stage garbage collector
EP3577565B1 (en) Garbage collector
US7167881B2 (en) Method for heap memory management and computer system using the same method
US8612493B2 (en) Allocation cache premarking for snap-shot-at-the-beginning concurrent mark-and-sweep collector
JP4265610B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
US20090037501A1 (en) Method and system for managing memory for a program using area
JP4333676B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
CN112313631A (zh) 闭环垃圾收集器
US7565497B1 (en) Coarse write barrier control mechanism
US11416392B2 (en) Arena-based memory management
JP3826626B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
US20120221821A1 (en) Method of managing memory in computer system, computer system and memory managing program
JP4345748B2 (ja) メモリ割当装置、メモリ割当方法、およびプログラム記録媒体
US11188460B2 (en) Arena-based memory management
Higuera-Toledano et al. Analyzing the performance of memory management in RTSJ
CN109923527B (zh) 可变类型建立器
Tasneem et al. Android memory optimization
Chan et al. BalloonJVM: Dynamically Resizable Heap for FaaS
US11789863B2 (en) On-the-fly remembered set data structure adaptation
Charan et al. Development of Real-Time Capability in Application Virtual Machine using Concurrent Automatic Memory Management Algorithm
Choi et al. Shared heap management for memory-limited Java virtual machines

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