[发明专利]一种基于生命期预测的内存分配和垃圾收集方法在审
申请号: | 201410247496.2 | 申请日: | 2014-06-04 |
公开(公告)号: | CN104035879A | 公开(公告)日: | 2014-09-10 |
发明(设计)人: | 白瑞林;张涛 | 申请(专利权)人: | 江南大学 |
主分类号: | G06F12/02 | 分类号: | G06F12/02 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 214122 江苏省*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 生命 预测 内存 分配 垃圾 收集 方法 | ||
技术领域
本发明涉及一种内存自动管理方法,具体是指一种基于生命期预测的内存分配和垃圾收集方法。该方法可用于内存资源有限的开发环境,例如嵌入式虚拟机平台和语言编译环境。
背景技术
现代编程语言当中,例如java和C#,若程序为某个对象分配了内存,当一个对象不再被其它对象引用的时候,这个对象就成为“垃圾”对象,“垃圾”对象所占用的内存如果得不到及时释放,系统内存就会被逐步蚕食殆尽,从而导致应用系统崩溃。
为解决以上问题,系统需要提供垃圾收集机制。垃圾收集的精确定义是动态分配内存的自动管理机制。垃圾收集器会自动回收垃圾对象所占用的空间以便被后续的新对象使用。
目前,在成熟的虚拟机和运行平台上,例如SUN的Java虚拟机(JVM)和Microsoft公共语言运行时(CLI)等,垃圾回收器(GC)是必不可少的组成部分,它们普遍采用分代式的垃圾收集算法。分代算法基于对象生命长度差异的原理,将内存分为不同年龄的子堆。由于多数对象存在的时间比较短,垃圾收集器先从最年轻的子堆中收集这些对象,在垃圾收集器运行后存活下来的对象会被移到下一代的子堆中。因为老一代的子堆不会经常被回收,所以节省了时间。但是,传统的分代式GC的次级收集多采用标记-清扫、清扫-压缩或拷贝等基本算法。这些算法均属于“stop-the-world”GC模式,在收集期间仍然需要主程序的多次暂停。再者,年长空间收集带来的较长时间延迟对系统影响较为明显。在年长空间的收集方面,采用拷贝算法和火车算法会产生较大的对象移动开销,而单一的清扫算法则会引起内存碎片问题,往往需要结合压缩策略,而压缩又需要较大的系统开销。
理想的垃圾收集器应该在运行时尽量避免程序的停顿,或者将停顿限制在可以接受的范围之内,同时要求具有较低的资源占有率和较高的收集效率,并且尽量避免内存碎片。垃圾收集作为一个研究重点,目前还没有一种方式能够完美的解决垃圾问题。所以,垃圾收集算法的研究逐渐成为广大程序员关注的要点。
发明内容
本发明的目的是提供一种基于生命期预测的内存分配和垃圾收集方法,在保证内存利用率的同时,减少垃圾收集所引起的暂停次数和执行内存回收所消耗的时间。
为达到此目的,本发明的技术方案如下:预测由同一加载类所产生对象的生命长度,结合分代思想进行内存分配;在传统内存分代基础上,对年幼区进行进一步的划分,实现内存分配和内存回收的并行执行;年长区采用lazy-buddy模式分配,结合mark-sweep方法进行垃圾收集的策略。具体包括以下内容:
(1)对象生命长度预测及分配区域选择:
计算在两次垃圾收集执行期间,由同一类所产生的对象存活字节数总和以及这期间此类对象分配字节数总和的比率。通过综合多次比率的平均值来预测此类所产生的对象的生命长度。分配对象时将生命长的对象分配到年长区,生命短的对象分配到年幼区。
(2)年幼区内存划分及分配收集策略:
年幼区进一步划分为三个区域,三个区域依次用来进行内存分配。在其中两块内存空间不足时,继续在第三块区域进行内存分配,同时,在前两块区域中进行垃圾收集。
(3)年长区分配及收集策略:
年长区采用1azy-buddy模式进行内存分配,利用mark-sweep方法进行垃圾收集,内存回收完毕后,对相邻空闲内存按照一定的比例进行有效合并。
本发明优点如下:通过对分配对象的生命期长度进行预测,将生命期长的对象直接分配到年长区域,减少了从年幼区域到年长区域复制的数量,进而降低垃圾回收执行的时间。在年幼区域中,通过对年幼区域的进一步有效划分,实现一种对象分配和垃圾收集同时进行的非暂停模式,从而减少了程序运行过程中的暂停次数。年长区域采用lazy-buddy模式进行内存分配,保证内存分配速度,结合mark-sweep方法进行垃圾收集,既避免了大对象的复制操作,又控制了内存碎片的数量。
附图说明
图1为本发明内存分配流程图
图2为本发明内存区域划分图
图3为本发明年幼区工作原理图
图4为本发明年长区内存分配和内存回收流程图
具体实施方式
为实现发明目的,使技术方案和特点更加清楚明白,下面结合附图及具体实施例,对本发明作进一步说明:
附图1是本发明的内存分配流程图。
内存分配采用生命期预测机制决定分配区域。当程序为每一个对象申请内存时,首先判断对象所属的类是否为长寿类,长寿类判定标准如下:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于江南大学,未经江南大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410247496.2/2.html,转载请声明来源钻瓜专利网。