在我们写Java程序的时候,不需要去关注内存回收问题。jvm已经帮我处理了,那jvm是如何查找垃圾对象的呢?
1、引用计数器算法:给每个对象分配一个计算器,当有引用指向这个对象时,计数器加1,当指向该对象的引用失效时,计数器减一。最后如果该对象的计算器为0时,java垃圾回收器会认为该对象是可回收的。该算法无法解决循环引用问题。
A a = new A();
B b = new B();
a.b=b;
b.a=a;
a = null;
b = null;
2、根搜索算法:根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。