看了两种基本方法:
1 mark sweep
就是收集的时候
第一步 把用到的对象标记出来
第二部 把$1中没有标记的对象收集,标记了的对象的标记清空 。
2 三色法
感觉只是把引用的对象和没有引用的对象分开。
其实思路很简单:
所有对象分为引用的和没有引用的。分别用黑色和白色的区域来放。
然后把白色的区域里面的对象都释放了就可以了。
1开始的时候先假设所有的对象都是要释放的(都放在白色区域里面)
2 但是我们知道一个事实:顶级对象肯定是不能释放的!于是把顶级对象挑出来放到一个灰色区域。以后的游戏都是在灰色的区域里进行。
3 对灰色区域里面的每个对象做这样的事情:把它的直接引用的对象放到灰色区域,然后把
这个对象自己放到黑色区域里。重复这个事情直到最后灰色区域空了。
4 现在只有黑色和白色区域有对象了。白色区域里面的对象就是没有被其它对象引用的,就可以安全地释放了。
垃圾收集 原理
最新推荐文章于 2025-08-22 11:57:00 发布