gc判断对象是否需要回收的方式
1.引用计数法
给对象添加一个引用计数器,每有当对象被引用,计数器加一,引用失效,计数器减一,当对象引用计数器为0的时候,说明对象可回收(个人理解:从对象本身出发,计算被引用的次数)
优点:实现简单,判断效率高
缺点:无法解决对象间循环引用的问题
2.可达性分析法
从gc roots(根)开始,向下搜索它们引用的对象,形成一颗树,不是树的节点的对象就是不可达对象(个人理解为:从使用对象的一方出发,看对象是被使用到了)
A a=new A();
a.b=new B();
b.c=new C();
a位于方法栈中,它是一个gc root,其它的对象都是堆内对象
gc root包括
1.方法栈中的变量引用的对象
2.方法区中的常量引用的对象
3.方法区中的静态变量引用的对象
4.本地方法栈中引用的对象