
Gc
小白笑苍
沉默是一种生活方式。
展开
-
Mark-Sweep算法
一点前言GC的各种算法本质上是由3种基本的算法组合优化来的,即Mark-Sweep标记清除算法、引用计数法和GC复制算法。今天主要学习下Mark-Sweep标记清除算法。最基本的Mark-Sweep标记清除算法标记清除算法由标记阶段和清除阶段组成,标记阶段会将当前仍然活跃的对象的mark字段标记为true(数据结构一般是stack)。清除阶段则是遍历所有的对象列表(数据结构一般为队列,链表等原创 2017-03-21 00:24:50 · 3377 阅读 · 0 评论 -
GC标记-清除算法
由标记阶段和清除阶段组成。标记是把所有活动对象做上标记,清除是把哪些没有标记(活动)的对象回收的阶段。标记阶段mark(obj){ if(obj.mark == FALSE) obj.mark = TRUE for(child : children(obj)) mark(*child)}mark_phase(){ for...原创 2018-05-14 10:45:48 · 1180 阅读 · 0 评论 -
GC-引用计数法
给每个block引入‘计数器’,表示对象的引用次数 计数器的增减在申请内存时会修改计数器:new_obj(size){ obj = pickup_chunk(size, $free_list) //引用计数法中所有空闲对象都在free_list中 if(obj == NULL) allocation_fail() else ...原创 2018-05-14 15:13:31 · 1231 阅读 · 0 评论 -
GC复制算法
就是只把某个空间里的活动对象复制到其他空间,把原空间里的所有对象都回收掉 heap分为from和to两个空间,当fron空间被占满时,GC会把活动对象全部复制到to空间。当复制完成后,该算法会把 From 空间和 To 空间互换,GC 也就结束了。From 空间和 To 空间大小必须一致。 对应的复制函数copying(){ $free = $to_start ...原创 2018-05-24 15:50:12 · 3288 阅读 · 2 评论