- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
垃圾收集的原理浅析
?垃圾收集的原理浅析??
1.?????? (GC)中的常用算法
关键术语:
a)?????? 垃圾(garbage/live object),指在程序中堆上已经被分配但是不会被再次使用的对象。许多数据说明,在实际的程序中,大多数的对象只存在一个很短的周期,需要长期保存Reference的对象很少。
b)?????? 垃圾收集:所有的允许分配堆内存的程序都提供了垃圾收集方法。在C/C++中,实现需要用户自己调用alloc/free , new/delete分配内存。在C#/Java中,虚拟机都提供了自动垃圾收集,根据对象的生存周期与引用计数对垃圾对象进行回收。
c)?????? 堆空间的增长与重整:[To-do:how did C/C++ do this]
C#的堆空间大小限制取决于虚拟内存的大小,通常来说.net虚拟机并不会限制可用的内存大小,而java默认的堆大小在256M左右,如果需要使用更大的堆,则需要使用JVM的-Xmx参数指定堆栈的上限。java和C++都采用了分段的堆,在gc过程中会移动对象,从而得到更加连续的堆可用内存,更高的空间使用效率。
d)?????? 并行的与串行的垃圾收集
并行的垃圾收集指的是在单独的线程中执行GC,不影响其他的线程执行
串行的垃圾收集:GC线程将会挂起当前所有的执行线程直到GC线程返回。
e)?????? Root Set与可达集
优化的编译器可以通过变量的生存周期决定对象在最合适的时候(不会被将要执行的程序引用)回收,但是在常用的算法中,一种简化的方式更加经常被采用,就是对象根集合与可达集合。因为对象只有通过被引用或者作为全局对象的时候才可以被访问,所以从全局对象可以导航到所有的活动对象,而其他的对象则被视为无用内存,被GC回收。全局对象的集合称为Root Set,而通过导航测试确定垃圾的过程被称为可达性测试,可以被导航的对象集合被称为可达集。
通常GC都包含了垃圾检测和垃圾回收两个阶段。
基本的GC算法包括以下几种:
a)?????? Reference Counting(引用计数)
引用计数为每一个对象提供了当前被引用的次数。前者显式的便利了系统中所有的指针得到可用的对象集合,后者便利每一个对象,判断对象是否仍被引用,即对象是否还将被使用。RC的一个重要的好处是它的实时性,因为每一个操作都可以及时地修改对象的Reference count。从而在语言的层面上实现GC。而且其他的执行进程不需要被挂起。问题是GC本身需要占用多余的存储空间。
Comment: Not always effective, hard to make efficient!
当程序创建一个循环引用关系的时候,环中的对象的引用计数永远不会降为0,也就永远无法被回收,这种情况下,引用计数算法将会失效。
效率的问题源于RC的本质,它的耗费与处理时间成正比(per operation update)。这个问题对于栈上的生存期较短的对象尤其显著。延迟的引用计数技术可以有效地提高效率,然而其占用的处理时间仍然是成比例的,只是比例相比下降了很多。
对象的回收:
RC为零的对象将会被添加到一个回收链表中,等待回收进程回收。
b)?????? Mark-Sweep(标记-清除)
标记清扫(MS)算法首先通过Root Set得到当前的可达集并对相应的对象作出标记(Mark),然后将非可达集添加到回收链表中(Sweep)。
MS的第一个问题是它容易造成零碎地内存,小对象往往散步在堆中,造成难以创建大对象。(事实上这个问题对于所有的GC算法都存在)
MS第二个问题也是它的效率问题,其耗费与堆大小(活动对象与垃圾对象的总合)成正比。
MS的第三个问题是对象局部性(locality),因为对象不会被移动,造成堆上存在大量空隙。
c)?????? Mark-Compact(标记-压缩算法)
标记-压缩算法(MC)与MS算法的第一步骤相同,在第二步骤中,MC移动所有的活动对象是他们在堆上相邻的位置存在,从而形成连续的空闲内存。这个过程类似于Windows的内存碎片整理。
MC的问题显而易见,对于大量临时对象的情况下,其性能远低于MS算法。
MC与MS在第一个阶段非常类似,但是不同是MC并不回收垃圾,而MS往往进行回收。
d)?????? Coping(复制)
拷贝回收合并了MC算法中的扫描与压缩两个过程,它的目标也是将所有的活动对象移动到相邻的空间中,从而形成连续的可用内存。
最常见的Coping算法将堆分为两个区域,在运行过程中同时仅有一个区域可以被引用。在每一次整理过程中,使用区域的对象将会被拷贝到空闲区域中连续的存储空间中。(Cheney)使用广度优先的遍历算法(内存中的引用关系是树状的结构)。
Coping的最大问题是它要求实际
您可能关注的文档
最近下载
- 课件:中石油四起典型事故案例分析.ppt VIP
- 通过法律的社会控制.pdf VIP
- (哈尔滨工业大学高级工商管理硕士课程介绍.docx VIP
- 2025年上海市秋考语文真题之文言文一、文言文二知识点汇总.docx VIP
- 机械制图与计算机绘图(第3版)邵娟琴课后习题答案.pdf
- 统编版2024-2025学年四年级上册语文期末专题训练:文言文阅读(含答案).docx VIP
- 超星尔雅学习通《中国传统玉文化与美玉鉴赏》章节测试答案满分版.doc VIP
- 2025年泸州市中考英语试卷真题(含答案).docx VIP
- 中国医大一院内科王永权.ppt VIP
- 2024年11月2日全国事业单位联考B类《综合应用能力》题及参考答案.pdf VIP
文档评论(0)