1. 引用计数法
引用计数法会给对象添加一个引用计数器,当这个对象的引用增加一个,就把引用计数器的值也加一,减少就相反,当引用计数器的值变为0,就说明这是一个失效的垃圾对象。
但是引用计数法也有一个问题,就是无法解决对象之间循环引用的问题。假设 object1.A = object2 ,但同时 object2.A = object1 。如图所示:
2.可达性分析算法
可达性分析算法引入了离散数学中的图论,把所有对象的引用关系看作一张图,类似一个树形结构,从 GC Roots 根结点作为起始点开始向下进行搜索,这个搜索的路径也就是引用链,当一个对象到 GC Roots 根结点没有引用链相连的时候,就将该对象归为不可用对象。