关于Ruby的GC

来源:互联网 发布:mac上怎么用搜狗输入法 编辑:程序博客网 时间:2024/05/16 20:29

对比Ruby和Python的GC

关于Ruby2.0的GC

Ruby的GC基于标记回收算法

RubyVM在启动之初就会新建好好大量的对象,放在一个空闲对象链表中(freelist),待代码新建对象时就可以很方便的取用。

这样被取用的对象就被从freelist里移除,freelist将越来越短。

最终freelist耗尽时,GC被触发。

首先,Ruby将停止程序的执行,Ruby使用了”停止这个世界,然后回收垃圾”的方式。然后,Ruby会扫描所有的指向对象和值的指针或引用。同样,Ruby也会迭代虚拟机内部使用的指针。它会标记每一个指针所能到达的对象。

接下来,Ruby将清理没有使用的,垃圾对象,将它们链入空闲对象链表(free list)当多有的freelist里的对象都被标记为in use,ruby则会另外申请一整块heap memory。

这就是标记回收算法。


0 0
原创粉丝点击