Cheney的复制算法

cheney复制算法由cheney1970年研究提出,与典型的复制算法递归进行不同cheney是迭代的复制进行。典型的复制算法以类似深度优先遍历进行而cheney由广度优先遍历进行。(有木有再次感受到计算机基础的重要性,深度改广度换上自己的名字就可以名垂千古)。

Cheney的复制算法需要Scan和Free两个指针指向TO空间。SCAN用于搜索已复制完成的对象从而实现广度优先遍历,Free指针用于指向下一个空闲区域。开始由复制被根指向的对象复制到TO区域,然后在TO区域中由SCAN指针逐个搜索复制到TO空间,搜索完成后清除Free空间,最后交换Free和To空间,算法也就完成了。

我们直接以下图为例子解释这个过程:

注意:一开始这里SCAN和Free指向的是同一个空闲空间。

首先由根指向的对象复制到TO空间中,再有Scan指针从头到尾开始搜索:

Scan从A开始遍历搜索,将被引用的对象依次排在Free指向的空间,然后SCAN指向下一个对象C开始对C搜索,Free依然指向下一个空闲空间。

重复以上过程:

此刻,BD没有引用对象,而算法也就是从Free和To指向同个地址开始到Free和To指向同个地址搜索结束。清除FROM空间的垃圾,交换两个空间,算法结束垃圾清理完成。

Cheney的复制算法能流传至今固然有其优点,传统的复制算法使用递归便需要压栈处理,Cheney的复制算法使用迭代while(scan!=free)减少了函数调用和栈的负担,特别是巧妙的运用To堆空间为队列更是把内存节约做到极致。

但是,复制后引用对象在堆地址空间上不再相邻这就失去了典型复制算法中有利于CACHE缓存的优势。想不通的同学可以看看下篇文章分析为何不利于缓存(当然主要的计算机组成原理的基础还是要有的)。

图解GC(垃圾回收)复制算法加强版(1)Cheney的复制算法相关推荐

  1. 图解JVM垃圾回收算法

    1 简单介绍下----->垃圾回收概念 GC中的垃圾,指的是存在于内存中的.不会再被使用的对象.而垃圾回收就是把那些不再被使用的对象进行清除,收回占用的内存空间.如果不及时对内存中的垃圾进行清理 ...

  2. GC垃圾回收算法三种方式

    收 旧对象,破 对象,用不着的对象,用旧对象 .破对象 .用不着 的 对 象换 盆,换大铝盆,换各种盆...............啊哈哈哈是不是脑袋自动播放了...皮一下 1.判定对象存活算法 在回 ...

  3. JVM(三)GC垃圾回收以及四种GC算法

    JVM(三) 学习视频链接,以示尊重:https://www.bilibili.com/video/BV1iJ411d7jS?p=4 图片来源:https://blog.csdn.net/weixin ...

  4. 不要再问我“Java GC垃圾回收机制”了

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底 ...

  5. java gc会回收类么_Java GC 垃圾回收机制

    一.Java GC是什么? Java垃圾回收是对JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver ...

  6. gc的原因 频繁full_Java性能优化要点之:GC垃圾回收知识点整理

    要掌握了GC垃圾回收的相关知识点,程序员在工作中就不用担心内存管理了,因为垃圾收集器会自动进行管理.本文为大家整理了GC垃圾回收的学习笔记,主要内容包括了判断回收条件,虚拟机频繁full GC的解决对 ...

  7. 两篇文章带你搞懂GC垃圾回收之基础篇

    文章目录 1.JVM GC回收哪个区域的垃圾? 2.判断对象可以回收的方法 2.1 引用计数法 2.2 可达分析算法 2.3 什么对象可以当作GC Roots? 虚拟机栈中的引用对象 全局的静态的对象 ...

  8. golang GC垃圾回收机制

    ** golang GC垃圾回收 ** 垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行. Go ...

  9. GC垃圾回收—详细总结

    GC垃圾回收 JVM的垃圾回收机制,在内存充足的情况下,除非你显式调用System.gc(),否则它不会进行垃圾回收:在内存不足的情况下,垃圾回收将自动运行 判断对象是否要回收的方法 引用计数算法 给 ...

  10. 【JVM】GC垃圾回收(三)——零落成泥碾作尘,只有香如故

    [引子] 当世界上最后一个记得我的生命也忘记了我的时候,我该如何自处呢?我想我会最后看一眼我深爱的故乡,然后将占用这个世界的最后一缕精华也散去,让灵魂永归沉寂.GC垃圾回收机制也是如此,每一个最终消亡 ...

最新文章

  1. Spacebuilder在Mono上运行修改备忘
  2. SAP CRM product settype read from database table
  3. 判断一个指针有没有free_Free Code Camp的每个人现在都有一个档案袋
  4. NIOS2随笔——BMP解码与VGA显示
  5. jsf初学解决faces 中文输入乱码问题
  6. C++--第25课 - 异常处理 - 上
  7. FREESPACE 发布 logo v1.1
  8. 前端技术文档及工具汇总
  9. android手机wifi打不开,手机wifi开关打不开什么原因_手机wifi开关失灵的解决方法-系统城...
  10. OPPO 数据湖统一存储技术实践
  11. 苹果系统 如何快速访问服务器,mac下的finder怎么使用技巧 苹果系统如何快速打开Finder...
  12. 查看CUDA,GPU对应计算能力
  13. python通过qq邮箱发邮件
  14. Html和Xml中注释符
  15. rand()和srand()函数
  16. 由一条关于普元软件的新闻产生的感想
  17. pvifa怎么用计算机算,怎样用用“卡西欧”计算机fx-82ES PLUS 计算年金现值系数和年金终值系统?...
  18. 【NOIP2009PJ】道路游戏
  19. 解决浏览器使用百度搜索没反应?
  20. OSChina 周三乱弹 ——你未来老婆的背影

热门文章

  1. 新南威尔士 计算机硕士,澳洲新南威尔士大学计算机专业硕士课程介绍
  2. 证明左右特征向量正交
  3. linux yum安装scp,CentOS安装scp命令的软件包openssh-clients
  4. UNITY_iOS_接入微信登录及分享微信
  5. ios点击推送闪退_苹果ios企业签名常见问题及解决方案总结,开发者必看!
  6. Linux 电源管理 - Linux regulator framework
  7. [学习笔记]使用Vulcan L47网络测试仪仿真模拟TLSv1.2加密业务
  8. 2020数学建模国赛A题解题思路
  9. 详细理解TDMA以及OFDMA,更容易读懂论文
  10. BZOJ4987:Tree(树形DP)