GC算法
文章平均质量分 86
chunyuan314
这个作者很懒,什么都没留下…
展开
-
GC算法实践(一) 内存分配篇
要实现自己的垃圾回收算法,首先要实现一套自己的内存分配方法,把内存的管理权掌握在自己手里,而不是每次都调用系统函数,向操作系统要一小块内存,否则垃圾回收就无从谈起。思路主要是: 一开始申请一块大的内存,后面每次程序需要内存就从这个内存块中分配,不够了再想办法处理(垃圾回收、压缩、分配更大的内存等)。 上面申请的一块大的内存一般叫做堆(heap)。名字叫什么不要紧,反正就是内存的一部分,原创 2017-10-12 00:13:51 · 2837 阅读 · 0 评论 -
GC算法实践(二) 对象标记、复制算法
上一篇文章中,我们实现了自定义分配内存,有了这个基础,我们可以开发垃圾回收算法了。GC算法有很多种,如引用计数法、标记-清除算法、复制算法、分代回收算法等,也有综合运用几种算法的。PHP用到了引用计数算法,Java用到了复制算法和分代回收算法。由于引用计数算法需要频繁更新引用计数,目前暂不研究;标记-清除算法则因为清除后造成大量内存碎片不好管理,目前只研究标记(标记出活动对象);复制算法是本篇研究的原创 2017-10-12 22:32:01 · 1681 阅读 · 0 评论 -
GC算法实践(三) 标记-压缩算法
1.标记-压缩算法简介标记-压缩算法的基本思路: 标记阶段。该阶段与标记-清除算法中的标记算法一样。 遍历根对象及其引用的对象。假设每个对象都有个标记位flag,对根对象集合中的每个根对象,从根对象出发,对可以访问到的每个对象的标记位flag设为1(活动对象)。 压缩阶段。该阶段分3步,依次是: 计算当前活动堆中活动对象移动后的地址。该步骤需要从堆的开始遍原创 2017-10-13 18:07:21 · 2338 阅读 · 0 评论 -
GC算法实践(四) 标记-清除算法
GC的标记-清除算法由标记阶段和清除阶段组成,标记阶段是标记出活动对象的阶段,《GC算法实践(二) 对象标记、清除算法》一文中已经实现了对活动对象的标记,该步骤需要从根对象出发,递归标记由根对象可以访问到的所有对象。清除阶段则是将非活动对象(垃圾)回收的阶段,暂且把这些回收后的一个一个的非活动对象叫做空闲块。回收当然是为了再次利用,所以需要用合适的方法把这些空闲块组织起来,使得分配内存的时候可以从这原创 2017-10-25 08:06:02 · 561 阅读 · 0 评论