经典GC算法
引用计数
每个对象保存自己被引用的数量。当引用数量为 0 时,将其回收。(可以立刻回收)
缺点
存在循环引用无法释放问题: 多个对象互相引用
延伸
循环引用解决方法:强弱引用
「若 A 强引用了 B,那 B 引用 A 时就需使用弱引用,当判断是否为无用对象时仅考虑强引用计数是否为 0,不关心弱引用计数的数量」
根集合:栈上的引用、全局变量常量、程序的元数据等等
标记-清扫(为解决上面的循环引用问题)【标记工作一次完成】
- 内存到达某个阈值或者固定时间长度会执行垃圾回收程序。
- STW(不然mark和用户程序并发会有问题):用户的程序被停止执行,开始运行GC。
- 算法分两个部分:标记