Ruby的GC基于标记回收算法 。
RubyVM在启动之初就会新建好好大量的对象,放在一个空闲对象链表中(freelist),待代码新建对象时就可以很方便的取用。
这样被取用的对象就被从freelist里移除,freelist将越来越短。
最终freelist耗尽时,GC被触发。
首先,Ruby将停止程序的执行,Ruby使用了”停止这个世界,然后回收垃圾”的方式。
然后,Ruby会扫描所有的指向对象和值的指针或引用。同样,Ruby也会迭代虚拟机内部使用的指针。
它会标记每一个指针所能到达的对象。
接下来,Ruby将清理没有使用的,垃圾对象,将它们链入空闲对象链表(free list)
当多有的freelist里的对象都被标记为in use,ruby则会另外申请一整块heap memory。
这就是标记回收算法。