如何确定哪些对象是否可以被回收?
1.引用计数法。
上文提到了,引用一次计数加1,取消引用则减一,等到为0时等待被回收,现已不被使用。
2.枚举根节点做可达性分析:
目前主流的商用JVM都是通过可达性分析来判断对象是否可以被回收的。
这个算法的基本思路是:
通过一系列被称为「GCRoots」的根对象作为起始节点集,从这些节点开始,通过引用关系向下搜寻,搜寻走过的路径称为「引用链」,如果某个对象到GCRoots没有任何引用链相连,就说明该对象不可达,即可以被回收。
那么什么是对象可达?GC Roots是什么? 哪些东西可以作为GCRoots呢?
1、什么是对象可达
对象可达指的就是:双方存在直接或间接的引用关系。 根可达或GC Roots可达就是指:对象到GC Roots存在直接或间接的引用关系。
public class MyObject {
private String objectName;//对象名
private MyObject refrence;//依赖对象
public MyObject(String objectName) {
this.objectName