1.引用计数算法
每当一个地方引用计数器加一,引用失效,计数器减1。
不足:不能解决相互引用的问题。
2.可达性分析算法
通过GC Roots对象作为起始点,从这些点开始向下搜索,搜索走过的路径为引用链,当一个对象到GC Roots 没有任何引用链相连时,证明该对象不可用。(5,6,7虽然有关联,但是GC Roots 不可达,所以也会被回收)
可以作为GC Roots对象
- a.虚拟机栈(栈帧中的本地变量表)中的引用对象
- b.方法区中静态属性引用的对象
- c.方法区中常量引用的对象
- d本地方法栈中JNI引用的对象
3.finalize的用法
同一个对象只调用一次finalize方法。如果重写,会被显示调用,没有被重写,也会被调用。调用过的不再调用。