引用计数法
在一个对象被创建的时候系统会给这个对象初始化一个计数器,当该对象被引用到的时候就+1,反之则-1。这种算法是比较好用的,效率较高,但是当出现循环以来的时候该算法就出现了短板。出现循环依赖的两个对象的计数器都不会变为0就代表他们不会被清除。
可达性分析
根搜索算法,从根对象(gc root)出发,一步一步遍历找到引用的对象,然后从引用的对象在继续往下找,从而形成一个引用链。而不在引用链上的对象就是不可达对象,就是我们说的垃圾,他们会被回收掉。
gc root在对象视图外,是特别定义的起点。gc root不是一组对象,通常情况下它是一组特殊管理的指针。