CN103339616B - 用于基于区域的垃圾收集器中的递增类卸载的方法和装置 - Google Patents
用于基于区域的垃圾收集器中的递增类卸载的方法和装置 Download PDFInfo
- Publication number
- CN103339616B CN103339616B CN201280006988.1A CN201280006988A CN103339616B CN 103339616 B CN103339616 B CN 103339616B CN 201280006988 A CN201280006988 A CN 201280006988A CN 103339616 B CN103339616 B CN 103339616B
- Authority
- CN
- China
- Prior art keywords
- class
- region
- memory
- bit vector
- class set
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 230000008569 process Effects 0.000 claims abstract description 29
- 239000013598 vector Substances 0.000 claims description 50
- 230000014509 gene expression Effects 0.000 claims description 16
- 238000003860 storage Methods 0.000 claims description 7
- 230000009466 transformation Effects 0.000 claims description 3
- 238000004590 computer program Methods 0.000 abstract description 11
- 238000007689 inspection Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 27
- 230000006870 function Effects 0.000 description 9
- 230000009471 action Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 238000009826 distribution Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 239000003795 chemical substances by application Substances 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
- Refuse Collection And Transfer (AREA)
Abstract
描述一种用于使用基于区域的垃圾收集器来递增地卸载类的方法。在一个实施方式中,这样的方法包括针对类集合维护记忆集合。记忆集合指示在存储器中的一个或者多个区域中是否包含类集合的实例、以及在哪些区域中包含实例。在针对存储器中的区域的子集执行递增式垃圾收集过程时,该方法检查记忆集合以确定类集合是否包括在子集以外的区域中的实例。如果记忆集合指示类集合包括在区域子集以外的实例,则该方法标识类集合为“活”。这将排除从区域子集卸载类集合。这里也公开一种对应计算机程序产品和装置。
Description
技术领域
本发明涉及存储器管理,并且更具体地涉及用于使用基于区域的垃圾(garbage)收集器来递增地卸载类的装置和方法。
背景技术
在面向对象的管理的运行时、比如Java虚拟机(JVM)、微软共同语言运行时(CLR)或者Smalltalk运行时中,主要存储器资源是垃圾收集对象堆。对象堆为对象提供存储器,每个对象是类的实例。所有管理的运行时支持对象垃圾收集。一些管理的运行时、比如Java虚拟机也提供类垃圾收集。
在Java中,按照JavaClassLoader的粒度、实质上由程序员指明的任意组有关类来收集类。类加载器可以是一旦(a)没有对类加载器的引用、(b)没有对它的定义类中的任何定义类的引用、(c)没有来自任何栈上的任何定义类的运行方法和(d)没有它的定义类中的任何定义类的实例就收集的垃圾。情况(a)和(b)相对易于确定,因为类加载器和类二者具有代表它们的代理对象。通常的垃圾收集器算法将“自由”发现对这些的引用。情况(c)也易于确定,因为必须在每个垃圾收集周期开始时爬取(crawl)栈。然而情况(d)更难以确定。
在简单实现方式中,垃圾收集器必须检查每个活对(live)象以确定哪些类具有活实例。这简单到足以在收集器执行全局收集时完成。但是现代垃圾收集器往往递增以便实现较高级暂停时间。这样的收集器仅检查堆的部分。这些收集器通常使用“记忆集合(rememberedset)”以保持对从在收集集合以外的对象对在收集集合内的对象的引用的跟踪。本机类卸载垃圾收集器可以使用相同解决方案。然而这显然不切实际。记忆集合之所以成功是因为多数对象往往具有很少引用。但是每个对象具有类子帧;记住这些中的每一个将不切实际。
另一本机解决方案是使用“引用计数”。这一解决方案具有若干明显缺点。这一解决方案涉及到在每次分配时递增类中的计数器而每当回收对象时递减它。虽然这一解决方案不容易有循环引用的典型引用技术问题,但是它确实具有两个关键问题。首先,它未没有良好地并行化,因为它要求所有分配线程更新共享计数器。其次,它要求检查所有回收的对象,这是现代垃圾收集器努力避免的事情。
针对这一问题的另一解决方案是使用基于训练算法的收集器。这样的收集器是基于区域的收集器。然而不同于广义的基于区域的收集器,它的限制在于它必须按照轮循顺序收集区域。由于这一限制,训练算法仅需记忆从更高编号区域对更低编号区域的引用。为了实现递增式类卸载,这一解决方案向每个类添加“最年轻训练”标识符,该标识符记录具有类的实例的最低编号区域。这一简单解决方案适合于训练算法、但是既不能应用于也不容易推广至一般的基于区域的垃圾收集器。
鉴于前文,需要用于从垃圾收集对象堆中的区域的任何子集中高效卸载类的装置和方法。理想地,这样的装置和方法不会要求区域是按照任何特定顺序收集的垃圾。
发明内容
已经响应于本领域的当前状态、并且尤其是响应于本领域中的尚未被当前可用装置和方法完全解决的问题和需要而开发本发明。因而已经开发本发明以提供用于使用基于区域的垃圾收集器来递增地卸载类的装置和方法。本发明的特征和优点将从以下描述和所附权利要求中变得更完全清楚或者可以通过实现如下文阐述的本发明来获悉。
与前文一致,这里公开一种用于使用基于区域的垃圾收集器来递增地卸载类的方法。在一个实施方式中,这样的方法包括针对类集合维护记忆集合,其中记忆集合包括与类加载器关联的类集合、类组和单个类中之一。记忆集合指示在存储器中的一个或者多个区域中是否包含类集合的实例、以及在哪些区域中包含实例。在针对存储器中的区域的子集执行递增式垃圾收集过程时,该方法检查记忆集合以确定类集合是否包括在子集以外的区域中的实例。如果记忆集合指示类集合包括在区域子集以外的实例,则该方法确定类集合为“活”。这将排除从区域子集卸载类集合。
这里也公开并且要求保护一种对应计算机程序产品和装置
附图说明
为了将易于理解本发明的优点,将通过参照附图中所示具体实施方式来表现对上文简要描述的本发明的更具体描述。应当理解,这些附图仅描绘本发明的典型实施方式,因此不会视为限制它的范围,将通过使用附图用附加特性和细节描述和说明本发明,在附图中:
图1是示出适合于与本发明的各种实施方式一起使用的计算机系统的一个示例的高级框图;
图2是示出面向对象的管理的运行时的一个示例的高级框图,该运行时在这一示例中为Java虚拟机;
图3示出本发明的一个实施方式,其中在这一示例中为运行时环境中的每个类加载器维护为记忆集合场的记忆集合;
图4是示出在记忆集合场的表示之间的转变示例的流程图;
图5是示出用于从对象堆卸载类加载器的方法的一个实施方式的流程图;
图6示出本发明的一个备选实施方式,其中为每个类加载器维护位矢量;
图7示出本发明的一个备选实施方式,其中为每个类维护位矢量;以及
图8示出本发明的一个备选实施方式,其中为每个类加载器维护记忆集合场而未使用位矢量。
具体实施方式
将容易理解,可以在广泛多种不同配置中布置和设计如这里一般描述和附图中示出的本发明的部件。因此,对如附图中代表的本发明的实施方式的以下更具体描述未旨在于限制如要求保护的本发明的范围、但是仅代表根据本发明的当前设想的实施方式的某些示例。将通过参照其中相似标号通篇标示相似部分的附图最好地理解当前描述的实施方式。
如本领域技术人员将理解的那样,可以体现本发明为装置、系统、方法或者计算机程序产品。另外,本发明可以采用硬件实施方式、配置为操作应用的软件实施方式(包括固件、常驻软件、伪代码等)或者组合软件与硬件方面的实施方式这样的形式,这些方面可以这里都通称为“模块”或者“系统”。另外,本发明可以采用在任何有形表达介质中体现的计算机可用存储介质这样的形式,该有形表达介质具有在其中存储的计算机可读程序代码。
一个或者多个计算机可用或者计算机可读存储介质的任何组合可以用来存储计算机程序产品。计算机可用或者计算机可读存储介质可以例如是但不限于电子、磁、光学、电磁、红外线或者半导体系统、装置或者设备。计算机可读存储介质的更多具体示例(非穷尽列举)可以包括以下各项:具有一个或者多个接线的电连接、便携计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者闪存)、光纤、便携压缩盘只读存储器(CDROM)、光学存储设备或者磁存储设备。在本文的上下文中,计算机可用或者计算机可读存储介质可以是任何如下介质,该介质可以包含、存储或者传送用于由指令执行系统、装置或者设备使用或者与指令执行系统、装置或者设备结合使用的程序。
可以在一个或者多个编程语言的任何组合中编写计算机程序代码,该编程语言包括面向对象编程语言、比如Java、Smalltalk、C++等和常规过程编程语言、比如“C”编程语言或者相似编程语言。也可以在低级编程语言、比如汇编语言中编写用于实施本发明的计算机程序代码。
下文可以参照根据本发明的各种实施方式的方法、装置、系统和计算机程序产品的流程图图示和/或框图描述本发明。将理解流程图图示和/或框图的每个块以及在流程图图示和/或框图中的块的组合可以由计算机程序指令或者代码实施。可以向通用计算机、专用计算机或者其他可编程数据处理装置的处理器提供计算机程序指令以产生机器,从而经由计算机或者其他可编程处理装置的处理器执行的指令创建用于实施在流程图和/或框图的一个或者多个块中指定的功能/动作的装置。
计算机程序指令也可以存储于计算机可读存储介质中,该计算机可读存储介质可以指引计算机或者其他可编程数据处理装置以特定方式工作,从而存储于计算机可读存储介质中的指令产生包括指令装置的制造品,该指令装置实施在流程图和/或框图的一个或者多个块中指定的功能/动作。计算机程序指令也可以加载到计算机或者其他可编程数据处理装置上以使系列操作步骤在计算机或者其他可编程装置上被执行以产生计算机实施的过程,从而在计算机或者其他可编程装置上执行的指令提供用于实施在流程图和/或框图的一个或者多个块中指定的功能/动作的过程。
参照图1,示出计算机系统100的一个示例。呈现计算机系统100以示出如下环境的一个示例,可以在该环境中实施根据本发明的装置和方法。计算机系统100仅通过示例来呈现而未旨在于限制。实际上,除了所示计算机系统100之外,这里公开的装置和方法可以还可以适用于广泛多种不同计算机系统。也可以潜在地跨越多个计算机系统100分布这里公开的装置和方法。
计算机系统100包括至少一个处理器102并且可以包括多于一个处理器。处理器102包括存储数据的一个或者多个寄存器104,该数据描述处理器102的状态并且有助于执行软件系统。寄存器104可以在处理器102内部或者可以存储于存储器106中。存储器106存储由处理器102所操作的可操作和可执行数据。处理器102可以借助存储器控制器108存储器106。存储器106可以包括易失性存储器(例如RAM)以及非易失性存储器(例如ROM、EPROM、EEPROM、硬盘、闪存等)。
处理器102可以耦合到附加设备,这些设备支持执行软件和与用户交互。例如处理器102可以耦合到一个或者多个输入设备110、比如鼠标、键盘、触屏、麦克风等。处理器102也可以耦合到一个或者多个输出设备、比如显示设备112、扬声器等。处理器102可以借助网络114、比如LAN、WAN或者因特网与一个或者多个其他计算机系统通信。网络适配器116可以有助于通过网络114的通信。
参照图2,示出面向对象的管理的运行时的一个示例,该运行时在这一示例中为Java运行时环境。呈现Java运行时环境以示出运行时环境的一个示例,本发明的各种实施方式可以在该运行时环境中操作。然而这里公开的递增式垃圾收集技术不限于Java运行时环境、但是可以在使用垃圾收集对象堆来存储对象的任何面向对象的管理的运行时中操作或者适于在该运行时中操作。本发明的实施方式可以在其中操作的运行时环境的其他非限制示例包括微软共同语言运行时(CLR)和Smalltalk运行时。因此,虽然这里具体参照Java运行时环境,但是这里教导的原理不限于Java运行时环境、但是可以适用于许多运行时环境。
如图2中所示,在Java运行时环境中,Java虚拟机202可以被配置为在可以包括下层硬件和操作系统架构204、206的具体平台上操作。如图所示,Java虚拟机202接收被编译成称为“字节码”200的中间形式的程序代码200。Java虚拟机202将这一字节码200翻译成用于在下层平台204、206上执行的本机操作系统调用和机器指令。取代编译用于具体硬件和软件平台204、206的字节码200,编译字节码200一次以在所有Java虚拟机202上操作。对照而言,可以按照下层硬件和软件平台204、206定制Java虚拟机202。以这一方式,Java字节码200可以视为独立于平台。
如先前提到的那样,在Java运行时环境中,主要存储器资源是垃圾收集对象堆210。对象堆210为对象提供存储器,每个对象是类的实例。在Java运行时环境中提供垃圾对象收集模块208或者子系统208以回收程序不再使用的对象或者与对象关联的类占用的存储器。除了其他益处之外,垃圾收集模块208还使程序员免于担心释放不再需要的对象,这原本会需要来自程序员的大量设计努力。
如先前提到的那样,在Java中,按照类加载器的粒度卸载类,这些类加载器是由程序员指明的实质上任意组有关类。一旦(a)没有对类加载器的引用、(b)没有对它的定义类中的任何定义类的引用、(c)没有来自任何栈上的任何定义类的运行方法、和(d)没有它的定义类中的任何定义类的实例,则可以卸载类加载器。垃圾收集模块208可以容易确定情况(a)和(b),因为类加载器和类二者具有代表它们的代理对象。垃圾收集模块208也可以容易确定情况(c),因为在每个垃圾收集周期开始时爬取栈。然而垃圾收集模块208可能确定情况(d)具有更大难度。将结合图3至8描述用于高效确定情况(d)的各种新颖技术。
为了减少暂停时间,垃圾收集模块208可以被配置为以递增方式操作。也就是说,如相对于整个对象堆210,垃圾收集模块208可以被配置为一次对对象堆210的部分执行对象单元收集。为了实现这一点,可以将对象堆210划分成多个区域(例如数以百计或者数以千计的区域)。垃圾收集模块208然后可以在任何特定时间对这些区域的子集(这里也称为“收集集合”)执行垃圾收集。这尽可能最小化对主程序的破坏。由于垃圾收集模块208可以用递增方式操作,所以垃圾收集模块208需要能够确定哪些类加载器具有在收集集合以内和以外的活对象以确定是否可以卸载类加载器。结合图3至8讨论用于确定类加载器是否具有在收集集合以内或者以外的活对象的各种技术。
参照图3,在根据本发明的某些实施方式中,可以为运行时环境中的每个类集合提供记忆集合。在本公开内容中,“类集合”用来指代与类加载器关联的类集合、类组、单个类等。尽管Java可以按照类加载器的粒度卸载类,但是其他运行时环境可以在其他粒度水平、比如个别类或者类组卸载类。短语“类集合”旨在于涵盖这些不同粒度水平。
图3示出其中类集合是与类加载器300关联的类集合的一个实施方式。在这一实施方式中,记忆集合304与运行时环境中的每个类加载器300关联。记忆集合304用来记忆与类加载器300关联的任何类是否包括对象堆210的任何区域302中的实例。记忆集合304也可以包括实例位于其中的区域302。
如图3中所示,在选择的实施方式中,记忆集合304可以体现为字段,该字段在这一实例中为标记的指针304。在某些实施方式中,这样可以向类加载器300的内部结构添加这样的字段304。例如在Java运行时环境中,可以向内部ClassLoader结构添加字段304。这一字段304可以由垃圾收集模块208用来构建区域302的记忆集合304,这些区域包含类加载器300定义的类的实例。
为了高效地使用存储器,在某些实施方式中字段304可以使用图3中所示表示之一。这些表示包括:(1)“空”表示304a——这一表示指示在存储器210中的区域302中的任何区域中不含类集合的实例;(2)“立即”表示304b——这一表示存储一个或者多个指针,该指针指向存储器210中的区域302,这些区域包含类集合的实例;(3)“溢出”表示304c——这一表示是错误状态,该错误状态假设所有区域302包含类集合的实例,即使实际上情况不是这样;以及(4)“位矢量”表示304d——这一表示存储指向位矢量306的指针,该位矢量对每个区域302具有一位,其中设置位矢量306中的位指示在对应区域302中包含类集合的至少一个实例。在所示实施方式中,在每个字段304的末尾的两位提供用于指示使用哪个表示的“标记”。例如如图3中所示,“00”标记指示字段304使用“空”表示304a;“01”标记指示字段304使用“立即”表示304b;“11”标记指示字段3044使用“溢出”表示304c,并且“10”标记指示字段304使用“位矢量”表示304d。
参照图4,在继续主要参照图3之时,在向对象堆210上加载类集合(例如类加载器)时,与类集合关联的字段304可以初始地开始于空表示304a。空表示304a可以等效于位未被设置的位矢量306。字段304然后可以在向区域302中引入类集合的实例时向立即表示304b转变。立即表示304b可以视为等效于仅用于包含实例的区域的位被设置的位矢量306。如先前提到的那样,立即表示304b可以为少量指针分配存储器,这些指针指向其中存储类集合的实例的区域302。这避免在仅在少量区域302中包含类集合的实例时分配整个位矢量306的成本。例如在Java中普遍使用Singleton类加载器(与仅包括单个实例的单个类关联的类加载器)——标准java.lang.reflect包利用它们。相比于分配整个位矢量306,用于指向单个区域或者少量区域302的能力可以提供显著节省。在某些实施方式中,可以扩展立即表示304b以按索引标识少量区域302。
一旦包含类集合的实例的区域302的数目超过立即表示304b可以存储的指针的数目,则字段304可以向位矢量表示304d转变。在向这一表示304d转变时,向类集合分配位矢量306。如先前提到的那样,这一位矢量306可以包括用于对象堆210中的每个区域302的位。设置如下位,该位指示在对应区域302中存储与类集合关联的类的至少一个实例。
在某些实施方式中,垃圾收集模块208可以限制由位矢量306使用的存储器数量。如果垃圾收集模块208不能分配位矢量306,则由于已经达到存储器限制或者系统用完存储器,所以垃圾收集模块208可以设置字段304的状态为溢出表示304c。溢出表示304c可以视为等效于每位被设置的位矢量306,除此以外,不同于位矢量306,不能从溢出表示304c清除位之外。一旦字段304使用溢出表示304c,它可以在溢出表示304c中保持直至从对象堆210卸载对应类集合。类似地,一旦字段304使用位矢量表示304d,它可以在位矢量表示304d中保持直至从对象堆210卸载对应类集合。
参照图5,示出用于在递增式垃圾收集过程期间从对象堆210卸载类对象并且更具体为类加载器300的方法500的一个实施方式。方法500假设每个类加载器300包括它自己的位矢量306,但是方法500可以容易适于处置图3和4中描述的所有四个表示304a-d。如图所示,对于收集集合中的每个类加载器300,方法500清除504位矢量306中的用于对象集合中的区域302的位。如果在清除位之后,方法500确定506位矢量306为空,则类加载器300是用于从收集集合卸载的候选。另一方面,如果方法500确定506位矢量306非空(设置至少一位),则类加载器300不是用于从收集集合卸载的候选,因为它可能包含在收集集合以外的区域中的至少一个示例。在这样的情况下,方法500标记508类加载器300为“活”。
在递增式垃圾收集过程期间,将在收集集合中发现活对象。对于发现的每个活对象,方法500确定与活对象关联的类加载器以及其中包含活对象的区域。方法500标记512与活对象关联的类加载器300为“活”,并且设置512类加载器的位矢量306中的用于活对象驻留于其中的区域的位。
在递增式无用对象收集过程结束时,方法500再次检查收集集合中的类加载器300。对于收集集合中的每个类加载器300,方法500确定518类加载器300是否被标记为“活”。如果类加载器300未被标记为“活”,则可以推断累加器300为停用(dead,不可达),并且与类加载器300关联的任何类的实例未驻留于收集集合以内或者以外。在这样的情况下,方法500从收集集合卸载520类加载器300。否则,方法500让类加载器300留在收集集合中。
参照图6,上文描述的递增式垃圾收集过程的不同变化是可能的并且在本发明的范围内。例如取代使用结合图3和4描述的四个表示304a-d来实施记忆集合,可以为每个类集合、比如每个类加载器300分配位矢量306。虽然这一实施方式可能没有先前描述的四个表示304a-d那样高效地使用存储器,但是尤其在大量类加载器300为Singleton内加载器时或者在类加载器300定义少量类或者具有对象堆210上的那些类的少量实例的情况下,它可以在简化性方面具有优点。它也可以在对象堆201中有相对少量区域302的情况下高效,因为这将减少每个位矢量300中的位数,因此减少每个位矢量300利用的存储器数量。
参照图7,在另一实施方式中,取代为每个类加载器300提供位矢量306,可以为每个类700提供位矢量306。当在区域302中包含类时,可以设置与区域302关联的位。在递增式垃圾收集过程期间,可以检查位矢量306以确定在收集集合以内或者以外的区域302中是否包含收集集合中的类700的实例。如果使用类700的位矢量306来确定它为停用,则可以从收集集合卸载类700。备选地,该过程可以在从收集集合卸载类700中的任何类之前等待直至类加载器300或者其他类组停用。在所有类700停用时,可以作为组卸载类700。也可以修改这一实施方式以将图3和4中描述的表示304a-d中的任何描述用于个别类700。
参照图8,在本发明的又一实施方式中,可以使用前三个表示304a-c而省略利用位矢量306的任何表示304d。在这样的实施方式中,“立即”表示304b可以被配置为存储用于标识所选数目的区域302的具体数目的指针某一限制。在达到限制时,可以使用溢出表示304c,该溢出表示假设在所有区域302中包括与类集合关联的类的实例。在类集合使用溢出表示304c时,类集合可以在溢出表示304c中保留直至执行全局垃圾收集并且卸载类集合。除了在许多类集合包括如下区域中的实例的情况下之外,这一实施方式可以用高效方式利用存储器,这些区域超过立即表示304b中可用的指针数目。这将使许多类集合使用溢出表示304c,这可能效率低。
图3、6、7和8中所示实施方式简单地是用于实施记忆集合304的不同技术的示例。每个可以在不同运行时环境中具有优点和缺点。实施方式仅通过示例来呈现而未旨在于限制。因此,其他变化是可能的并且在本发明的范围内。
附图中的流程图和框图示出根据本发明的各种实施方式的系统、方法和计算机可用介质的可能实现方式的架构、功能和操作。就这一点,在流程图或者框图中的每个块可以代表如下代码模块、段或者部分,该代码模块、段或者部分包括用于实施指定的逻辑功能的一个或者多个可执行指令。也应当注意,在一些备选实现方式中,在块中标记的功能可以不按图中指出的顺序出现。例如事实上根据涉及到的功能可以基本上并行执行接连示出的两个块或者有时可以按照相反顺序执行这些块。根据涉及到的功能,可以删除一些块或者可以添加其他块。也将注意,框图和/或流程图示出的每个块以及在框图和/或流程图示出中的块的组合可以由执行指定的功能或者动作的基于专用硬件的系统实施、或者由专用硬件与计算机指令的组合实施。
Claims (12)
1.一种用于使用基于区域的垃圾收集器来递增地卸载类的方法,所述方法包括:
针对类集合维护记忆集合,所述记忆集合指示在存储器中的一个或者多个区域中是否包含所述类集合的实例、以及在存储器中的哪些区域中包含所述实例,其中记忆集合能够体现为字段,该字段至少包括下列表示:(1)“立即”表示,该“立即”表示存储一个或者多个指针,该指针指向存储器中的区域,(2)“位矢量”表示,该“位矢量”表示存储指向位矢量的指针,其中所述位矢量中的每个位被分配给存储器中的区域,每个位中的值指示在存储器中对应的所述区域中是否包含所述类集合的至少一个实例,其中如果包含类集合的实例的区域的数目超过“立即”表示能够存储的指针的数目,字段能够向“位矢量”表示转变;
在针对存储器中的所述区域的子集执行递增式垃圾收集过程时,检查所述记忆集合以确定所述类集合是否包括所述子集以外的区域中的实例;以及
如果所述记忆集合指示所述类集合包括所述子集以外的区域中的实例,则标识所述类集合为“活”。
2.根据权利要求1所述的方法,其中所述类集合是与类加载器关联的类集合、类组和单个类中之一。
3.根据权利要求1所述的方法,还包括:在针对所述子集执行所述递增式垃圾收集过程之前,重置所述位矢量中的用于所述子集中的所述区域的所述位。
4.根据权利要求1所述的方法,还包括:在针对所述子集执行所述递增式垃圾收集过程时,设置所述位矢量中的用于所述子集中的其中发现所述类集合的实例的那些区域的所述位。
5.根据权利要求4所述的方法,还包括:如果所述位矢量的所述位中的任何位被设置,则标识所述类集合为“活”。
6.根据权利要求1所述的方法,还包括:如果所述类集合被确定为不是“活”的,则卸载所述类集合。
7.一种用于使用基于区域的垃圾收集器来递增地卸载类的装置,所述装置包括:
垃圾收集模块,用于针对类集合维护记忆集合,所述记忆集合指示在存储器中的一个或者多个区域中是否包含所述类集合的实例、以及在存储器中的哪些区域中包含所述实例,其中记忆集合能够体现为字段,该字段至少包括下列表示:(1)“立即”表示,该“立即”表示存储一个或者多个指针,该指针指向存储器中的区域,(2)“位矢量”表示,该“位矢量”表示存储指向位矢量的指针,其中所述位矢量中的每个位被分配给存储器中的区域,每个位中的值指示在存储器中对应的所述区域中是否包含所述类集合的至少一个实例,其中如果包含类集合的实例的区域的数目超过“立即”表示能够存储的指针的数目,字段能够向“位矢量”表示转变;
所述垃圾收集模块还被配置为在针对所述存储器中的所述区域的子集执行递增式垃圾收集过程时,检查所述记忆集合以确定所述类集合是否包括所述子集以外的区域中的实例;以及
所述垃圾收集模块还被配置为如果所述记忆集合指示所述类集合包括所述子集以外的区域中的实例,则标识所述类集合为“活”。
8.根据权利要求7所述的装置,其中所述类集合是与类加载器管理的类集合、类组和单个类中之一。
9.根据权利要求7所述的装置,其中所述垃圾收集模块还被配置为在针对所述子集执行所述递增式垃圾收集过程之前,重置所述位矢量中的用于所述子集中的所述区域的所述位。
10.根据权利要求7所述的装置,其中所述垃圾收集模块还被配置为在针对所述子集执行所述递增式垃圾收集过程时,设置所述位矢量中的用于所述子集中的其中发现所述类集合的实例的那些区域的所述位。
11.根据权利要求10所述的装置,其中所述垃圾收集模块还被配置为如果所述位矢量的所述位中的任何位被设置,则标识所述类集合为“活”。
12.根据权利要求7所述的装置,其中所述垃圾收集模块还被配置为如果所述类集合被确定为不是“活”的,则卸载所述类集合。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/023,447 US8489653B2 (en) | 2011-02-08 | 2011-02-08 | Incremental class unloading in a region-based garbage collector |
US13/023,447 | 2011-02-08 | ||
PCT/CA2012/050065 WO2012106817A1 (en) | 2011-02-08 | 2012-02-06 | Incremental class unloading in a region-based garbage collector |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103339616A CN103339616A (zh) | 2013-10-02 |
CN103339616B true CN103339616B (zh) | 2016-01-20 |
Family
ID=46601403
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280006988.1A Active CN103339616B (zh) | 2011-02-08 | 2012-02-06 | 用于基于区域的垃圾收集器中的递增类卸载的方法和装置 |
Country Status (6)
Country | Link |
---|---|
US (3) | US8489653B2 (zh) |
JP (1) | JP5868429B2 (zh) |
CN (1) | CN103339616B (zh) |
DE (1) | DE112012000365T5 (zh) |
GB (1) | GB2501445B (zh) |
WO (1) | WO2012106817A1 (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8751755B2 (en) | 2007-12-27 | 2014-06-10 | Sandisk Enterprise Ip Llc | Mass storage controller volatile memory containing metadata related to flash memory storage |
US9699263B1 (en) | 2012-08-17 | 2017-07-04 | Sandisk Technologies Llc. | Automatic read and write acceleration of data accessed by virtual machines |
US9612948B2 (en) | 2012-12-27 | 2017-04-04 | Sandisk Technologies Llc | Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device |
US9870830B1 (en) | 2013-03-14 | 2018-01-16 | Sandisk Technologies Llc | Optimal multilevel sensing for reading data from a storage medium |
US9524235B1 (en) | 2013-07-25 | 2016-12-20 | Sandisk Technologies Llc | Local hash value generation in non-volatile data storage systems |
US9639463B1 (en) * | 2013-08-26 | 2017-05-02 | Sandisk Technologies Llc | Heuristic aware garbage collection scheme in storage systems |
US9703816B2 (en) | 2013-11-19 | 2017-07-11 | Sandisk Technologies Llc | Method and system for forward reference logging in a persistent datastore |
US9520197B2 (en) | 2013-11-22 | 2016-12-13 | Sandisk Technologies Llc | Adaptive erase of a storage device |
US9520162B2 (en) | 2013-11-27 | 2016-12-13 | Sandisk Technologies Llc | DIMM device controller supervisor |
US9582058B2 (en) | 2013-11-29 | 2017-02-28 | Sandisk Technologies Llc | Power inrush management of storage devices |
US9703636B2 (en) | 2014-03-01 | 2017-07-11 | Sandisk Technologies Llc | Firmware reversion trigger and control |
US9454448B2 (en) | 2014-03-19 | 2016-09-27 | Sandisk Technologies Llc | Fault testing in storage devices |
US9448876B2 (en) | 2014-03-19 | 2016-09-20 | Sandisk Technologies Llc | Fault detection and prediction in storage devices |
US9626400B2 (en) | 2014-03-31 | 2017-04-18 | Sandisk Technologies Llc | Compaction of information in tiered data structure |
US9626399B2 (en) | 2014-03-31 | 2017-04-18 | Sandisk Technologies Llc | Conditional updates for reducing frequency of data modification operations |
US9697267B2 (en) | 2014-04-03 | 2017-07-04 | Sandisk Technologies Llc | Methods and systems for performing efficient snapshots in tiered data structures |
US10146448B2 (en) | 2014-05-30 | 2018-12-04 | Sandisk Technologies Llc | Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device |
US10656840B2 (en) | 2014-05-30 | 2020-05-19 | Sandisk Technologies Llc | Real-time I/O pattern recognition to enhance performance and endurance of a storage device |
US10114557B2 (en) | 2014-05-30 | 2018-10-30 | Sandisk Technologies Llc | Identification of hot regions to enhance performance and endurance of a non-volatile storage device |
US10656842B2 (en) | 2014-05-30 | 2020-05-19 | Sandisk Technologies Llc | Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device |
US10372613B2 (en) | 2014-05-30 | 2019-08-06 | Sandisk Technologies Llc | Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device |
US9703491B2 (en) | 2014-05-30 | 2017-07-11 | Sandisk Technologies Llc | Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device |
US10162748B2 (en) | 2014-05-30 | 2018-12-25 | Sandisk Technologies Llc | Prioritizing garbage collection and block allocation based on I/O history for logical address regions |
US9652381B2 (en) | 2014-06-19 | 2017-05-16 | Sandisk Technologies Llc | Sub-block garbage collection |
US11249899B2 (en) * | 2018-09-19 | 2022-02-15 | Cisco Technology, Inc. | Filesystem management for cloud object storage |
US11573894B2 (en) * | 2020-10-29 | 2023-02-07 | Oracle International Corporation | Tracking garbage collection states of references |
US11875193B2 (en) | 2021-03-25 | 2024-01-16 | Oracle International Corporation | Tracking frame states of call stack frames including colorless roots |
US11573794B2 (en) | 2021-03-25 | 2023-02-07 | Oracle International Corporation | Implementing state-based frame barriers to process colorless roots during concurrent execution |
US11513954B2 (en) | 2021-03-25 | 2022-11-29 | Oracle International Corporation | Consolidated and concurrent remapping and identification for colorless roots |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10320263A (ja) * | 1997-05-22 | 1998-12-04 | Fujitsu Ltd | Gcアタッチメント装置及びプログラム記憶媒体 |
US6701334B1 (en) * | 1999-07-13 | 2004-03-02 | Sun Microsystems, Inc. | Methods and apparatus for implementing individual class loaders |
US6185581B1 (en) * | 1999-08-19 | 2001-02-06 | Sun Microsystems, Inc. | Train-algorithm-based garbage collector employing fixed-size remembered sets |
US6529919B1 (en) * | 2000-02-15 | 2003-03-04 | Sun Microsystems, Inc. | Incremental class unloading in a train-algorithm-based garbage collector |
US7340494B1 (en) * | 2004-03-12 | 2008-03-04 | Sun Microsystems, Inc. | Garbage-first garbage collection |
US7272695B1 (en) * | 2004-09-13 | 2007-09-18 | Sun Microsystems, Inc. | Hot-card caching to avoid excessive remembered-set updating |
US7499961B2 (en) | 2006-01-12 | 2009-03-03 | Sun Microsystems, Inc. | Method and apparatus for limiting the size and facilitating maintenance of remembered sets in a space incremental garbage collector |
CN100405304C (zh) * | 2006-07-27 | 2008-07-23 | 清华大学 | 基于存储区域网络的高速固态存储设备的实现方法 |
US20110264880A1 (en) * | 2010-04-23 | 2011-10-27 | Tatu Ylonen Oy Ltd | Object copying with re-copying concurrently written objects |
-
2011
- 2011-02-08 US US13/023,447 patent/US8489653B2/en not_active Expired - Fee Related
-
2012
- 2012-02-06 CN CN201280006988.1A patent/CN103339616B/zh active Active
- 2012-02-06 JP JP2013552082A patent/JP5868429B2/ja active Active
- 2012-02-06 DE DE112012000365T patent/DE112012000365T5/de not_active Ceased
- 2012-02-06 GB GB1314691.5A patent/GB2501445B/en active Active
- 2012-02-06 WO PCT/CA2012/050065 patent/WO2012106817A1/en active Application Filing
- 2012-03-28 US US13/431,973 patent/US8554807B2/en not_active Expired - Fee Related
-
2013
- 2013-06-14 US US13/917,925 patent/US9870317B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN103339616A (zh) | 2013-10-02 |
WO2012106817A1 (en) | 2012-08-16 |
DE112012000365T5 (de) | 2013-10-17 |
JP2014504768A (ja) | 2014-02-24 |
US20120203803A1 (en) | 2012-08-09 |
US8554807B2 (en) | 2013-10-08 |
GB201314691D0 (en) | 2013-10-02 |
JP5868429B2 (ja) | 2016-02-24 |
US8489653B2 (en) | 2013-07-16 |
GB2501445A (en) | 2013-10-23 |
US9870317B2 (en) | 2018-01-16 |
GB2501445B (en) | 2014-06-04 |
US20130282772A1 (en) | 2013-10-24 |
US20120203804A1 (en) | 2012-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103339616B (zh) | 用于基于区域的垃圾收集器中的递增类卸载的方法和装置 | |
EP2175370B1 (en) | System and method of using pooled thread-local character arrays | |
US10114745B2 (en) | Assisted garbage collection in a virtual machine | |
JP5064134B2 (ja) | メモリ管理方法およびその方法を用いるコンピュータ | |
JP2010073127A (ja) | メモリ管理方法およびその方法を用いるコンピュータ | |
US10628306B2 (en) | Garbage collector | |
CN102855137B (zh) | 用于自动化部件的编程的方法和程序设计系统 | |
CN104536773A (zh) | 基于内存扫描的嵌入式软件动态内存回收方法 | |
US20120221821A1 (en) | Method of managing memory in computer system, computer system and memory managing program | |
US11650916B2 (en) | Closed loop garbage collector | |
WO2020256842A1 (en) | Arena-based memory management | |
US11188460B2 (en) | Arena-based memory management | |
CN1781127B (zh) | 便携式数据载体中的存储器管理方法 | |
CN109923527B (zh) | 可变类型建立器 | |
US8326886B2 (en) | Per-thread, per-instance data storage | |
JP5756549B2 (ja) | 記憶領域管理方法、計算機システム及びプログラム | |
JP2012234567A (ja) | メモリ管理方法、コンピュータ及びプログラム | |
JP5646591B2 (ja) | マルチタスク仮想マシンのためのヒープ組織 | |
US20120131069A1 (en) | Object consolidation to a grid of a virtual machine | |
Kim et al. | Efficient reuse of local regions in memory-limited mobile devices | |
Dwivedi et al. | Effectiveness of Garbage Collector in. Net Framework |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |