自适应垃圾收集方法及设备技术

技术编号:2861003 阅读:185 留言:0更新日期:2012-04-11 18:40
一种用于在动态存储器分配中的自适应垃圾收集的方法和设备。该方法包含:分配第一存储空间的一部分给新对象以响应来自预定的处理的请求;将所有占用第一存储空间存储的对象中由预定的处理使用的对象复制到第二存储空间;并根据预定的信息调整第一存储空间的大小和第二存储空间的大小。

【技术实现步骤摘要】

本专利技术涉及垃圾收集(garbage collection),更具体地说,涉及使用在其中空间边界的位置在半空间(semi-空间)复制收集算法的结构中改变的自适应非对称空间结构的自适应垃圾收集。
技术介绍
在程序设计术语中,垃圾是被确定为由不再被程序引用的对象占用并随后被操作系统收集的数据存储空间。垃圾收集是释放这样的存储空间从而该存储空间可以为其它程序有效地重复利用的处理。换句话说,垃圾收集是用于动态地管理存储器的方法。传统地,必要时操作系统可以强制地终止未能将由不再被程序引用的对象占用的存储空间返回的程序,但是通常,程序员需要显式地声明必要的存储空间并当程序不再需要该存储空间时使程序将该存储空间返回给操作系统。当不再被需要的存储空间的返回被忽视时,程序可能会由于未知原因而不是逻辑上的错误而终止。程序员很难找出难懂的问题。因此,在系统中自动地查找不被使用的存储空间并将该存储空间释放的技术已经被开发。用于垃圾收集的算法包括半空间复制收集算法和世代垃圾收集算法。以下的描述涉及这两种算法。图1示出传统的半空间复制收集算法。如图1中所示,存储区域被分成两个相等空间的区域from-空间和to-空间。From-空间是分配给对象的存储区域的一部分,to-空间是根据垃圾收集占用from-空间的对象被复制到其的存储区域的一部分。这里,to-空间的大小需要与from-空间的大小相同,因为,当所有占据from-空间的对象为“活跃”时,所有的对象需要在垃圾收集期间被复制到to-空间。此外,为执行传统的半空间复制收集算法,单一对象的两次复制临时地需要指针反转(pointerreversal)。这是由Cheney公开的[“A Nonrecursive List Compaction Algorithm,”(非递归列表压缩算法)Communications of the ACM,13(11),pp 677-678,1970]。在面向对象的程序设计中,对象是通过其具有数据变量的子类和特定类的方法或过程通过其被实现的实例。如图1中所示,从第1阶段到第3阶段,对象被分配到from-空间。在第3阶段,from-空间变满并且不再被分配给对象。因此,在第4阶段,在占用from-空间的对象中,只有“活动”对象,而不是不再被使用的对象,即垃圾,被复制到to-空间。象这样,先前的from-空间变为to-空间,并且先前的to-空间变成from-空间。因此,在第5阶段,如在第1阶段,对象被分配到from-空间。通常,半空间复制收集算法被应用于其它动态存储管理算法,例如世代垃圾收集算法,而不是单独地被使用。图2示出传统的世代垃圾收集算法。传统的世代垃圾收集算法自80年代起已被广泛地使用。在传统的世代垃圾收集算法中,根据对象的年代(age),存储堆(heap)被分为两个或多个世代空间。在图2中,存储堆被分为年轻代区域200和年老代区域250。由于在年轻代区域200中使用如图1中所示的半空间复制收集算法的垃圾收集被执行,所以年轻代区域200包含from-空间210和to-空间220。对象的年代与该对象从一个半空间到另一个半空间产生的复制的次数相关。因此,当对象已经被复制多次时,该对象可以被认为变老了。在下文中,将详细地描述传统的世代垃圾收集算法。参考图2,对于垃圾收集,在年轻代区域200中使用半空间复制收集算法,并且在年老代区域250中使用标记整理(mark-compact)算法。新对象被分配到年轻代区域中的from-空间210。附图标记212、214、216和218表示被分配到from-空间210的对象。在年轻代区域200中,通过仅将活动对象212和216从from-空间210复制到to-空间220来执行垃圾收集。当在年轻代区域200中执行多次垃圾收集操作时已经为“活跃”状态的对象218被定义为年老的对象并且被转移到年老代区域250。当年老代区域250中没有对象被转移到其的空间时,在年老代区域250中执行垃圾收集,并且通常比在年轻代区域200中花更多时间。如图1所示,在半空间复制收集算法中,在两个半空间中只有一个存储空间被用于对象分配。换句话说,由于垃圾收集是在存储空间充满对象时被执行,所以半空间复制收集算法存在随着存储空间的大小减少垃圾收集的次数增加的问题。由于半空间复制收集算法通常被用在年轻代区域200中,所以如图2所示的世代垃圾收集算法也具有上述问题。此外,世代垃圾收集算法具有浮动(floating)垃圾数量增加的问题。浮动垃圾是指不再被使用但仍然存在于存储空间,即在年老代区域250中的对象,因为对象通过在年轻代区域200中执行的垃圾收集被转移到年老代区域250,而在年老代区域250中还没有执行垃圾收集。执行垃圾收集越频繁,转移到年老代区域250的对象就越多。结果浮动垃圾的数量增加,降低了整体存储效率。
技术实现思路
本专利技术提供一种通过改变用于半空间复制收集算法的必要空间的大小来收集垃圾的更有效的方法。根据本专利技术的一方面,提供了一种关于动态存储分配的垃圾收集方法。该垃圾收集方法包含响应来自预定处理的请求分配第一存储空间的一部分给新对象,将所有占用第一存储空间的对象中被该预定处理使用的对象复制到第二存储空间,并根据预定的信息调整第一存储空间的大小和第二存储空间的大小。优选地,该预定的信息是在分配和复制步骤中生成的历史信息。该预定信息最好是所有在第一存储空间中的对象占用的部分的大小和由所有被从第一存储空间复制到第二存储空间的对象占用的部分大小之间的比率。根据本专利技术的另一方面,提供了一种提供关于动态存储分配的垃圾收集功能的设备。该设备包含用于响应预定的处理而将新对象分配到其的第一存储空间;在所有占用第一存储空间的对象中由预定处理使用的对象被复制到其的第二存储空间;和垃圾收集模块,其被该处理激活并分配用于将对象存储在第一和第二存储空间的空间,根据预定信息调整第一存储空间的大小和第二存储空间的大小,将控制权交还给预定的处理,并随后处于非激活状态。这里,该预定处理可以由用户应用程序或系统程序生成。预定信息最好是当第一存储空间的一部分被分配给新对象以响应来自预定处理的请求时,和在所有占用第一存储空间的对象中由该预定处理使用的对象被复制到第二存储空间时生成的历史信息。此外,该预定信息最好是由所有在第一存储空间中的对象占用的部分的大小和由从第一存储空间复制到第二存储空间的对象占用的部分的大小之间的比率。附图说明通过参考附图对其示例性实施例的详细描述本专利技术的上述特点和其它特点和优点将变得更加清楚,其中图1示出传统的半空间复制收集算法;图2示出传统的世代垃圾收集算法;图3示出用在用于根据本专利技术的实施例的自适应世代垃圾收集的方法的存储结构;和图4是根据本专利技术的实施例在年轻代区域中执行垃圾收集的方法的流程图。具体实施例方式现在将参考附图更全面地描述本专利技术,本专利技术的示例性实施例表示在附图中。然而,本专利技术可以以不同的形式实现,并且不应被解释为仅限于在此提出的实施例;这些实施例被提供以使公开更彻底和完整、并全面地向本领域的技术人员传达本专利技术的概念。本专利技术的精神和范围由所附权利要求限定。在图中,相同的标号表示相同部件。在下文中,将参考附图详细地描述本专利技术的优选实施例。图3本文档来自技高网
...

【技术保护点】
一种在动态存储器分配中的垃圾收集方法,包含:(a)分配第一存储空间的一部分给新对象以响应来自预定的处理的请求;(b)将所有占用在第一存储空间的对象中由该预定的处理使用的对象复制到第二存储空间;和(c)根据预定的信息调 整第一存储空间的大小和第二存储空间的大小。

【技术特征摘要】
KR 2004-1-28 5469/041.一种在动态存储器分配中的垃圾收集方法,包含(a)分配第一存储空间的一部分给新对象以响应来自预定的处理的请求;(b)将所有占用在第一存储空间的对象中由该预定的处理使用的对象复制到第二存储空间;和(c)根据预定的信息调整第一存储空间的大小和第二存储空间的大小。2.如权利要求1所述的垃圾收集方法,其中,该预定的处理由用户应用程序生成。3.如权利要求1所述的垃圾收集方法,其中,该预定处理由系统应用程序生成。4.如权利要求1所述的垃圾收集方法,其中,该预定信息是在步骤(a)和步骤(b)期间生成的历史信息。5.如权利要求1所述的垃圾收集方法,其中,该预定信息是由所有在第一存储空间中的对象占用的部分的大小和由被从第一存储空间复制到第二存储空间的对象所占用的部分的大小之间的比率。6.一种在动态存储器分配中提供垃圾收集功能的设备,包含第一...

【专利技术属性】
技术研发人员:郑承范罗曼诺夫斯基亚里克赛赵雄石许得万马尔科夫亚历山大米谢耶夫维塔利
申请(专利权)人:三星电子株式会社
类型:发明
国别省市:KR[韩国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1